Вызов NtQuerydirectoryFile из крючка ядра приводит к сбою ядра

Я использую последнюю версию EasyHook для подключения некоторых функций ядра.
Я успешно настроил важную отладку на 64-битной виртуальной машине под управлением Windows 8.1, и без проблем протестировал перехват NtQuerydirectoryFile и NtQuerySystemInformation в пользовательском режиме и NtQuerySystemInformation в режиме ядра.

Моя текущая проблема заключается в перехвате 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;
}

-1

Решение

Как я упоминал ранее, оригинальный прыжок на батуте изменил регистр RAX, поэтому я заменил его на другой батут:

50                             push   rax
48 b8 00 00 00 00 00 00 00 00  mov rax, 0x0
48 87 04 24                    xchg   QWORD PTR [rsp],rax
c3                             ret

В дополнение к исправлению функции, основанной на жестко заданном размере кода прыжка на батуте, поскольку новая версия больше. Теперь работает без проблем.

0

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector