我很新的驅動程序編程。我有使用PsLookupProcessByProcessId例程的驅動程序代碼。我正嘗試使用Direct I/O。我使用DWORD變量從用戶模式發送PID並將其讀入buf。這裏是產生錯誤代碼在IRP_MJ_WRITE的MajorFunction的片段:驅動程序PsLookupProcessByProcessId錯誤代碼0xc000000b
PVOID buf=MmGetSystemAddressForMdlSafe(irp->MdlAddress,NormalPagePriority);
PEPROCESS Process = NULL;
DbgPrint("Process ID: %d",*(PHANDLE)buffer);
if(!NT_SUCCESS(status=PsLookupProcessByProcessId(*(PHANDLE)buf,&Process)))
{
DbgPrint("Error: (%#x)",status);
}
錯誤代碼是0xc000000b。打印PID時,打印正確。我不知道爲什麼這個錯誤代碼被返回。根據http://doxygen.reactos.org/d3/d93/ntstatus_8h_a27310062c4edd9cc932e5607884904ae.html#a27310062c4edd9cc932e5607884904ae這個錯誤代碼應該從PsLookupProcessThreadByCid()返回。在函數PsLookupProcessByProcessId中,我看不到任何可能返回該錯誤的指令http://doxygen.reactos.org/d2/d9f/ntoskrnl_2ps_2process_8c_a85b05806391e5e2647dfdaea64b5b7a4.html#a85b05806391e5e2647dfdaea64b5b7a4。我不知道真正的問題是什麼,我卡住了。請幫幫我。我正在開發Windows 7 x64免費編譯環境。
非常感謝你,但鏈接已斷開。我無法下載該工具。 –
您鏈接到的文檔適用於ReactOS,不適用於Windows。 –
該代碼片段有兩個明顯的問題:打印「* buffer」的值,但將'* buf'的值傳遞給PsLookupProcessByProcessId,並且將八字節值傳遞給DbgPrint,但使用4字節說明符。據猜測,問題在於用戶模式程序正在傳遞一個4字節的進程ID,因此您傳遞的8字節ID的高四字節是隨機垃圾。 –