NtQueryInformationProcess 函数 (winternl.h)

[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
ProcessBasicInformation
0
检索指向 PEB 结构的指针,该结构可用于确定是否正在调试指定的进程,以及系统用来标识指定进程的唯一值。

使用 CheckRemoteDebuggerPresentGetProcessId 函数获取此信息。

ProcessDebugPort
7
检索作为进程的调试器的端口号的 DWORD_PTR 值。 非零值指示进程正在环 3 调试器的控制下运行。

使用 CheckRemoteDebuggerPresentIsDebuggerPresent 函数。

ProcessWow64Information
26
确定进程是否在 WOW64 环境中运行(WOW64 是允许基于 Win32 的应用程序在 64 位 Windows 上运行的 x86 仿真器)。

使用 IsWow64Process2 函数获取此信息。

ProcessImageFileName
二十七
检索包含进程映像文件名称的 UNICODE_STRING 值。

使用 QueryFullProcessImageNameGetProcessImageFileName 函数获取此信息。

ProcessBreakOnTermination
二十九
检索一个 ULONG 值,该值指示进程是否被视为关键。
注意 此值可以从 Windows XP SP3 开始使用。 从 Windows 8.1 开始,应改用 IsProcessCritical
 
ProcessTelemetryIdInformation
64

检索包含有关进程的元数据 的PROCESS_TELEMETRY_ID_INFORMATION_TYPE 值。

ProcessSubsystemInformation
75
检索指示进程的子系统类型的 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 ,并包含 GetProcessAffinityMasklpProcessAffinityMask 参数返回的相同值。
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,请通过 运行时动态链接访问函数。 这样,代码就有机会在作系统中更改或删除函数时正常响应。 但是,签名更改可能无法检测到。

此函数没有关联的导入库。 必须使用 LoadLibraryGetProcAddress 函数动态链接到 Ntdll.dll。

要求

Requirement 价值
目标平台 Windows操作系统
Header winternl.h
Library ntdll.lib
DLL ntdll.dll

另请参阅

CheckRemoteDebuggerPresent

GetProcessId

IsDebuggerPresent

IsWow64Process

IsWow64Process2