[NtQuerySystemInformation 可能在将来的 Windows 版本中更改或不可用。 应用程序应使用本主题中列出的备用函数。]
检索指定的系统信息。
Syntax
__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 结构构成的数组,其中一个用于系统中运行的每个进程。
这些结构包含有关每个进程的资源使用情况的信息,包括进程使用的线程数和句柄数、峰值页文件使用情况以及进程分配的内存页数。
注释
尽可能使用 SystemBasicProcessInformation, 因为它更快,消耗更少的内存,并且不需要同步计时数据(消除处理器唤醒)。
SystemBasicProcessInformation
自 Windows 11 版本 26100.4770 起可用
返回一个由 SYSTEM_BASICPROCESS_INFORMATION 结构构成的数组,其中一个用于系统中运行的每个进程。
这些结构包含有关每个进程的基本信息,包括进程名称、其进程 ID 和唯一序列号。
注释
SYSTEM_BASICPROCESS_INFORMATION 与 SYSTEM_PROCESS_INFORMATION 相同,但 SequenceNumber 成员除外,该成员是分配给每个进程的唯一值,用于检测 UniqueProcessId 重用(而不是进程 CreateTime)。
typedef struct _SYSTEM_BASICPROCESS_INFORMATION {
ULONG NextEntryOffset;
HANDLE UniqueProcessId;
HANDLE InheritedFromUniqueProcessId;
ULONG64 SequenceNumber;
UNICODE_STRING ImageName;
} SYSTEM_BASICPROCESS_INFORMATION, *PSYSTEM_BASICPROCESS_INFORMATION;
其成员与 SYSTEM_PROCESS_INFORMATION 中的成员相同,除了 SequenceNumber,它是分配给每个进程的唯一数字,可用于检测 UniqueProcessId 重用,而不是进程 CreateTime。
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 成员包含用于标识代码完整性选项的位掩码。
| 价值 | 意义 | |
| 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格式列出:
|
| 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_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;
HANDLE InheritedFromUniqueProcessId;
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。
InheritedFromUniqueProcessId 成员包含其父级的唯一进程 ID。
HandleCount 成员包含所处理进程的句柄总数;改用 GetProcessHandleCount 检索此信息。
SessionId 成员包含进程会话的会话标识符。
PeakVirtualSize 成员包含进程使用的虚拟内存的峰值大小(以字节为单位)。
VirtualSize 成员包含进程使用的虚拟内存的当前大小(以字节为单位)。
PeakWorkingSetSize 成员包含进程的工作集的峰值大小(以 KB 为单位)。
QuotaPagedPoolUsage 成员包含对分页池使用情况的进程收费的当前配额。
QuotaNonPagedPoolUsage 成员包含针对非分页池使用情况的进程收费的当前配额。
PagefileUsage 成员包含进程正在使用的页面文件存储的字节数。
PeakPagefileUsage 成员包含进程使用的页面文件存储的最大字节数。
PrivatePageCount 成员包含为使用此进程分配的内存页数。
还可以使用 GetProcessMemoryInfo 函数或 Win32_Process 类检索 PeakWorkingSetSize、QuotaPagedPoolUsage、QuotaNonPagedPoolUsage、PagefileUsage、PeakPagefileUsage 和 PrivatePageCount 信息。
结构的其他成员保留供作系统内部使用。
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;
标志和 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 成员指示标志成员的哪些位包含有效信息。 如果需要内核转换,则 KernelTransition 位在 ValidFlags 和 Flags 中设置。 如果不需要内核转换, 则 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,请通过 运行时动态链接访问函数。 这样,代码就有机会在作系统中更改或删除函数时正常响应。 但是,签名更改可能无法检测到。
此函数没有关联的导入库。 必须使用 LoadLibrary 和 GetProcAddress 函数动态链接到 Ntdll.dll。
要求
| Requirement | 价值 |
|---|---|
| 目标平台 | Windows操作系统 |
| Header | winternl.h |
| Library | ntdll.lib |
| DLL | ntdll.dll |