Функция 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, IA32_SPEC_CTRL MSR i386/AMD64 перечисляется оборудованием. |
SpecCmdEnumerated | Если задано значение TRUE, IA32_SPEC_CMD MSR i386/AMD64 перечисляется оборудованием. |
IbrsPresent | Если задано значение TRUE, то msR I386/AMD64 IBRS обрабатывается как присутствующая. |
StibpPresent | Если задано значение TRUE, отображается msr i386/AMD64 STIBP. |
SmepPresent | Если задано значение TRUE, функция SMEP присутствует и включена. |
SpeculativeStoreBypassDisableAvailable | Если значение РАВНО TRUE, поддержка 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:
|
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 | Содержимое, подписанное тестом, разрешено целостностью кода. Содержимое, подписанное тестом, — это содержимое, подписанное корневым центром сертификации Майкрософт 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 , должен быть достаточно большим для хранения массива, содержащего столько непрозрачных структур 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;
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 содержит пиковый размер рабочего набора процесса (в килобайтах).
Элемент QuotaPagedPoolUsage содержит текущую квоту, взимаемую в процесс для использования выгружаемого пула.
Элемент QuotaNonPagedPoolUsage содержит текущую квоту, взимаемую с процесса для использования непагрегированного пула.
Элемент PagefileUsage содержит количество байтов хранилища файлов подкачки, используемых процессом.
Член PeakPagefileUsage содержит максимальное количество байтов хранилища файлов подкачки, используемых процессом.
Член PrivatePageCount содержит количество страниц памяти, выделенных для использования этого процесса.
Вы также можете получить сведения о PeakWorkingSetSize, QuotaPagedPoolUsage, QuotaNonPagedPoolUsage, PagefileUsage, PeakPagefileUsage и PrivatePageCount с помощью функции GetProcessMemoryInfo или класса Win32_Process .
Остальные элементы структуры зарезервированы для внутреннего использования операционной системой.
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 структур, сколько процессоров (ЦП) установлено в системе. Каждая структура имеет следующий макет:
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;
Элемент ValidFlags структуры SYSTEM_QUERY_PERFORMANCE_COUNTER_INFORMATION указывает, какие биты элемента Flags содержат допустимые сведения. Если требуется переход ядра, бит KernelTransition задается в параметрах ValidFlags и Flags. Если переход на ядро не требуется, бит KernelTransition задается в ValidFlags и снимите флажок Флаги.
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 указывает, обрабатывается ли MSR IBRS как присутствующая.
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 перечислены в файле заголовка Ntstatus.h, доступном в DDK, и описаны в документации по DDK.
Комментарии
Функция NtQuerySystemInformation и структуры, которые она возвращает, являются внутренними для операционной системы и могут изменяться из одного выпуска Windows в другой. Для обеспечения совместимости приложения лучше использовать альтернативные функции, упомянутые выше.
Если вы используете NtQuerySystemInformation, получите доступ к функции с помощью динамической компоновки во время выполнения. Это дает коду возможность корректно реагировать, если функция была изменена или удалена из операционной системы. Однако изменения подписи могут быть недоступны для обнаружения.
У этой функции нет связанной библиотеки импорта. Для динамической связи с Ntdll.dll необходимо использовать функции LoadLibrary и GetProcAddress .
Требования
Целевая платформа | Windows |
Header | winternl.h |
Библиотека | ntdll.lib |
DLL | ntdll.dll |