将ProcessID转换为Process Handle

时间:2014-08-27 10:55:48

标签: windows device-driver wdk wdm

我正在尝试为监控过程编写基本驱动程序并获取进程路径 我创建PsSetCreateProcessNotifyRoutine并使用ZwQueryInformationProcess检索流程信息 但在我的ProcessCallback函数中,当我尝试使用HANDLE获取当前进程NtCurrentProcess时,它会为我提供运行另一个进程的当前进程。

例如:

  

我尝试在c:\中运行myProgram.exe,当我使用Windows资源管理器转到C:\并运行    myProgram.exe我的   驱动程序给我explorer.exe路径,因为myProgram.exe在里面运行   explorer.exe的

我的ProcessCallback标题中有processID

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

。我可以将它转换为进程句柄吗?

1 个答案:

答案 0 :(得分: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);