Примечание
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
[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 , по одному для каждого процесса, выполняющегося в системе.
Эти структуры содержат сведения об использовании ресурсов каждого процесса, включая количество потоков и дескрипторов, используемых процессом, пиковое использование страниц страниц и количество выделенных страниц памяти.
Замечание
По возможности SystemBasicProcessInformation следует использовать вместо этого, так как он быстрее, потребляет меньше памяти и не требует синхронизации данных времени (устранение пробуждения процессора).
SystemBasicProcessInformation
Доступно в Windows 11 версии 26100.4770
Возвращает массив SYSTEM_BASICPROCESS_INFORMATION структур, по одному для каждого процесса, выполняемого в системе.
Эти структуры содержат основные сведения о каждом процессе, включая имя процесса, его идентификатор процесса и уникальный порядковый номер.
Замечание
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, присутствует 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;
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 содержит уникальный идентификатор процесса.
Элемент InheritedFromUniqueProcessId содержит уникальный идентификатор процесса родительского элемента.
Член 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 , так и в флагах. Если переход ядра не требуется, бит 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 указывает, присутствует ли MSR STIBP.
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 .
Требования
Требование | Ценность |
---|---|
целевая платформа | Виндоус |
Header | winternl.h |
Library | ntdll.lib |
DLL | ntdll.dll |