2014-08-27 47 views
2

我正在嘗試編寫用於監視進程的基本驅動程序並獲取進程路徑。
我創建PsSetCreateProcessNotifyRoutine和檢索使用ZwQueryInformationProcess
但在我ProcessCallback功能,當我嘗試使用NtCurrentProcess獲得當前進程HANDLE進程信息,它給我當前進程運行另一個進程。將ProcessID轉換爲進程句柄

例如:

我嘗試在C運行myProgram.exe:\,當我去到C:\ Windows資源管理器和運行 myProgram.exe我 司機給我explorer.exe的路徑因爲myProgram.exe內 的explorer.exe

運行我有在的ProcessID我ProcessCallback頭

void ProcessCallback(
    IN HANDLE hParentId, 
    IN HANDLE hProcessId, 
    IN BOOLEAN bCreate 
    ) 

。我可以將它轉換爲處理句柄嗎?

+1

我不能肯定,但它看起來像你應該能夠使用一個進程ID轉換成進程句柄ZwOpenProcess。 – 2014-08-27 21:28:11

+0

我正在嘗試ZwOpenProcess,但我不確定這是完美的工作!我的驅動程序崩潰,不能運行! – AminM 2014-08-28 16:57:35

+0

關於崩潰的錯誤檢查是什麼? – dvasanth 2014-08-31 08:58:32

回答

1

感謝在座的各位有幫助的評論 最後我解決我的問題,下面的代碼

HANDLE proc = NULL; 
OBJECT_ATTRIBUTES obj_attr; 
CLIENT_ID cid; 

cid.UniqueProcess= hProcessId; //PsGetCurrentProcessId(); 
cid.UniqueThread= NULL ; //(HANDLE)0; 
InitializeObjectAttributes(&obj_attr,NULL, 0, NULL, NULL); 
ZwOpenProcess(&proc, PROCESS_ALL_ACCESS, &obj_attr, &cid);