如何从 SYSTEM_PROCESS_INFORMATION 结构中获取进程 ID?

How to get process id from SYSTEM_PROCESS_INFORMATION struct?

我正在使用以下方法迭代系统中的所有进程:

  1. 使用“NtQuerySystemInformation(SystemProcessInformation, buffer, buffer_size, NULL)”获取第一个进程。
  2. 使用 SYSTEM_PROCESS_INFORMATION 中的“NextEntryOffset”获取下一个进程,其格式为 https://docs.microsoft.com/en-us/windows/win32/api/winternl/nf-winternl-ntqueryinformationprocess.

我想根据 PID 过滤这些进程。我不清楚如何从 SYSTEM_PROCESS_INFORMATION 结构中获取 PID。有一个名为“UniqueProcessId”的字段,它为进程提供了句柄,但在将其传递给“GetProcessId”后,我得到错误代码 6,这意味着进程句柄不正确。

欢迎提出有关从 SYSTEM_PROCESS_INFORMATION 中查找进程句柄或 pid 的任何建议。

提前致谢。

大部分NTapi都会包含以下语句:

[Nt*** may be altered or unavailable in future versions of Windows.]

对于您的情况,您可以使用以下方法代替NtQuerySystemInformation来检索系统进程: