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 结构。 即使在重新启动系统后,此设置也会保留。

SystemLookasideInformation

返回一个不透明的 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,则存在 OS 对 SSBD 的支持。
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 成员包含用于标识代码完整性选项的位掩码。

含义
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
  • \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 指示用于无效页表条目的物理地址位;如果未设置,则为零。

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 结构。 内存中紧跟其中每个结构后跟一个或多个 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 成员包含进程的唯一进程 ID。

HandleCount 成员包含有问题的进程正在使用的句柄总数;改用 GetProcessHandleCount 检索此信息。

SessionId 成员包含进程会话的会话标识符。

PeakVirtualSize 成员包含进程使用的虚拟内存的峰值大小(以字节为单位)。

VirtualSize 成员包含进程使用的虚拟内存的当前大小(以字节为单位)。

PeakWorkingSetSize 成员包含进程的工作集的峰值大小(以 KB 为单位)。

QuotaPagedPoolUsage 成员包含按分页池使用对进程收费的当前配额。

QuotaNonPagedPoolUsage 成员包含针对非分页池使用向进程收费的当前配额。

PagefileUsage 成员包含进程正在使用的页面文件存储的字节数。

PeakPagefileUsage 成员包含进程使用的页面文件存储的最大字节数。

PrivatePageCount 成员包含为使用此过程而分配的内存页数。

还可以使用 GetProcessMemoryInfo 函数或 Win32_Process 类检索 PeakWorkingSetSizeQuotaPagedPoolUsageQuotaNonPagedPoolUsagePagefileUsage、PeakPagefileUsagePrivatePageCount 信息。

结构的其他成员保留供操作系统内部使用。

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 成员包含线程的 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;

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 成员的哪些位包含有效信息。 如果需要内核转换,则会在 ValidFlags 和 Flags 中设置 KernelTransition 位。 如果不需要内核转换,则 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
Library ntdll.lib
DLL ntdll.dll

另请参阅

GetProcessHandleCount

GetProcessMemoryInfo

GetSystemInfo

GetSystemRegistryQuota

GetSystemTimes