【问题标题】:PsLookupProcessByProcessId with DWORD pid? Parameter 1 requires HANDLE?PsLookupProcessByProcessId 与 DWORD pid?参数 1 需要 HANDLE?
【发布时间】: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 这是一个用户模式功能。这是一个内核模式问题。

标签: c driver wdk wdf


【解决方案1】:
PEPROCESS eProcess = NULL; 
PsLookupProcessByProcessId((HANDLE)pInp->pid, &eProcess);

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

【讨论】:

    猜你喜欢
    • 2021-08-08
    • 2021-03-24
    • 2020-03-09
    • 2016-03-29
    • 2021-12-10
    • 1970-01-01
    • 1970-01-01
    • 2014-08-23
    • 2016-06-07
    相关资源
    最近更新 更多