NtQueryInformationProcess 函数 (winternl.h)

[NtQueryInformationProcess 在 Windows 的未来版本中可能已更改或不可用。 应用程序应使用本主题中列出的备用函数。]

检索有关指定进程的信息。

语法

__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 枚举中的以下值之一。

含义
ProcessBasicInformation
0
检索指向 PEB 结构的指针,该结构可用于确定是否正在调试指定的进程,以及系统用于标识指定进程的唯一值。

使用 CheckRemoteDebuggerPresentGetProcessId 函数获取此信息。

ProcessDebugPort
7
检索一个 DWORD_PTR 值,该值是进程的调试器端口号。 非零值表示进程正在环 3 调试器的控制下运行。

使用 CheckRemoteDebuggerPresentIsDebuggerPresent 函数。

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

使用 IsWow64Process2 函数获取此信息。

ProcessImageFileName
27
检索包含进程的图像文件名称 的UNICODE_STRING 值。

使用 QueryFullProcessImageNameGetProcessImageFileName 函数获取此信息。

ProcessBreakOnTermination
29
检索一个 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;
字段 含义
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。

要求

要求
目标平台 Windows
标头 winternl.h
Library ntdll.lib
DLL ntdll.dll

另请参阅

CheckRemoteDebuggerPresent

GetProcessId

IsDebuggerPresent

IsWow64Process

IsWow64Process2