-1
我使用的是最新版本的EasyHook的勾一些內核函數。 我做安裝調試成功的重要一個Windows 8.1的64位基於虛擬機上,我測試了,沒有任何問題,在內核模式下在用戶模式和NtQuerySystemInformation掛鉤都NtQuerydirectoryFile和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 MOV RAX,爲0x0 FF 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