使用DWORD pid的PsLookupProcessByProcessId?参数1需要HANDLE?

时间:2015-02-21 08:37:37

标签: c driver wdk wdf

如何使用函数PsLookupProcessByProcessId()和我从用户空间获得的进程ID(DWORD pid)?

我编写了一个用户空间c ++应用程序来获取另一个应用程序的进程ID(例如calc.exe)并使用DeviceIoControl我可以通过我创建的结构成功地将pid发送给驱动程序。

DbgPrint("PID received : %i", pInp->pid);

打印出该过程的正确pid。 但是在做的时候:

 PsLookupProcessByProcessId(pInp->pid, eProcess);

我收到警告:

  

C4022:'PsLookupProcessByProcessId':实际参数1的指针不匹配

警告被视为错误,并且不会让我编译。 我查看了'PsLookupProcessByProcessId'的文档,并说它需要第一个参数的'句柄'。那么,在这种情况下,我将如何使用从用户空间应用程序发送的DWORD pid获取句柄?

1 个答案:

答案 0 :(得分:0)

PEPROCESS eProcess = NULL; 
PsLookupProcessByProcessId((HANDLE)pInp->pid, &eProcess);

“指定进程的进程ID。” - > HANDLE听起来很混乱,在这种情况下它不是真正的“HANDLE”对象。