ZwQuerySystemInformation 関数
[ZwQuerySystemInformation は、Windows 8の時点で使用できなくなりました。 代わりに、このトピックに記載されている代替関数を使用してください。
指定したシステム情報を取得します。
構文
NTSTATUS WINAPI ZwQuerySystemInformation(
_In_ SYSTEM_INFORMATION_CLASS SystemInformationClass,
_Inout_ PVOID SystemInformation,
_In_ ULONG SystemInformationLength,
_Out_opt_ PULONG ReturnLength
);
パラメーター
-
SystemInformationClass [in]
-
取得するシステム情報の種類。 このパラメーターには、 SYSTEM_INFORMATION_CLASS 列挙型の次のいずれかの値を指定できます。
-
SystemBasicInformation
-
SYSTEM_BASIC_INFORMATION構造体内のシステム内のプロセッサの数。 代わりに GetSystemInfo 関数を使用してください。
-
SystemPerformanceInformation
-
乱数ジェネレーターの予測不可能なシードを生成するために使用できる不透明な SYSTEM_PERFORMANCE_INFORMATION 構造体。 代わりに CryptGenRandom 関数を使用してください。
-
SystemTimeOfDayInformation
-
乱数ジェネレーターの予測不可能なシードを生成するために使用できる不透明な SYSTEM_TIMEOFDAY_INFORMATION 構造体。 代わりに CryptGenRandom 関数を使用してください。
-
SystemProcessInformation
-
システムで実行 されている プロセスごとに 1 つずつ、SYSTEM_PROCESS_INFORMATION構造体の配列。
これらの構造体には、プロセスによって使用されるハンドルの数、ページ ファイルの使用量のピーク、プロセスが割り当てたメモリ ページの数など、各プロセスのリソース使用量に関する情報が含まれます。
-
SystemProcessorPerformanceInformation
-
システムにインストールされているプロセッサごとに 1 つずつ、SYSTEM_PROCESSOR_PERFORMANCE_INFORMATION構造体の配列。
-
SystemInterruptInformation
-
乱数ジェネレーターの予測不可能なシードを生成するために使用できる不透明な SYSTEM_INTERRUPT_INFORMATION 構造体。 代わりに CryptGenRandom 関数を使用してください。
-
SystemExceptionInformation
-
乱数ジェネレーターの予測不可能なシードを生成するために使用できる不透明な SYSTEM_EXCEPTION_INFORMATION 構造体。 代わりに CryptGenRandom 関数を使用してください。
-
SystemRegistryQuotaInformation
-
SYSTEM_REGISTRY_QUOTA_INFORMATION構造体。
-
SystemLookasideInformation
-
乱数ジェネレーターの予測不可能なシードを生成するために使用できる不透明な SYSTEM_LOOKASIDE_INFORMATION 構造体。 代わりに CryptGenRandom 関数を使用してください。
SystemInformation [in, out]
要求された情報を受信するバッファーへのポインター。 この情報のサイズと構造は、次の表に示すように、 SystemInformationClass パラメーターの値によって異なります。
SYSTEM_BASIC_INFORMATION
SystemInformationClass パラメーターが SystemBasicInformation の場合、SystemInformation パラメーターが指すバッファーは、次のレイアウトを持つ単一のSYSTEM_BASIC_INFORMATION構造体を保持するのに十分な大きさにする必要があります。
typedef struct _SYSTEM_BASIC_INFORMATION {
BYTE Reserved1[24];
PVOID Reserved2[4];
CCHAR NumberOfProcessors;
} SYSTEM_BASIC_INFORMATION;
NumberOfProcessors メンバーには、システムに存在するプロセッサの数が含まれています。 代わりに GetSystemInfo を使用して、この情報を取得します。
構造体の他のメンバーは、オペレーティング システムによる内部使用のために予約されています。
SYSTEM_PERFORMANCE_INFORMATION
SystemInformationClass パラメーターが SystemPerformanceInformation の場合、SystemInformation パラメーターが指すバッファーは、乱数ジェネレーターの予期しないシードの生成に使用する不透明なSYSTEM_PERFORMANCE_INFORMATION構造体を保持するのに十分な大きさにする必要があります。 この目的のために、構造体のレイアウトは次のとおりです。
typedef struct _SYSTEM_PERFORMANCE_INFORMATION {
BYTE Reserved1[312];
} SYSTEM_PERFORMANCE_INFORMATION;
構造体の個々のメンバーは、オペレーティング システムによる内部使用のために予約されています。
代わりに CryptGenRandom 関数を使用して、暗号的にランダムなデータを生成します。
SYSTEM_TIMEOFDAY_INFORMATION
SystemInformationClass パラメーターが SystemTimeOfDayInformation の場合、SystemInformation パラメーターが指すバッファーは、乱数ジェネレーターの予期しないシードの生成に使用する不透明なSYSTEM_TIMEOFDAY_INFORMATION構造体を保持するのに十分な大きさにする必要があります。 この目的のために、構造体のレイアウトは次のとおりです。
typedef struct _SYSTEM_TIMEOFDAY_INFORMATION {
BYTE Reserved1[48];
} SYSTEM_TIMEOFDAY_INFORMATION;
構造体の個々のメンバーは、オペレーティング システムによる内部使用のために予約されています。
代わりに CryptGenRandom 関数を使用して、暗号的にランダムなデータを生成します。
SYSTEM_PROCESS_INFORMATION
SystemInformationClass パラメーターが SystemProcessInformation の場合、SystemInformation パラメーターが指すバッファーは、システムで実行されているプロセスと同じ数のSYSTEM_PROCESS_INFORMATION構造体を含む配列を保持するのに十分な大きさにする必要があります。 各構造体のレイアウトは次のとおりです。
typedef struct _SYSTEM_PROCESS_INFORMATION {
ULONG NextEntryOffset;
ULONG NumberOfThreads;
BYTE Reserved1[48];
PVOID Reserved2[3];
HANDLE UniqueProcessId;
PVOID Reserved3;
ULONG HandleCount;
BYTE Reserved4[4];
PVOID Reserved5[11];
SIZE_T PeakPagefileUsage;
SIZE_T PrivatePageCount;
LARGE_INTEGER Reserved6[6];
} SYSTEM_PROCESS_INFORMATION;
NumberOfThreads メンバーには、プロセスで現在実行中のスレッドの合計数が含まれています。
HandleCount メンバーには、問題のプロセスで使用されているハンドルの合計数が含まれています。代わりに GetProcessHandleCount を使用して、この情報を取得します。
PeakPagefileUsage メンバーには、プロセスで使用されるページ ファイル ストレージの最大バイト数が含まれており、PrivatePageCount メンバーには、このプロセスの使用に割り当てられたメモリ ページの数が含まれます。
GetProcessMemoryInfo 関数または Win32_Process クラスを使用して、この情報を取得することもできます。
構造体の他のメンバーは、オペレーティング システムによる内部使用のために予約されています。
SYSTEM_PROCESSOR_PERFORMANCE_INFORMATION
SystemInformationClass パラメーターが SystemProcessorPerformanceInformation の場合、SystemInformation パラメーターが指すバッファーは、システムにインストールされているプロセッサ (CPU) と同じ数のSYSTEM_PROCESS_INFORMATION構造体を含む配列を保持するのに十分な大きさにする必要があります。 各構造体のレイアウトは次のとおりです。
typedef struct
_SYSTEM_PROCESSOR_PERFORMANCE_INFORMATION {
LARGE_INTEGER IdleTime;
LARGE_INTEGER KernelTime;
LARGE_INTEGER UserTime;
LARGE_INTEGER Reserved1[2];
ULONG Reserved2;
} SYSTEM_PROCESSOR_PERFORMANCE_INFORMATION;
IdleTime メンバーには、システムがアイドル状態になった時間 (ナノ秒の 1/100 秒) が含まれます。
KernelTime メンバーには、システムがカーネル モード (すべてのプロセスのすべてのスレッド、すべてのプロセッサのすべてのスレッドを含む) でナノ秒の 1/100 秒で実行に費やした時間が含まれます。
UserTime メンバーには、システムがユーザー モード (すべてのプロセスのすべてのスレッド、すべてのプロセッサのすべてのスレッドを含む) でナノ秒の 1/100 秒で実行に費やした時間が含まれます。
代わりに GetSystemTimes を使用して、この情報を取得します。
SYSTEM_INTERRUPT_INFORMATION
SystemInformationClass パラメーターが SystemInterruptInformation の場合、SystemInformation パラメーターが指すバッファーは、システムにインストールされているプロセッサ (CPU) と同じ数の不透明なSYSTEM_INTERRUPT_INFORMATION構造体を含む配列を保持するのに十分な大きさにする必要があります。 各構造体または配列全体を使用して、乱数ジェネレーターの予測不可能なシードを生成できます。 この目的のために、構造体のレイアウトは次のとおりです。
typedef struct _SYSTEM_INTERRUPT_INFORMATION {
BYTE Reserved1[24];
} SYSTEM_INTERRUPT_INFORMATION;
構造体の個々のメンバーは、オペレーティング システムによる内部使用のために予約されています。
代わりに CryptGenRandom 関数を使用して、暗号的にランダムなデータを生成します。
SYSTEM_EXCEPTION_INFORMATION
SystemInformationClass パラメーターが SystemExceptionInformation の場合、SystemInformation パラメーターが指すバッファーは、乱数ジェネレーターの予期しないシードの生成に使用する不透明なSYSTEM_EXCEPTION_INFORMATION構造体を保持するのに十分な大きさにする必要があります。 この目的のために、構造体のレイアウトは次のとおりです。
typedef struct _SYSTEM_EXCEPTION_INFORMATION {
BYTE Reserved1[16];
} SYSTEM_EXCEPTION_INFORMATION;
構造体の個々のメンバーは、オペレーティング システムによる内部使用のために予約されています。
代わりに CryptGenRandom 関数を使用して、暗号的にランダムなデータを生成します。
SYSTEM_REGISTRY_QUOTA_INFORMATION
SystemInformationClass パラメーターが SystemRegistryQuotaInformation の場合、SystemInformation パラメーターが指すバッファーは、次のレイアウトを持つ単一のSYSTEM_REGISTRY_QUOTA_INFORMATION構造体を保持するのに十分な大きさにする必要があります。
typedef struct _SYSTEM_REGISTRY_QUOTA_INFORMATION {
ULONG RegistryQuotaAllowed;
ULONG RegistryQuotaUsed;
PVOID Reserved1;
} SYSTEM_REGISTRY_QUOTA_INFORMATION;
RegistryQuotaAllowed メンバーには、レジストリがこのシステムで取得できる最大サイズ (バイト単位) が含まれています。
RegistryQuotaUsed メンバーには、レジストリの現在のサイズ (バイト単位) が含まれています。
代わりに GetSystemRegistryQuota を使用して、この情報を取得します。
構造体のもう 1 つのメンバーは、オペレーティング システムによる内部使用のために予約されています。
SYSTEM_LOOKASIDE_INFORMATION
SystemInformationClass パラメーターが SystemLookasideInformation の場合、SystemInformation パラメーターが指すバッファーは、乱数ジェネレーターの予期しないシードの生成に使用する不透明なSYSTEM_LOOKASIDE_INFORMATION構造体を保持するのに十分な大きさにする必要があります。 この目的のために、構造体のレイアウトは次のとおりです。
typedef struct _SYSTEM_LOOKASIDE_INFORMATION {
BYTE Reserved1[32];
} SYSTEM_LOOKASIDE_INFORMATION;
構造体の個々のメンバーは、オペレーティング システムによる内部使用のために予約されています。
代わりに CryptGenRandom 関数を使用して、暗号的にランダムなデータを生成します。
SystemInformationLength [in]
SystemInformation パラメーターが指すバッファーのサイズ (バイト単位)。
ReturnLength [out, optional]
関数が要求された情報の実際のサイズを書き込む場所への省略可能なポインター。 そのサイズが SystemInformationLength パラメーター以下の場合、関数は情報を SystemInformation バッファーにコピーします。それ以外の場合は、NTSTATUS エラー コードを返し、要求された情報を受信するために必要なバッファーのサイズを ReturnLength で返します。
戻り値
NTSTATUS の成功またはエラー コードを返します。
NTSTATUS エラー コードの形式と重要性は、DDK で使用できる Ntstatus.h ヘッダー ファイルに記載されており、DDK ドキュメントで説明されています。
解説
ZwQuerySystemInformation 関数と、それが返す構造体はオペレーティング システムの内部であり、Windows のリリース間で変更される可能性があります。 アプリケーションの互換性を維持するには、前に説明した代替関数を代わりに使用することをお勧めします。
ZwQuerySystemInformation を使用する場合は、実行時の動的リンクを使用して関数にアクセスします。 これにより、関数がオペレーティング システムから変更または削除された場合に、コードが正常に応答できるようになります。 ただし、署名の変更は検出できない場合があります。
この関数には、インポート ライブラリが関連付けされません。 LoadLibrary 関数と GetProcAddress 関数を使用して、Ntdll.dllに動的にリンクする必要があります。
必要条件
要件 | 値 |
---|---|
[DLL] |
|