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 構造体へのポインターと、指定したプロセスを識別するためにシステムによって使用される一意の値を取得します。

この情報を取得するには、 CheckRemoteDebuggerPresent 関数と GetProcessId 関数を使用します。

ProcessDebugPort
7
プロセスのデバッガーのポート番号である DWORD_PTR 値を取得します。 0 以外の値は、リング 3 デバッガーの制御下でプロセスが実行されていることを示します。

CheckRemoteDebuggerPresent または IsDebuggerPresent 関数を使用します。

ProcessWow64Information
26
プロセスが WOW64 環境で実行されているかどうかを判断します (WOW64 は、Win32 ベースのアプリケーションを 64 ビット Windows で実行できる x86 エミュレーターです)。

この情報を取得するには 、IsWow64Process2 関数を使用します。

ProcessImageFileName
27
プロセスのイメージ ファイルの名前を含む UNICODE_STRING 値を取得します。

この情報を取得するには、 QueryFullProcessImageName または GetProcessImageFileName 関数を使用します。

ProcessBreakOnTermination
29
プロセスがクリティカルと見なされるかどうかを示す ULONG 値を取得します。
メモ この値は、SP3 を使用した Windows XP 以降で使用できます。 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を保持するのに十分な大きさにする必要があります。 この値が 0 以外の場合、プロセスは WOW64 環境で実行されています。 それ以外の場合、プロセスは WOW64 環境で実行されていません。

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

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

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

要件

要件
対象プラットフォーム Windows
ヘッダー winternl.h
Library ntdll.lib
[DLL] ntdll.dll

こちらもご覧ください

CheckRemoteDebuggerPresent

GetProcessId

IsDebuggerPresent

IsWow64Process

IsWow64Process2