Функция ZwQuerySystemInformation

[ZwQuerySystemInformation больше недоступен для использования с Windows 8. Вместо этого используйте альтернативные функции, перечисленные в этом разделе.]

Извлекает указанные системные сведения.

Синтаксис

NTSTATUS WINAPI ZwQuerySystemInformation(
  _In_      SYSTEM_INFORMATION_CLASS SystemInformationClass,
  _Inout_   PVOID                    SystemInformation,
  _In_      ULONG                    SystemInformationLength,
  _Out_opt_ PULONG                   ReturnLength
);

Параметры

SystemInformationClass [in]

Тип извлекаемой системной информации. Этот параметр может быть одним из следующих значений из типа перечисления SYSTEM_INFORMATION_CLASS .

SystemBasicInformation

Количество процессоров в системе в SYSTEM_BASIC_INFORMATION структуре. Вместо этого используйте функцию GetSystemInfo .

SystemPerformanceInformation

Непрозрачная структура SYSTEM_PERFORMANCE_INFORMATION , которую можно использовать для создания непредсказуемого начального значения для генератора случайных чисел. Вместо этого используйте функцию CryptGenRandom .

SystemTimeOfDayInformation

Непрозрачная структура SYSTEM_TIMEOFDAY_INFORMATION , которую можно использовать для создания непредсказуемого начального значения для генератора случайных чисел. Вместо этого используйте функцию CryptGenRandom .

SystemProcessInformation

Массив SYSTEM_PROCESS_INFORMATION структур, по одной для каждого процесса, выполняющегося в системе.

Эти структуры содержат сведения об использовании ресурсов каждого процесса, включая количество дескрипторов, используемых процессом, пиковое использование файла подкачки и количество страниц памяти, выделенных процессом.

SystemProcessorPerformanceInformation

Массив SYSTEM_PROCESSOR_PERFORMANCE_INFORMATION структур, по одной для каждого процессора, установленного в системе.

SystemInterruptInformation

Непрозрачная структура SYSTEM_INTERRUPT_INFORMATION , которую можно использовать для создания непредсказуемого начального значения для генератора случайных чисел. Вместо этого используйте функцию CryptGenRandom .

SystemExceptionInformation

Непрозрачная структура SYSTEM_EXCEPTION_INFORMATION , которую можно использовать для создания непредсказуемого начального значения для генератора случайных чисел. Вместо этого используйте функцию CryptGenRandom .

SystemRegistryQuotaInformation

Структура SYSTEM_REGISTRY_QUOTA_INFORMATION .

SystemLookasideInformation

Непрозрачная структура SYSTEM_LOOKASIDE_INFORMATION , которую можно использовать для создания непредсказуемого начального значения для генератора случайных чисел. Вместо этого используйте функцию CryptGenRandom .

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_PERFORMANCE_INFORMATION

Если параметр SystemInformationClass имеет значение SystemPerformanceInformation, буфер, на который указывает параметр SystemInformation , должен быть достаточно большим, чтобы вместить непрозрачную структуру SYSTEM_PERFORMANCE_INFORMATION для использования при создании непредсказуемого начального значения для генератора случайных чисел. Для этой цели структура имеет следующий макет:

typedef struct _SYSTEM_PERFORMANCE_INFORMATION {
    BYTE Reserved1[312];
} SYSTEM_PERFORMANCE_INFORMATION;

Отдельные элементы структуры зарезервированы для внутреннего использования операционной системой.

Вместо этого используйте функцию CryptGenRandom для создания криптографически случайных данных.

SYSTEM_TIMEOFDAY_INFORMATION

Если параметр SystemInformationClass имеет значение SystemTimeOfDayInformation, буфер, на который указывает параметр SystemInformation , должен быть достаточно большим для хранения непрозрачной структуры SYSTEM_TIMEOFDAY_INFORMATION для использования при создании непредсказуемого начального значения для генератора случайных чисел. Для этой цели структура имеет следующий макет:

typedef struct _SYSTEM_TIMEOFDAY_INFORMATION {
    BYTE Reserved1[48];
} SYSTEM_TIMEOFDAY_INFORMATION;

Отдельные элементы структуры зарезервированы для внутреннего использования операционной системой.

Вместо этого используйте функцию CryptGenRandom для создания криптографически случайных данных.

SYSTEM_PROCESS_INFORMATION

Если параметр SystemInformationClass имеет значение SystemProcessInformation, буфер, на который указывает параметр SystemInformation , должен быть достаточно большим, чтобы вместить массив, содержащий столько SYSTEM_PROCESS_INFORMATION структур, сколько в системе выполняется процессов. Каждая структура имеет следующий макет:

typedef struct _SYSTEM_PROCESS_INFORMATION {
    ULONG NextEntryOffset;
    ULONG NumberOfThreads;
    BYTE Reserved1[48];
    PVOID Reserved2[3];
    HANDLE UniqueProcessId;
    PVOID Reserved3;
    ULONG HandleCount;
    BYTE Reserved4[4];
    PVOID Reserved5[11];
    SIZE_T PeakPagefileUsage;
    SIZE_T PrivatePageCount;
    LARGE_INTEGER Reserved6[6];
} SYSTEM_PROCESS_INFORMATION;

Элемент NumberOfThreads содержит общее количество текущих выполняемых потоков в процессе.

