Я использую последнюю версию EasyHook для подключения некоторых функций ядра. Я действительно успешно отлаживал отладку на 64-разрядной виртуальной машине под управлением Windows 8.1, и я протестировал подключение к NtQuerydirectoryFile и NtQuerySystemInformation в пользовательском режиме и NtQuerySystemInformation в режиме ядра без каких-либо проблем.Вызов NtQuerydirectoryFile с крюка ядра Сбой ядра
Моя текущая проблема заключается в подключении NtQuerydirectoryFile с использованием того же кода, который я использовал для привязки к пользовательскому режиму, но он терпит неудачу, когда я вызываю исходную функцию, дающую мне ошибку нарушения доступа. Я использую следующий код для режима ядра крючка:
NTSTATUS NtQueryDirectoryFile_Hook(
__in HANDLE FileHandle,
__in_opt HANDLE Event,
__in_opt PIO_APC_ROUTINE ApcRoutine,
__in_opt PVOID ApcContext,
__out PIO_STATUS_BLOCK IoStatusBlock,
__out_bcount(Length) PVOID FileInformation,
__in ULONG Length,
__in FILE_INFORMATION_CLASS FileInformationClass,
__in BOOLEAN ReturnSingleEntry,
__in PUNICODE_STRING FileName OPTIONAL,
__in BOOLEAN RestartScan
)
{
NTSTATUS status;
status = NtQueryDirectoryFile(FileHandle, Event, ApcRoutine, ApcContext, IoStatusBlock, FileInformation, Length, FileInformationClass, ReturnSingleEntry, FileName, RestartScan);
return status;
}
А вот свалка: http://pastebin.com/Y29dsRUQ – FiFo
это выглядит как функция BuildQueryDirectoryIrp ожидает какое-то параметр в регистре RAX, и из-за способом был осуществлен батут прыжок, данные RAX регистра потерян! Так я вместо этого: '48 b8 00 00 00 00 00 00 00 00 мов Ракс, 0x0 далее e0 JMP rax' с этим: ' 50 \t \t \t \t \t \t \t толчок RAx 48 b8 00 00 00 00 00 00 00 00 mov rax, 0x0 48 87 04 24 xchg QWORD PTR [rsp], rax c3 \t \t ret' – FiFo