[NtQueryInformationProcess 可能在将来的 Windows 版本中更改或不可用。 应用程序应使用本主题中列出的备用函数。]
检索有关指定进程的信息。
Syntax
__kernel_entry NTSTATUS NtQueryInformationProcess(
[in] HANDLE ProcessHandle,
[in] PROCESSINFOCLASS ProcessInformationClass,
[out] PVOID ProcessInformation,
[in] ULONG ProcessInformationLength,
[out, optional] PULONG ReturnLength
);
参数
[in] ProcessHandle
要检索其信息的进程的句柄。
[in] ProcessInformationClass
要检索的进程信息的类型。 此参数可以是 PROCESSINFOCLASS 枚举中的以下值之一。
| 价值 | Meaning |
|---|---|
|
检索指向 PEB 结构的指针,该结构可用于确定是否正在调试指定的进程,以及系统用来标识指定进程的唯一值。
使用 CheckRemoteDebuggerPresent 和 GetProcessId 函数获取此信息。 |
|
检索作为进程的调试器的端口号的 DWORD_PTR 值。 非零值指示进程正在环 3 调试器的控制下运行。 |
|
确定进程是否在 WOW64 环境中运行(WOW64 是允许基于 Win32 的应用程序在 64 位 Windows 上运行的 x86 仿真器)。
使用 IsWow64Process2 函数获取此信息。 |
|
检索包含进程映像文件名称的 UNICODE_STRING 值。
使用 QueryFullProcessImageName 或 GetProcessImageFileName 函数获取此信息。 |
|
检索一个 ULONG 值,该值指示进程是否被视为关键。
注意 此值可以从 Windows XP SP3 开始使用。 从 Windows 8.1 开始,应改用 IsProcessCritical 。
|
|
检索包含有关进程的元数据 的PROCESS_TELEMETRY_ID_INFORMATION_TYPE 值。 |
|
检索指示进程的子系统类型的 SUBSYSTEM_INFORMATION_TYPE 值。 ProcessInformation 参数指向的缓冲区应足够大,可以容纳单个SUBSYSTEM_INFORMATION_TYPE枚举。 |
[out] ProcessInformation
指向调用应用程序提供的缓冲区的指针,函数将请求的信息写入其中。 写入的信息的大小因 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;
| 领域 | Meaning |
|---|---|
| ExitStatus | 包含 GetExitCodeProcess 返回的相同值。 但是,为了清楚和安全,最好使用 GetExitCodeProcess 。 |
| PebBaseAddress | 指向 PEB 结构。 |
| AffinityMask | 可以强制转换为 DWORD ,并包含 GetProcessAffinityMask 为 lpProcessAffinityMask 参数返回的相同值。 |
| BasePriority | 包含计划优先级中所述的进程 优先级。 |
| UniqueProcessId | 可以强制转换为 DWORD ,并包含此过程的唯一标识符。 建议使用 GetProcessId 函数检索此信息。 |
| InheritedFromUniqueProcessId | 可以强制转换为 DWORD ,并包含父进程的唯一标识符。 |
ULONG_PTR
当 ProcessInformationClass 参数为 ProcessWow64Information 时, ProcessInformation 参数指向的缓冲区应足够大,可以容纳 ULONG_PTR。 如果此值为非零,则进程在 WOW64 环境中运行。 否则,进程未在 WOW64 环境中运行。
使用 IsWow64Process2 函数确定进程是否在 WOW64 环境中运行。
UNICODE_STRING
当 ProcessInformationClass 参数为 ProcessImageFileName 时, ProcessInformation 参数指向的缓冲区应足够大,以便保存 UNICODE_STRING 结构和字符串本身。 存储在 Buffer 成员中的字符串是图像文件的名称。
如果缓冲区太小,函数将失败并显示STATUS_INFO_LENGTH_MISMATCH错误代码, ReturnLength 参数设置为所需的缓冲区大小。
[in] ProcessInformationLength
ProcessInformation 参数指向的缓冲区的大小(以字节为单位)。
[out, optional] ReturnLength
指向函数返回所请求信息大小的变量的指针。 如果函数成功,则这是 由 ProcessInformation 参数指向的缓冲区写入的信息的大小(如果缓冲区太小,则这是成功接收信息所需的最小缓冲区大小)。
返回值
该函数返回 NTSTATUS 成功或错误代码。
NTSTATUS 错误代码的形式和重要性列在 DDK 中提供的 Ntstatus.h 头文件中。 有关更多详细信息,请参阅 日志记录错误 。
注解
NtQueryInformationProcess 函数及其返回的结构在作系统内部,并且可能会从一个版本的 Windows 更改为另一个版本。 为了保持应用程序的兼容性,最好改用 ProcessInformationClass 参数的说明中提到的公共函数。
如果使用 NtQueryInformationProcess,请通过 运行时动态链接访问函数。 这样,代码就有机会在作系统中更改或删除函数时正常响应。 但是,签名更改可能无法检测到。
此函数没有关联的导入库。 必须使用 LoadLibrary 和 GetProcAddress 函数动态链接到 Ntdll.dll。
要求
| Requirement | 价值 |
|---|---|
| 目标平台 | Windows操作系统 |
| Header | winternl.h |
| Library | ntdll.lib |
| DLL | ntdll.dll |