Share via


ZwQueryInformationProcess 函式

[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 結構的指標,可用來判斷指定的進程是否正在偵錯,以及系統用來識別指定進程的唯一值。
最好使用 CheckRemoteDebuggerPresentGetProcessId 函式來取得此資訊。
ProcessDebugPort
7
擷取 DWORD_PTR 值,這個值是進程偵錯工具的埠號碼。 非零值表示進程正在通道 3 偵錯工具的控制下執行。
最好使用 CheckRemoteDebuggerPresentIsDebuggerPresent 函式。
ProcessWow64Information
26
判斷進程是否在 WOW64 環境中執行, (WOW64 是 x86 模擬器,可讓 Win32 型應用程式在 64 位 Windows) 上執行。
最好使用 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,請透過 執行時間動態連結存取函式。 這可讓您的程式碼有機會在函式已變更或從作業系統中移除時正常回應。 不過,無法偵測簽章變更。

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

規格需求

需求
最低支援的用戶端
Windows XP [僅限傳統型應用程式]
最低支援的伺服器
Windows Server 2003 [僅限傳統型應用程式]
DLL
Ntdll.dll

另請參閱

CheckRemoteDebuggerPresent

GetProcessId

IsDebuggerPresent

IsWow64Process