[ZwQueryInformationProcess 在 Windows 的未来版本中可能已更改或不可用。 应用程序应使用本主题中列出的备用函数。]
检索有关指定进程的信息。
语法
NTSTATUS WINAPI ZwQueryInformationProcess(
  _In_      HANDLE           ProcessHandle,
  _In_      PROCESSINFOCLASS ProcessInformationClass,
  _Out_     PVOID            ProcessInformation,
  _In_      ULONG            ProcessInformationLength,
  _Out_opt_ PULONG           ReturnLength
);
参数
- 
ProcessHandle [in] 
- 
要为其检索信息的进程句柄。 
- 
ProcessInformationClass [in] 
- 
要检索的进程信息的类型。 此参数可以是 PROCESSINFOCLASS 枚举中的下列值之一。 值 含义 - ProcessBasicInformation
- 0
 检索指向 PEB 结构的指针,该结构可用于确定是否正在调试指定的进程,以及系统用于标识指定进程的唯一值。 
 最好使用 CheckRemoteDebuggerPresent 和 GetProcessId 函数来获取此信息。- ProcessDebugPort
- 7
 检索一个 DWORD_PTR 值,该值是进程的调试器的端口号。 非零值指示进程正在环 3 调试器的控制下运行。 
 最好使用 CheckRemoteDebuggerPresent 或 IsDebuggerPresent 函数。- ProcessWow64Information
- 26
 确定进程是否在 WOW64 环境中运行 (WOW64 是允许基于 Win32 的应用程序在 64 位 Windows) 上运行的 x86 仿真器。 
 最好使用 IsWow64Process 函数来获取此信息。- ProcessImageFileName
- 27
 检索包含进程的图像文件名称 的UNICODE_STRING 值。 ProcessBreakOnTermination 
 29检索一个 ULONG 值,该值指示进程是否被视为关键进程。 
 注意: 此值可以从 Windows XP SP3 开始使用。 从 Windows 8.1 开始,应改用 IsProcessCritical。- ProcessProtectionInformation
- 61
 检索指示受保护进程类型和受保护进程签名者的 BYTE 值。 
- 
ProcessInformation [out] 
- 
指向调用应用程序提供的缓冲区的指针,函数将请求的信息写入其中。 写入的信息的大小因 ProcessInformationClass 参数的值而异: - 
PROCESS_BASIC_INFORMATION 
- 
当 ProcessInformationClass 参数为 ProcessBasicInformation 时, ProcessInformation 参数指向的缓冲区应足够大,以容纳具有以下布局 的单个PROCESS_BASIC_INFORMATION 结构: typedef struct _PROCESS_BASIC_INFORMATION { NTSTATUS ExitStatus; PPEB PebBaseAddress; ULONG_PTR AffinityMask; KPRIORITY BasePriority; ULONG_PTR UniqueProcessId; ULONG_PTR InheritedFromUniqueProcessId; } PROCESS_BASIC_INFORMATION;字段 含义 ExitStatus 包含 GetExitCodeProcess 将返回的相同值。 但是,为了清晰和安全起见,最好使用 GetExitCodeProcess 。 PebBaseAddress 指向 PEB 结构。 AffinityMask 可以强制转换为 DWORD ,并包含 GetProcessAffinityMask 为参数返回的 lpProcessAffinityMask相同值。BasePriority 包含计划优先级中所述的进程 优先级。 UniqueProcessId 可以强制转换为 DWORD ,并包含此过程的唯一标识符。 最好使用 GetProcessId 函数来检索此信息。 InheritedFromUniqueProcessId 可以强制转换为 DWORD ,并包含父进程的唯一标识符。 
- 
ULONG_PTR 
- 
当 ProcessInformationClass 参数为 ProcessWow64Information 时, ProcessInformation 参数指向的缓冲区应足以容纳 ULONG_PTR。 如果此值不为零,则表示进程在 WOW64 环境中运行;否则,如果值等于零,则表示进程不在 WOW64 环境中运行。 最好使用 IsWow64Process 函数来确定进程是否在 WOW64 环境中运行。 
- 
UNICODE_STRING 
- 
当 ProcessInformationClass 参数为 ProcessImageFileName 时, ProcessInformation 参数指向的缓冲区应足够大,以容纳 UNICODE_STRING 结构以及字符串本身。 存储在 Buffer 成员中的字符串是图像文件的名称。 如果缓冲区太小,函数将失败并显示STATUS_INFO_LENGTH_MISMATCH错误代码, 并将 ReturnLength 参数设置为所需的缓冲区大小。 
- 
PS_PROTECTION 
- 
当 ProcessInformationClass 参数为 ProcessProtectionInformation 时, ProcessInformation 参数指向的缓冲区应足够大,足以容纳具有以下布局 的单个PS_PROTECTION 结构: typedef struct _PS_PROTECTION { union { UCHAR Level; struct { UCHAR Type : 3; UCHAR Audit : 1; // Reserved UCHAR Signer : 4; }; }; } PS_PROTECTION, *PPS_PROTECTION;前 3 位包含受保护进程的类型: typedef enum _PS_PROTECTED_TYPE { PsProtectedTypeNone = 0, PsProtectedTypeProtectedLight = 1, PsProtectedTypeProtected = 2 } PS_PROTECTED_TYPE, *PPS_PROTECTED_TYPE;前 4 位包含受保护的进程签名者: typedef enum _PS_PROTECTED_SIGNER { PsProtectedSignerNone = 0, PsProtectedSignerAuthenticode, PsProtectedSignerCodeGen, PsProtectedSignerAntimalware, PsProtectedSignerLsa, PsProtectedSignerWindows, PsProtectedSignerWinTcb, PsProtectedSignerWinSystem, PsProtectedSignerApp, PsProtectedSignerMax } PS_PROTECTED_SIGNER, *PPS_PROTECTED_SIGNER;
 
- 
- 
ProcessInformationLength [in] 
- 
ProcessInformation 参数指向的缓冲区的大小(以字节为单位)。 
- 
ReturnLength [out, optional] 
- 
指向变量的指针,其中函数返回所请求信息的大小。 如果函数成功,则这是 写入 ProcessInformation 参数指向的缓冲区的信息的大小,但如果缓冲区太小,则这是成功接收信息所需的最小缓冲区大小。 
返回值
返回 NTSTATUS 成功或错误代码。
NTSTATUS 错误代码的形式和意义列在 DDK 中提供的 Ntstatus.h 头文件中,并在 Kernel-Mode 驱动程序体系结构/设计指南/驱动程序编程技术/日志记录错误下的 DDK 文档中进行了介绍。
备注
ZwQueryInformationProcess 函数及其返回的结构在操作系统内部,并且可能会从一个版本的 Windows 更改为另一个版本。 为了保持应用程序的兼容性,最好改用 ProcessInformationClass 参数的说明中提到的公共函数。
如果使用 ZwQueryInformationProcess,请通过 运行时动态链接访问函数。 这样,代码就有机会在操作系统中更改或删除函数时正常响应。 但是,签名更改可能无法检测到。
此函数没有关联的导入库。 必须使用 LoadLibrary 和 GetProcAddress 函数动态链接到 Ntdll.dll。
要求
| 要求 | 值 | 
|---|---|
| 最低受支持的客户端 | Windows XP [仅限桌面应用] | 
| 最低受支持的服务器 | Windows Server 2003 [仅限桌面应用] | 
| DLL | 
 | 
另请参阅