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 構造体へのポインターと、指定したプロセスを識別するためにシステムによって使用される一意の値を取得します。
この情報を取得するには、 CheckRemoteDebuggerPresent 関数と GetProcessId 関数を使用することをお勧めします。
ProcessDebugPort
7
プロセスのデバッガーのポート番号である DWORD_PTR 値を取得します。 0 以外の値は、プロセスがリング 3 デバッガーの制御下で実行されていることを示します。
CheckRemoteDebuggerPresent または IsDebuggerPresent 関数を使用することをお勧めします。
ProcessWow64Information
26
プロセスが WOW64 環境で実行されているかどうかを判断します (WOW64 は、Win32 ベースのアプリケーションを 64 ビット Windows で実行できる x86 エミュレーターです)。
この情報を取得するには、 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を保持するのに十分な大きさにする必要があります。 この値が 0 以外の場合、プロセスは WOW64 環境で実行されています。それ以外の場合、値が 0 の場合、プロセスは WOW64 環境では実行されません。

プロセスが WOW64 環境で実行されているかどうかを判断するには 、IsWow64Process 関数を使用することをお勧めします。

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 を使用する場合は、実行時の動的リンクを使用して関数にアクセスします。 これにより、関数がオペレーティング システムから変更または削除された場合に、コードが正常に応答できるようになります。 ただし、署名の変更は検出できない場合があります。

この関数には、関連付けられたインポート ライブラリがありません。 LoadLibrary 関数と GetProcAddress 関数を使用して、Ntdll.dll に動的にリンクする必要があります。

必要条件

要件
サポートされている最小のクライアント
Windows XP (デスクトップ アプリのみ)
サポートされている最小のサーバー
Windows Server 2003 (デスクトップ アプリのみ)
[DLL]
Ntdll.dll

関連項目

CheckRemoteDebuggerPresent

GetProcessId

IsDebuggerPresent

IsWow64Process