【发布时间】:2015-02-21 08:37:36
【问题描述】:
如何使用函数 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 获取句柄?
【问题讨论】:
-
您需要将
pInp->pid声明为HANDLE类型。第二个参数看起来也是错误的。你需要传递你的PEPROCESS变量的地址。 -
@ThePara 这是一个用户模式功能。这是一个内核模式问题。