共用方式為


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 是 x86 模擬器,可讓 Win32 型應用程式在 64 位 Windows) 上執行。

使用 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 ,並包含 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,請透過 運行時間動態連結存取函式。 這可讓您的程式代碼有機會在函式已變更或從操作系統中移除時正常回應。 不過,無法偵測簽章變更。

此函式沒有相關聯的匯入連結庫。 您必須使用 LoadLibraryGetProcAddress 函式,以動態方式連結至 Ntdll.dll。

規格需求

需求
目標平台 Windows
標頭 winternl.h
程式庫 ntdll.lib
Dll ntdll.dll

另請參閱

CheckRemoteDebuggerPresent

GetProcessId

IsDebuggerPresent

IsWow64Process

IsWow64Process2