Член HandleCount содержит общее количество дескрипторов, используемых рассматриваемым процессом; Вместо этого используйте GetProcessHandleCount , чтобы получить эти сведения.

Член PeakPagefileUsage содержит максимальное количество байтов хранилища файлов подкачки, используемого процессом, а член PrivatePageCount — количество страниц памяти, выделенных для использования этого процесса.

Эти сведения также можно получить с помощью функции GetProcessMemoryInfo или класса Win32_Process .

Остальные элементы структуры зарезервированы для внутреннего использования операционной системой.

SYSTEM_PROCESSOR_PERFORMANCE_INFORMATION

Если параметр SystemInformationClass имеет значение SystemProcessorPerformanceInformation, буфер, на который указывает параметр SystemInformation , должен быть достаточно большим для хранения массива , содержащего столько SYSTEM_PROCESS_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 содержит время простоя системы в 1/100 наносекунд.

Элемент KernelTime содержит время, затраченное системой на выполнение в режиме ядра (включая все потоки во всех процессах, на всех процессорах), в 1/100 наносекунд.

Элемент UserTime содержит время, затраченное системой на выполнение в пользовательском режиме (включая все потоки во всех процессах, на всех процессорах), в 1/100 наносекунд.

Вместо этого используйте GetSystemTimes , чтобы получить эти сведения.

SYSTEM_INTERRUPT_INFORMATION

Если параметр SystemInformationClass имеет значение SystemInterruptInformation, буфер, на который указывает параметр SystemInformation , должен быть достаточно большим для хранения массива, содержащего столько непрозрачных структур SYSTEM_INTERRUPT_INFORMATION , сколько процессоров (ЦП) установлено в системе. Каждую структуру или массив в целом можно использовать для создания непредсказуемого начального значения для генератора случайных чисел. Для этой цели структура имеет следующий макет:

typedef struct _SYSTEM_INTERRUPT_INFORMATION {
    BYTE Reserved1[24];
} SYSTEM_INTERRUPT_INFORMATION;

Отдельные элементы структуры зарезервированы для внутреннего использования операционной системой.

Вместо этого используйте функцию CryptGenRandom для создания криптографически случайных данных.

SYSTEM_EXCEPTION_INFORMATION

Если параметр SystemInformationClass имеет значение SystemExceptionInformation, буфер, на который указывает параметр SystemInformation , должен быть достаточно большим, чтобы вместить непрозрачную структуру SYSTEM_EXCEPTION_INFORMATION для использования при создании непредсказуемого начального значения для генератора случайных чисел. Для этой цели структура имеет следующий макет:

typedef struct _SYSTEM_EXCEPTION_INFORMATION {
    BYTE Reserved1[16];
} SYSTEM_EXCEPTION_INFORMATION;

Отдельные элементы структуры зарезервированы для внутреннего использования операционной системой.

Вместо этого используйте функцию CryptGenRandom для создания криптографически случайных данных.

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_LOOKASIDE_INFORMATION

Если параметр SystemInformationClass имеет значение SystemLookasideInformation, буфер, на который указывает параметр SystemInformation , должен быть достаточно большим, чтобы вместить непрозрачную SYSTEM_LOOKASIDE_INFORMATION структуру для использования при создании непредсказуемого начального значения для генератора случайных чисел. Для этой цели структура имеет следующий макет:

typedef struct _SYSTEM_LOOKASIDE_INFORMATION {
    BYTE Reserved1[32];
} SYSTEM_LOOKASIDE_INFORMATION;

Отдельные элементы структуры зарезервированы для внутреннего использования операционной системой.

Вместо этого используйте функцию CryptGenRandom для создания криптографически случайных данных.

SystemInformationLength [in]

Размер буфера, на который указывает параметр SystemInformation , в байтах.

ReturnLength [out, optional]

Необязательный указатель на расположение, в котором функция записывает фактический размер запрошенной информации. Если этот размер меньше или равен параметру SystemInformationLength , функция копирует сведения в буфер SystemInformation ; В противном случае он возвращает код ошибки NTSTATUS и возвращает в ReturnLength размер буфера, необходимый для получения запрошенной информации.

Возвращаемое значение

Возвращает код ошибки или успешного выполнения NTSTATUS.

Формы и значение кодов ошибок NTSTATUS перечислены в файле заголовка Ntstatus.h, доступном в DDK, и описаны в документации по DDK.

Комментарии

Функция ZwQuerySystemInformation и возвращаемые ею структуры являются внутренними для операционной системы и могут изменяться из одного выпуска Windows в другой. Для обеспечения совместимости приложения лучше использовать альтернативные функции, упомянутые ранее.

Если вы используете ZwQuerySystemInformation, получите доступ к функции через динамическое связывание во время выполнения. Это дает коду возможность корректно реагировать, если функция была изменена или удалена из операционной системы. Однако изменения подписи могут быть недоступны для обнаружения.

У этой функции нет связанной библиотеки импорта. Для динамического связывания с Ntdll.dll необходимо использовать функции LoadLibrary и GetProcAddress .

Требования

Требование Значение
DLL
Ntdll.dll

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

GetSystemInfo

GetProcessHandleCount

GetProcessMemoryInfo

GetSystemTimes

GetSystemRegistryQuota