2014-08-27 100 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);