NtQuerySystemInformation 関数 (winternl.h)

[NtQuerySystemInformation は、今後のバージョンの Windows で変更または使用できない場合があります。 アプリケーションでは、このトピックに記載されている代替関数を使用する必要があります。

指定したシステム情報を取得します。

構文

__kernel_entry NTSTATUS NtQuerySystemInformation(
  [in]            SYSTEM_INFORMATION_CLASS SystemInformationClass,
  [in, out]       PVOID                    SystemInformation,
  [in]            ULONG                    SystemInformationLength,
  [out, optional] PULONG                   ReturnLength
);

パラメーター

[in] SystemInformationClass

取得するシステム情報の種類を示す、SYSTEM_INFORMATION_CLASSで列挙された値の 1 つ。 これには、次の値が含まれます。

SystemBasicInformation

SYSTEM_BASIC_INFORMATION構造体内のシステム内のプロセッサの数を返します。 代わりに GetSystemInfo 関数を使用してください。

SystemCodeIntegrityInformation

システムのコード整合性によって適用されるオプションを決定するために使用できる SYSTEM_CODEINTEGRITY_INFORMATION 構造体を返します。

SystemExceptionInformation

乱数ジェネレーターの予測不可能なシードを生成するために使用できる不透明な SYSTEM_EXCEPTION_INFORMATION 構造体を返します。 代わりに CryptGenRandom 関数を使用してください。

SystemInterruptInformation

乱数ジェネレーターの予測不可能なシードを生成するために使用できる不透明な SYSTEM_INTERRUPT_INFORMATION 構造体を返します。 代わりに CryptGenRandom 関数を使用してください。

SystemKernelVaShadowInformation

不正なデータ キャッシュの読み込みに関連する攻撃 (CVE-2017-5754 など) の投機制御設定を決定するために使用できる SYSTEM_KERNEL_VA_SHADOW_INFORMATION 構造を返します。

SystemLeapSecondInformation

システム全体でうるう秒を有効または無効にするために使用できる不透明な SYSTEM_LEAP_SECOND_INFORMATION 構造体を返します。 この設定は、システムの再起動後も保持されます。

SystemLookasideInformation

乱数ジェネレーターの予測不可能なシードを生成するために使用できる不透明な SYSTEM_LOOKASIDE_INFORMATION 構造体を返します。 代わりに CryptGenRandom 関数を使用してください。

SystemPerformanceInformation

乱数ジェネレーターの予測不可能なシードを生成するために使用できる不透明な SYSTEM_PERFORMANCE_INFORMATION 構造体を返します。 代わりに CryptGenRandom 関数を使用してください。

SystemPolicyInformation

SYSTEM_POLICY_INFORMATION構造体のポリシー情報を返します。 ポリシー情報を取得するには、代わりに SLGetWindowsInformation 関数を使用します。

SystemProcessInformation

システムで実行されているプロセスごとに 1 つずつ、 SYSTEM_PROCESS_INFORMATION 構造体の配列を返します。

これらの構造体には、プロセスで使用されるスレッドとハンドルの数、ページ ファイルのピーク使用率、プロセスが割り当てたメモリ ページの数など、各プロセスのリソース使用量に関する情報が含まれます。

SystemProcessorPerformanceInformation

システムにインストールされているプロセッサごとに 1 つずつ、 SYSTEM_PROCESSOR_PERFORMANCE_INFORMATION 構造体の配列を返します。

SystemQueryPerformanceCounterInformation

QueryPerformanceCounter 関数呼び出しを介して高解像度のパフォーマンス カウンター情報を取得するために、システムがカーネル遷移を必要とするかどうかを判断するために使用できるSYSTEM_QUERY_PERFORMANCE_COUNTER_INFORMATION構造体を返します。

SystemRegistryQuotaInformation

SYSTEM_REGISTRY_QUOTA_INFORMATION構造体を返します。

SystemSpeculationControlInformation

ブランチ ターゲットインジェクション (CVE-2017-5715 など) を含む攻撃の投機制御設定を決定するために使用できる SYSTEM_SPECULATION_CONTROL_INFORMATION 構造体を返します。

SYSTEM_SPECULATION_CONTROL_INFORMATION 構造には、次のレイアウトがあります。

typedef struct _SYSTEM_SPECULATION_CONTROL_INFORMATION {
    struct {
        ULONG BpbEnabled : 1;
        ULONG BpbDisabledSystemPolicy : 1;
        ULONG BpbDisabledNoHardwareSupport : 1;
        ULONG SpecCtrlEnumerated : 1;
        ULONG SpecCmdEnumerated : 1;
        ULONG IbrsPresent : 1;
        ULONG StibpPresent : 1;
        ULONG SmepPresent : 1;
        ULONG SpeculativeStoreBypassDisableAvailable : 1;
        ULONG SpeculativeStoreBypassDisableSupported : 1;
        ULONG SpeculativeStoreBypassDisabledSystemWide : 1;
        ULONG SpeculativeStoreBypassDisabledKernel : 1;
        ULONG SpeculativeStoreBypassDisableRequired : 1;
        ULONG BpbDisabledKernelToUser : 1;
        ULONG SpecCtrlRetpolineEnabled : 1;
        ULONG SpecCtrlImportOptimizationEnabled : 1;
        ULONG Reserved : 16;
    } SpeculationControlFlags;
} SYSTEM_SPECULATION_CONTROL_INFORMATION, * PSYSTEM_SPECULATION_CONTROL_INFORMATION;

フラグ 意味
BpbEnabled TRUE の場合、投機制御機能がサポートされ、有効になります。
BpbDisabledSystemPolicy TRUE の場合、システム ポリシーが原因で投機制御機能が無効になります。
BpbDisabledNoHardwareSupport TRUE の場合、ハードウェアサポートがないため、投機制御機能は無効になります。
SpecCtrlEnumerated TRUE の場合、i386/AMD64 IA32_SPEC_CTRL MSR はハードウェアによって列挙されます。
SpecCmdEnumerated TRUE の場合、i386/AMD64 IA32_SPEC_CMD MSR はハードウェアによって列挙されます。
IbrsPresent TRUE の場合、i386/AMD64 IBRS MSR は存在として扱われます。
StibpPresent TRUE の場合、i386/AMD64 STIBP MSR が存在します。
SmepPresent TRUE の場合、SMEP 機能が存在し、有効になります。
SpeculativeStoreBypassDisableAvailable TRUE の場合、SSBD の OS サポートが存在します。
SpeculativeStoreBypassDisableSupported TRUE の場合、SSBD のハードウェア サポートが存在します。
SpeculativeStoreBypassDisabledSystemWide TRUE の場合、SSBD はシステム全体に設定されます。
SpeculativeStoreBypassDisabledKernel TRUE の場合、SSBD はカーネルで設定されます。
SpeculativeStoreBypassDisableRequired TRUE の場合、投機攻撃を防ぐために SSBD が必要です。
BpbDisabledKernelToUser TRUE の場合、間接分岐予測は、すべてのカーネルでユーザー遷移にフラッシュされるわけではありません。
SpecCtrlRetpolineEnabled TRUE の場合、互換性のあるドライバーに対して Retpoline が有効になります。
SpecCtrlImportOptimizationEnabled TRUE の場合、インポートの最適化が有効になります。
予約済み 予約済みフラグ。
 

SystemTimeOfDayInformation

乱数ジェネレーターの予測不可能なシードを生成するために使用できる不透明な SYSTEM_TIMEOFDAY_INFORMATION 構造体を返します。 代わりに CryptGenRandom 関数を使用してください。

[in, out] SystemInformation

要求された情報を受け取るバッファーへのポインター。 この情報のサイズと構造は、 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_CODEINTEGRITY_INFORMATION

SystemInformationClass パラメーターが SystemCodeIntegrityInformation の場合、SystemInformation パラメーターが指すバッファーは、次のレイアウトを持つ単一のSYSTEM_CODEINTEGRITY_INFORMATION構造体を保持するのに十分な大きさにする必要があります。

typedef struct _SYSTEM_CODEINTEGRITY_INFORMATION {
    ULONG  Length;
    ULONG  CodeIntegrityOptions;
} SYSTEM_CODEINTEGRITY_INFORMATION, *PSYSTEM_CODEINTEGRITY_INFORMATION;

Length メンバーには、構造体のサイズがバイト単位で格納されます。 これは呼び出し元によって設定する必要があります。

CodeIntegrityOptions メンバーには、コードの整合性オプションを識別するためのビットマスクが含まれています。

Value 意味
0x01 CODEINTEGRITY_OPTION_ENABLED カーネル モードのコード整合性の適用が有効になっています。
0x02 CODEINTEGRITY_OPTION_TESTSIGN テスト署名されたコンテンツは、コードの整合性によって許可されます。
0x04 CODEINTEGRITY_OPTION_UMCI_ENABLED ユーザー モードのコード整合性の適用が有効になっています。
0x08 CODEINTEGRITY_OPTION_UMCI_AUDITMODE_ENABLED ユーザー モードのコード整合性の適用は、監査モードで有効になります。 実行可能ファイルの実行/読み込みが許可されます。ただし、監査イベントは記録されます。
0x10 CODEINTEGRITY_OPTION_UMCI_EXCLUSIONPATHS_ENABLED 特定のパスから実行されているユーザー モード バイナリは、コードの整合性チェックに失敗した場合でも実行できます。

除外パスは、次のレジストリ キー REG_MULTI_SZ形式で一覧表示されます。

  • キー: HKLM\SYSTEM\CurrentControlSet\Control\CI\TRSData
  • 値: TestPath
このキーに追加されるパスは、次の 2 つの形式のいずれかである必要があります。
  • パス (絶対パスまたは相対パス): \Program Files\TestAutomationPath
  • バイナリ (固有): \Program Files\TestAutomationPath\mybinary.exe
次のパスは制限されており、除外として追加することはできません。
  • \
  • \Windows
  • \Windows\System32
  • \Program Files
組み込みのパスの除外: 次のパスは既定で除外されます。 パスの除外にこれらを特に追加する必要はありません。 これは ARM (Windows ランタイム) にのみ適用されます。
  • \Program Files\WTT
  • \Program Files (x86)\WTT
  • \WTT\JobsWorkingDir
  • \Program Files\Common Files\Model Design Environment
  • \TAEF
  • \$ASITEMP
  • \ATDEVXCT1\WTTInstall
  • \ATUEXCT1\WTTInstall
  • \ATESCCT1\WTTInstall
  • \ATCORECT1\WTTInstall
  • \ATStressCT1\WTTInstall
  • \ATWSCCT1\WTTInstall
  • \ATFUNCT1\WTTInstall
  • \ATIDCCT1\WTTInstall
  • \ATDNTCT1\WTTInstall
0x20 CODEINTEGRITY_OPTION_TEST_BUILD コードの整合性のビルドは、テスト ビルドからのビルドです。
0x40 CODEINTEGRITY_OPTION_PREPRODUCTION_BUILD コード整合性のビルドは、実稼働前のビルドからのビルドです。
0x80 CODEINTEGRITY_OPTION_DEBUGMODE_ENABLED カーネル デバッガーがアタッチされ、コードの整合性によって、署名されていないコードを読み込むことができます。
0x100 CODEINTEGRITY_OPTION_FLIGHT_BUILD コード整合性のビルドは、フライト ビルドからのビルドです。
0x200 CODEINTEGRITY_OPTION_FLIGHTING_ENABLED フライト署名されたコンテンツは、コードの整合性によって許可されます。 フライト署名済みコンテンツは、Microsoft 開発ルート証明機関 2014 によって署名されたコンテンツです。
0x400 CODEINTEGRITY_OPTION_HVCI_KMCI_ENABLED ハイパーバイザーによって適用されるコードの整合性は、カーネル モード コンポーネントに対して有効になっています。
0x800 CODEINTEGRITY_OPTION_HVCI_KMCI_AUDITMODE_ENABLED ハイパーバイザーによって強制されるコードの整合性は、監査モードで有効になります。 HVCI と互換性のないカーネル モード コンポーネントの監査イベントが記録されます。 このビットは、CODEINTEGRITY_OPTION_HVCI_KMCI_ENABLEDが設定されているかどうかを設定できます。
0x1000 CODEINTEGRITY_OPTION_HVCI_KMCI_STRICTMODE_ENABLED ハイパーバイザーによって適用されるコード整合性は、カーネル モード コンポーネントに対して有効になっていますが、厳密モードでは有効になっています。
0x2000 CODEINTEGRITY_OPTION_HVCI_IUM_ENABLED ハイパーバイザーによって適用されるコードの整合性は、分離ユーザー モード コンポーネント署名の適用によって有効になります。
 

SYSTEM_EXCEPTION_INFORMATION

SystemInformationClass パラメーターが SystemExceptionInformation の場合、SystemInformation パラメーターが指すバッファーは、乱数ジェネレーターの予測できないシードの生成に使用する不透明なSYSTEM_EXCEPTION_INFORMATION構造を保持するのに十分な大きさにする必要があります。 この目的のために、構造体には次のレイアウトがあります。

typedef struct _SYSTEM_EXCEPTION_INFORMATION {
    BYTE Reserved1[16];
} SYSTEM_EXCEPTION_INFORMATION;

構造体の個々のメンバーは、オペレーティング システムによる内部使用のために予約されています。

代わりに CryptGenRandom 関数を使用して、暗号的にランダムなデータを生成します。

SYSTEM_INTERRUPT_INFORMATION

SystemInformationClass パラメーターが SystemInterruptInformation の場合、SystemInformation パラメーターが指すバッファーは、システムにインストールされているプロセッサ (CPU) と同じ数の不透明なSYSTEM_INTERRUPT_INFORMATION構造体を含む配列を保持するのに十分な大きさにする必要があります。 各構造体 (配列全体) を使用して、乱数ジェネレーターの予測できないシードを生成できます。 この目的のために、構造体には次のレイアウトがあります。

typedef struct _SYSTEM_INTERRUPT_INFORMATION {
    BYTE Reserved1[24];
} SYSTEM_INTERRUPT_INFORMATION;

構造体の個々のメンバーは、オペレーティング システムによる内部使用のために予約されています。

代わりに CryptGenRandom 関数を使用して、暗号的にランダムなデータを生成します。

SYSTEM_KERNEL_VA_SHADOW_INFORMATION

SystemInformationClass パラメーターが SystemKernelVaShadowInformation の場合、SystemInformation パラメーターが指すバッファーは、次のレイアウトを持つ単一のSYSTEM_KERNEL_VA_SHADOW_INFORMATION構造体を保持するのに十分な大きさにする必要があります。

typedef struct _SYSTEM_KERNEL_VA_SHADOW_INFORMATION {
    struct {
        ULONG KvaShadowEnabled:1;
        ULONG KvaShadowUserGlobal:1;
        ULONG KvaShadowPcid:1;
        ULONG KvaShadowInvpcid:1;
        ULONG KvaShadowRequired:1;
        ULONG KvaShadowRequiredAvailable:1;
        ULONG InvalidPteBit:6;
        ULONG L1DataCacheFlushSupported:1;
        ULONG L1TerminalFaultMitigationPresent:1;
        ULONG Reserved:18;
    } KvaShadowFlags;
} SYSTEM_KERNEL_VA_SHADOW_INFORMATION, * PSYSTEM_KERNEL_VA_SHADOW_INFORMATION;

KvaShadowEnabled は、シャドウが有効かどうかを示します。

KvaShadowUserGlobal は、ユーザー/グローバルが有効になっていることを示します。

KvaShadowPcid は、PCID が有効かどうかを示します。

KvaShadowInvpcid は、PCID が有効かどうか、および INVPCID が使用されているかどうかを示します。

KvaShadowRequired は、ハードウェアが CVE-2017-5754 の影響を受けやすいことがわかっているかどうかを示します。

KvaShadowRequiredAvailable は、KvaShadowRequired フィールドがオペレーティング システムでサポートされているかどうかを示します。

InvalidPteBit は、無効なページ テーブル エントリに使用される物理アドレス ビットを示し、設定されていない場合は 0 を示します。

L1DataCacheFlushSupported は、ハードウェアが L1 データ キャッシュのフラッシュをサポートしているかどうかを示します。

L1TerminalFaultMitigationPresent は、オペレーティング システムが L1 ターミナル 障害 (CVE-2018-3620) オペレーティング システムの軽減策をサポートしているかどうかを示します。

構造体の 予約済み メンバーは、オペレーティング システムによる内部使用のために予約されています。

SYSTEM_LEAP_SECOND_INFORMATION

SystemInformationClass パラメーターが SystemLeapSecondInformation の場合、SystemInformation パラメーターが指すバッファーは、システム全体でうるう秒を有効または無効にするために使用する不透明なSYSTEM_LEAP_SECOND_INFORMATION構造を保持するのに十分な大きさにする必要があります。 この設定は、システムの再起動後も保持されます。 この目的のために、構造体のレイアウトは次のとおりです。

typedef struct _SYSTEM_LEAP_SECOND_INFORMATION {
    BOOLEAN Enabled;
    ULONG Flags;
} SYSTEM_LEAP_SECOND_INFORMATION

[フラグ] フィールドは、今後使用するために予約されています。

SYSTEM_LOOKASIDE_INFORMATION

SystemInformationClass パラメーターが SystemLookasideInformation の場合、SystemInformation パラメーターが指すバッファーは、乱数ジェネレーターの予期しないシードの生成に使用する不透明なSYSTEM_LOOKASIDE_INFORMATION構造体を保持するのに十分な大きさにする必要があります。 この目的のために、構造体のレイアウトは次のとおりです。

typedef struct _SYSTEM_LOOKASIDE_INFORMATION {
    BYTE Reserved1[32];
} SYSTEM_LOOKASIDE_INFORMATION;

構造体の個々のメンバーは、オペレーティング システムによる内部使用のために予約されています。

代わりに CryptGenRandom 関数を使用して、暗号的にランダムなデータを生成します。

SYSTEM_PERFORMANCE_INFORMATION

SystemInformationClass パラメーターが SystemPerformanceInformation の場合、SystemInformation パラメーターが指すバッファーは、乱数ジェネレーターの予期しないシードの生成に使用する不透明なSYSTEM_PERFORMANCE_INFORMATION構造体を保持するのに十分な大きさにする必要があります。 この目的のために、構造体のレイアウトは次のとおりです。

typedef struct _SYSTEM_PERFORMANCE_INFORMATION {
    BYTE Reserved1[312];
} SYSTEM_PERFORMANCE_INFORMATION;

構造体の個々のメンバーは、オペレーティング システムによる内部使用のために予約されています。

代わりに CryptGenRandom 関数を使用して、暗号的にランダムなデータを生成します。

SYSTEM_POLICY_INFORMATION

SystemInformationClass パラメーターが SystemPolicyInformation の場合、SystemInformation パラメーターが指すバッファーは、次のレイアウトを持つ単一のSYSTEM_POLICY_INFORMATION構造体を保持するのに十分な大きさにする必要があります。

typedef struct _SYSTEM_POLICY_INFORMATION {
    PVOID Reserved1[2];
    ULONG Reserved2[3];
} SYSTEM_POLICY_INFORMATION;

構造体の個々のメンバーは、オペレーティング システムによる内部使用のために予約されています。

ポリシー情報を取得するには、代わりに SLGetWindowsInformation 関数を使用します。

SYSTEM_PROCESS_INFORMATION

SystemInformationClass パラメーターが SystemProcessInformation の場合、SystemInformation パラメーターが指すバッファーには、各プロセスのSYSTEM_PROCESS_INFORMATION構造体が含まれます。 これらの各構造体は、直前のプロセスの各スレッドの情報を提供する 1 つ以上の SYSTEM_THREAD_INFORMATION 構造体によってメモリ内で直ちに実行されます。 SYSTEM_THREAD_INFORMATIONの詳細については、この記事のこの構造に関するセクションを参照してください。

SystemInformation パラメーターが指すバッファーは、システムで実行されているプロセスとスレッドと同じ数のSYSTEM_PROCESS_INFORMATIONおよびSYSTEM_THREAD_INFORMATION構造体を含む配列を保持するのに十分な大きさにする必要があります。 このサイズは ReturnLength パラメーターで指定します。

SYSTEM_PROCESS_INFORMATION 構造には、次のレイアウトがあります。

typedef struct _SYSTEM_PROCESS_INFORMATION {
    ULONG NextEntryOffset;
    ULONG NumberOfThreads;
    BYTE Reserved1[48];
    UNICODE_STRING ImageName;
    KPRIORITY BasePriority;
    HANDLE UniqueProcessId;
    PVOID Reserved2;
    ULONG HandleCount;
    ULONG SessionId;
    PVOID Reserved3;
    SIZE_T PeakVirtualSize;
    SIZE_T VirtualSize;
    ULONG Reserved4;
    SIZE_T PeakWorkingSetSize;
    SIZE_T WorkingSetSize;
    PVOID Reserved5;
    SIZE_T QuotaPagedPoolUsage;
    PVOID Reserved6;
    SIZE_T QuotaNonPagedPoolUsage;
    SIZE_T PagefileUsage;
    SIZE_T PeakPagefileUsage;
    SIZE_T PrivatePageCount;
    LARGE_INTEGER Reserved7[6];
} SYSTEM_PROCESS_INFORMATION;

配列内の次の項目の先頭は、前の項目のアドレスと NextEntryOffset メンバーの値です。 配列内の最後の項目の 場合、NextEntryOffset は 0 です。

NumberOfThreads メンバーには、プロセス内のスレッドの数が含まれています。

ImageName メンバーには、プロセスのイメージ名が含まれています。

BasePriority メンバーには、関連付けられたプロセス内に作成されたスレッドの開始優先度であるプロセスの基本優先度が含まれています。

UniqueProcessId メンバーには、プロセスの一意のプロセス ID が含まれています。

HandleCount メンバーには、問題のプロセスで使用されているハンドルの合計数が含まれています。代わりに GetProcessHandleCount を使用して、この情報を取得します。

SessionId メンバーには、プロセス セッションのセッション識別子が含まれています。

PeakVirtualSize メンバーには、プロセスで使用される仮想メモリのピーク サイズ (バイト単位) が含まれます。

VirtualSize メンバーには、プロセスによって使用される仮想メモリの現在のサイズ (バイト単位) が含まれます。

PeakWorkingSetSize メンバーには、プロセスのワーキング セットのピーク サイズ (キロバイト単位) が含まれます。

QuotaPagedPoolUsage メンバーには、ページ プールの使用に対してプロセスに課金される現在のクォータが含まれています。

QuotaNonPagedPoolUsage メンバーには、非ページ プールの使用に対してプロセスに課金される現在のクォータが含まれています。

PagefileUsage メンバーには、プロセスで使用されているページ ファイル ストレージのバイト数が含まれます。

PeakPagefileUsage メンバーには、プロセスで使用されるページ ファイル ストレージの最大バイト数が含まれます。

PrivatePageCount メンバーには、このプロセスで使用するために割り当てられたメモリ ページの数が含まれます。

また、GetProcessMemoryInfo 関数または Win32_Process クラスを使用して、PeakWorkingSetSizeQuotaPagedPoolUsageQuotaNonPagedPoolUsagePagefileUsagePeakPagefileUsagePrivatePageCount の情報を取得することもできます。

構造体の他のメンバーは、オペレーティング システムによる内部使用のために予約されています。

SYSTEM_THREAD_INFORMATION

SystemInformationClass パラメーターが SystemProcessInformation の場合、SystemInformation パラメーターが指すバッファーには、各プロセスのSYSTEM_PROCESS_INFORMATION構造体が含まれます。 これらの各構造体は、直前のプロセスの各スレッドの情報を提供する 1 つ以上の SYSTEM_THREAD_INFORMATION 構造体によってメモリ内で直ちに実行されます。 SYSTEM_PROCESS_INFORMATIONの詳細については、この記事のこの構造に関するセクションを参照してください。 各 SYSTEM_THREAD_INFORMATION 構造には、次のレイアウトがあります。

typedef struct _SYSTEM_THREAD_INFORMATION {
    LARGE_INTEGER Reserved1[3];
    ULONG Reserved2;
    PVOID StartAddress;
    CLIENT_ID ClientId;
    KPRIORITY Priority;
    LONG BasePriority;
    ULONG Reserved3;
    ULONG ThreadState;
    ULONG WaitReason;
} SYSTEM_THREAD_INFORMATION;

StartAddress メンバーには、スレッドの開始アドレスが含まれています。

ClientId メンバーには、スレッドの ID と、スレッドを所有するプロセスが含まれます。

Priority メンバーには、動的スレッドの優先度が含まれています。

BasePriority メンバーには、基本スレッドの優先度が含まれています。

ThreadState メンバーには、現在のスレッド状態が含まれています。

WaitReason メンバーには、スレッドが待機している理由が含まれています。

構造体の他のメンバーは、オペレーティング システムによる内部使用のために予約されています。

SYSTEM_PROCESSOR_PERFORMANCE_INFORMATION

SystemInformationClass パラメーターが SystemProcessorPerformanceInformation の場合、SystemInformation パラメーターが指すバッファーは、システムにインストールされているプロセッサ (CPU) と同じ数のSYSTEM_PROCESSOR_PERFORMANCE_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 メンバーには、システムがアイドル状態になった時間が 100 ナノ秒間隔で格納されます。

KernelTime メンバーには、システムがカーネル モード (すべてのプロセスのすべてのスレッド、すべてのプロセッサのすべてのスレッドを含む) で実行に費やした時間が、100 ナノ秒間隔で格納されます。

UserTime メンバーには、システムがユーザー モード (すべてのプロセスのすべてのスレッド、すべてのプロセッサのすべてのスレッドを含む) で実行に費やした時間が、100 ナノ秒間隔で格納されます。

代わりに GetSystemTimes を使用して、この情報を取得します。

SYSTEM_QUERY_PERFORMANCE_COUNTER_INFORMATION

SystemInformationClass パラメーターが SystemQueryPerformanceCounterInformation の場合、SystemInformation パラメーターが指すバッファーは、次のレイアウトを持つ単一のSYSTEM_QUERY_PERFORMANCE_COUNTER_INFORMATION構造体を保持するのに十分な大きさにする必要があります。

typedef struct _SYSTEM_QUERY_PERFORMANCE_COUNTER_INFORMATION {
    ULONG                           Version;
    QUERY_PERFORMANCE_COUNTER_FLAGS Flags;
    QUERY_PERFORMANCE_COUNTER_FLAGS ValidFlags;
} SYSTEM_QUERY_PERFORMANCE_COUNTER_INFORMATION;

Flags メンバーと ValidFlags メンバーは、次のレイアウトを持つQUERY_PERFORMANCE_COUNTER_FLAGS構造体です。

typedef struct _QUERY_PERFORMANCE_COUNTER_FLAGS {
    union {
        struct {
            ULONG KernelTransition:1;
            ULONG Reserved:31;
        };
        ULONG ul;
    };
} QUERY_PERFORMANCE_COUNTER_FLAGS;

SYSTEM_QUERY_PERFORMANCE_COUNTER_INFORMATION構造体の ValidFlags メンバーは、Flags メンバーのどのビットに有効な情報が含まれているかを示します。 カーネル遷移が必要な場合、 KernelTransition ビットは ValidFlagsFlags の両方で設定されます。 カーネル遷移が必要ない場合、 KernelTransition ビットは ValidFlags に設定され、 Flags ではクリアされます。

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_SPECULATION_CONTROL_INFORMATION

SystemInformationClass パラメーターが SystemSpeculationControlInformation の場合、SystemInformation パラメーターが指すバッファーは、次のレイアウトを持つ単一のSYSTEM_SPECULATION_CONTROL_INFORMATION構造体を保持するのに十分な大きさにする必要があります。

typedef struct _SYSTEM_SPECULATION_CONTROL_INFORMATION {
    struct {
         ULONG BpbEnabled:1;
         ULONG BpbDisabledSystemPolicy:1;
         ULONG BpbDisabledNoHardwareSupport:1;
         ULONG SpecCtrlEnumerated:1;
         ULONG SpecCmdEnumerated:1;
         ULONG IbrsPresent:1;
         ULONG StibpPresent:1;
         ULONG SmepPresent:1;
         ULONG SpeculativeStoreBypassDisableAvailable:1;
         ULONG SpeculativeStoreBypassDisableSupported:1;
         ULONG SpeculativeStoreBypassDisabledSystemWide:1;
         ULONG SpeculativeStoreBypassDisabledKernel:1;
         ULONG SpeculativeStoreBypassDisableRequired:1;
         ULONG BpbDisabledKernelToUser:1;
         ULONG Reserved:18;
    } SpeculationControlFlags;

} SYSTEM_SPECULATION_CONTROL_INFORMATION, * PSYSTEM_SPECULATION_CONTROL_INFORMATION;

BpbEnabled は、投機制御機能がサポートされ、有効になっているかどうかを示します。

BpbDisabledSystemPolicy は、システム ポリシーが原因で投機制御機能が無効になっているかどうかを示します。

BpbDisabledNoHardwareSupport は、ハードウェアサポートがないために投機制御機能が無効になっているかどうかを示します。

SpecCtrl は、IA32_SPEC_CTRL MSR がハードウェアによって列挙されているかどうかを示します。

SpecCmdEnumerated は、IA32_SPEC_CMD MSR がハードウェアによって列挙されているかどうかを示します。

IbrsPresent は、IBRS MSR が存在として扱われるかどうかを示します。

StibpPresent は、STIBP MSR が存在するかどうかを示します。

SmepPresent は、SMEP 機能が存在し、有効になっているかどうかを示します。

SpeculativeStoreBypassDisableAvailable は、このデータ構造の他の投機的ストア バイパス 無効化 (SSBD) フィールドがオペレーティング システムでサポートされているかどうかを示します。

SpeculativeStoreBypassDisableSupported は、SSBD のハードウェア サポートが存在するかどうかを示します。

SpeculativeStoreBypassDisabledSystemWide は、SSBD がシステム全体で有効になっているかどうかを示します。

SpeculativeStoreBypassDisabledKernel は、カーネル モードで SSBD が無効になっているかどうかを示します。

SpeculativeStoreBypassDisableRequired は、ハードウェアが投機的ストア バイパスの影響を受けやすいことがわかっているかどうかを示します。

BpbDisabledKernelToUser は、間接分岐予測がカーネルからユーザーへの切り替えごとにフラッシュされるかどうかを示します。

構造体の 予約済み メンバーは、オペレーティング システムによる内部使用のために予約されています。

SYSTEM_TIMEOFDAY_INFORMATION

SystemInformationClass パラメーターが SystemTimeOfDayInformation の場合、SystemInformation パラメーターが指すバッファーは、乱数ジェネレーターの予期しないシードの生成に使用する不透明なSYSTEM_TIMEOFDAY_INFORMATION構造体を保持するのに十分な大きさにする必要があります。 この目的のために、構造体のレイアウトは次のとおりです。

typedef struct _SYSTEM_TIMEOFDAY_INFORMATION {
    BYTE Reserved1[48];
} SYSTEM_TIMEOFDAY_INFORMATION;

構造体の個々のメンバーは、オペレーティング システムによる内部使用のために予約されています。

代わりに CryptGenRandom 関数を使用して、暗号的にランダムなデータを生成します。

[in] SystemInformationLength

SystemInformation パラメーターが指すバッファーのサイズ (バイト単位)。

[out, optional] ReturnLength

関数が要求された情報の実際のサイズを書き込む場所への省略可能なポインター。 そのサイズが 以下の場合、
SystemInformationLength パラメーターは、情報を SystemInformation バッファーにコピーします。それ以外の場合は、NTSTATUS エラー コードを返し、要求された情報を受信するために必要なバッファーのサイズを ReturnLength で返します。

戻り値

NTSTATUS の成功またはエラー コードを返します。

NTSTATUS エラー コードの形式と重要性は、DDK で使用できる Ntstatus.h ヘッダー ファイルに記載されており、DDK ドキュメントで説明されています。

注釈

NtQuerySystemInformation 関数とその関数が返す構造体は、オペレーティング システムの内部であり、Windows のリリース間で変更される可能性があります。 アプリケーションの互換性を維持するには、代わりに前述の代替関数を使用することをお勧めします。

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

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

要件

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

こちらもご覧ください

GetProcessHandleCount

GetProcessMemoryInfo

GetSystemInfo

GetSystemRegistryQuota

GetSystemTimes