Share via


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中列舉的其中一個值,表示要擷取的系統資訊種類。 這些值包括下列值。

SystemBasicInformation

傳回 SYSTEM_BASIC_INFORMATION結構中 系統中的處理器數目。 請改用 GetSystemInfo 函式。

SystemCodeIntegrityInformation

傳回 SYSTEM_CODEINTEGRITY_INFORMATION 結構,可用來判斷系統上程式代碼完整性所強制執行的選項。

SystemExceptionInformation

傳回不透明的 SYSTEM_EXCEPTION_INFORMATION 結構,可用來為隨機數產生器產生無法預測的種子。 請改用 CryptGenRandom 函式。

SystemInterruptInformation

傳回不透明的 SYSTEM_INTERRUPT_INFORMATION 結構,可用來為隨機數產生器產生無法預期的種子。 請改用 CryptGenRandom 函式。

SystemKernelVaShadowInformation

傳回 SYSTEM_KERNEL_VA_SHADOW_INFORMATION 結構,可用來判斷涉及惡意數據快取載入之攻擊 (的 (,例如 CVE-2017-5754) 。

SystemLeapSecondInformation

傳回不透明 SYSTEM_LEAP_SECOND_INFORMATION 結構,可用來啟用或停用全系統閏秒。 即使系統重新啟動之後,此設定仍會持續存在。

SystemLo一sideInformation

傳回不透明的 SYSTEM_LOOKASIDE_INFORMATION 結構,可用來為隨機數產生器產生無法預測的種子。 請改用 CryptGenRandom 函式。

SystemPerformanceInformation

傳回不透明的 SYSTEM_PERFORMANCE_INFORMATION 結構,可用來為隨機數產生器產生無法預測的種子。 請改用 CryptGenRandom 函式。

SystemPolicyInformation

傳回 SYSTEM_POLICY_INFORMATION 結構中的原則資訊。 請改用 SLGetWindowsInformation 函式 來取得原則資訊。

SystemProcessInformation

傳回 SYSTEM_PROCESS_INFORMATION 結構的數位,針對系統中執行的每個進程各傳回一個數位列。

這些結構包含每個進程的資源使用量相關信息,包括進程所使用的線程和句柄數目、尖峰頁面檔使用量,以及進程已配置的記憶體頁面數目。

SystemProcessorPerformanceInformation

傳回 SYSTEM_PROCESSOR_PERFORMANCE_INFORMATION 結構的數位,每個處理器都會安裝在系統中。

SystemQueryPerformanceCounterInformation

傳回 SYSTEM_QUERY_PERFORMANCE_COUNTER_INFORMATION 結構,可用來判斷系統是否需要核心轉換,才能透過 QueryPerformanceCounter 函數調用擷取高解析度性能計數器資訊。

SystemRegistryQuotaInformation

傳回 SYSTEM_REGISTRY_QUOTA_INFORMATION 結構。

SystemSpeculationControlInformation

傳回 SYSTEM_SPECULATION_CONTROL_INFORMATION 結構,可用來判斷涉及分支目標插入 (攻擊的 (,例如 CVE-2017-5715) 。

每個 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 成員包含位掩碼來識別程式碼完整性選項。

ReplTest1 意義
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
新增至此索引鍵的路徑應為下列兩種格式之一:
  • 路徑 (絕對或相對) :\Program Files\TestAutomationPath
  • 二進位 (特定) :\Program Files\TestAutomationPath\mybinary.exe
下列路徑受到限制,無法新增為排除專案:
  • \
  • \窗戶
  • \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 已針對核心模式元件啟用 Hypervisor 強制執行的程式代碼完整性。
0x800 CODEINTEGRITY_OPTION_HVCI_KMCI_AUDITMODE_ENABLED Hypervisor 強制執行的程式代碼完整性會在稽核模式中啟用。 稽核事件將會針對與 HVCI 不相容的核心模式元件進行記錄。 不論是否已設定CODEINTEGRITY_OPTION_HVCI_KMCI_ENABLED,都可以設定這個位。
0x1000 CODEINTEGRITY_OPTION_HVCI_KMCI_STRICTMODE_ENABLED 已針對核心模式元件啟用 Hypervisor 強制執行的程式代碼完整性,但處於嚴格模式。
0x2000 CODEINTEGRITY_OPTION_HVCI_IUM_ENABLED 啟用 Hypervisor 強制執行的程式代碼完整性,並強制執行隔離的使用者模式元件簽署。
 

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 參數指向的緩衝區應該夠大,足以容納包含許多不透明 SYSTEM_INTERRUPT_INFORMATION 結構的數位,因為系統上已安裝處理器 (CPU) 。 每個結構或整個數位都可以用來產生隨機數產生器無法預測的種子。 為此,結構具有下列配置:

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 表示用於無效分頁表項目的實體位址位,如果未設定則為零。

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 參數為 SystemLo一sideInformation 時, 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 結構。 上述每個結構都會緊接在記憶體中,後面接著一或多個 SYSTEM_THREAD_INFORMATION 結構,以提供上述進程中每個線程的資訊。 如需 SYSTEM_THREAD_INFORMATION的詳細資訊,請參閱本文中有關此結構的一節。

SystemInformation 參數所指向的緩衝區應該夠大,足以保存包含任意數目的SYSTEM_PROCESS_INFORMATIONSYSTEM_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 成員包含進程的唯一進程標識碼。

HandleCount 成員包含有問題的處理程式正在使用的句柄總數;請改用 GetProcessHandleCount 來擷取此資訊。

SessionId 成員包含進程會話的會話標識碼。

PeakVirtualSize 成員包含進程所使用的虛擬記憶體尖峰大小,以位元組為單位。

VirtualSize 成員包含進程所使用的虛擬記憶體目前大小,以位元組為單位。

PeakWorkingSetSize 成員包含進程工作集的尖峰大小,以 KB 為單位。

QuotaPagedPoolUsage 成員包含針對分頁集區使用量的程序收費的目前配額。

QuotaNonPagedPoolUsage 成員包含針對非分頁集區使用量的進程收費的目前配額。

PagefileUsage 成員包含進程正在使用的頁面檔案記憶體位元組數目。

PeakPagefileUsage 成員包含進程所使用的頁面文件記憶體位元組數目上限。

PrivatePageCount 成員包含配置給使用此進程的記憶體分頁數目。

您也可以使用 GetProcessMemoryInfo 函式或 Win32_Process 類別,擷取 PeakWorkingSetSizeQuotaPagedPoolUsageQuotaNonPagedPoolUsagePagefileUsagePeakPagefileUsagePrivatePageCount 資訊。

結構的其他成員會保留供操作系統內部使用。

SYSTEM_THREAD_INFORMATION

SystemInformationClass 參數為 SystemProcessInformation 時, SystemInformation 參數所指向的緩衝區會包含每個進程的 SYSTEM_PROCESS_INFORMATION 結構。 上述每個結構都會緊接在記憶體中,後面接著一或多個 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 成員包含線程的標識碼,以及擁有線程的進程。

Priority 成員包含動態線程優先順序。

BasePriority 成員包含基底線程優先順序。

ThreadState 成員包含目前的線程狀態。

WaitReason 成員包含線程正在等候的原因。

結構的其他成員會保留供操作系統內部使用。

SYSTEM_PROCESSOR_PERFORMANCE_INFORMATION

SystemInformationClass 參數為 SystemProcessorPerformanceInformation 時, SystemInformation 參數所指向的緩衝區應該夠大,以容納包含許多 SYSTEM_PROCESSOR_PERFORMANCE_INFORMATION 結構的數組,因為系統中已安裝處理器 (CPU) 。 每個 結構都有下列配置:

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;

FlagsValidFlags 成員是具有下列配置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 來擷取此資訊。

結構的其他成員會保留供操作系統內部使用。

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 是否因為缺少硬體支援而停用控制功能。

SpecCtrlEnumerated 硬體是否列舉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,請透過 運行時間動態連結存取函式。 這可讓您的程式代碼有機會在函式已變更或從操作系統中移除時正常回應。 不過,無法偵測簽章變更。

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

規格需求

   
目標平台 Windows
標頭 winternl.h
程式庫 ntdll.lib
Dll ntdll.dll

另請參閱

GetProcessHandleCount

GetProcessMemoryInfo

GetSystemInfo

GetSystemRegistryQuota

GetSystemTimes