0

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

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

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

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

 PsLookupProcessByProcessId(pInp->pid, eProcess);

我收到警告:

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

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

4

1 回答 1

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

"指定进程的进程 ID。" -> HANDLE 可能听起来令人困惑,在这种情况下,它不是真正的“HANDLE”对象。

于 2015-02-27T18:27:54.320 回答