Поделиться через


Функция 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:

  • Ключ: 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 Содержимое, подписанное тестом, разрешено целостностью кода. Содержимое, подписанное тестом, — это содержимое, подписанное корневым центром сертификации Майкрософт 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

См. также раздел

GetProcessHandleCount

GetProcessMemoryInfo

GetSystemInfo

GetSystemRegistryQuota

GetSystemTimes