ZwQuerySystemInformation-Funktion

[ZwQuerySystemInformation ist ab Windows 8 nicht mehr verfügbar. Verwenden Sie stattdessen die in diesem Thema aufgeführten alternativen Funktionen.]

Ruft die angegebenen Systeminformationen ab.

Syntax

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

Parameter

SystemInformationClass [in]

Der Typ der abzurufenden Systeminformationen. Dieser Parameter kann einer der folgenden Werte aus dem SYSTEM_INFORMATION_CLASS Enumerationstyp sein.

SystemBasicInformation

Die Anzahl der Prozessoren im System in einer SYSTEM_BASIC_INFORMATION-Struktur . Verwenden Sie stattdessen die GetSystemInfo-Funktion .

SystemPerformanceInformation

Eine undurchsichtige SYSTEM_PERFORMANCE_INFORMATION Struktur, die verwendet werden kann, um einen unvorhersehbaren Seed für einen Zufallszahlengenerator zu generieren. Verwenden Sie stattdessen die Funktion CryptGenRandom .

SystemTimeOfDayInformation

Eine undurchsichtige SYSTEM_TIMEOFDAY_INFORMATION Struktur, die verwendet werden kann, um einen unvorhersehbaren Seed für einen Zufallszahlengenerator zu generieren. Verwenden Sie stattdessen die Funktion CryptGenRandom .

SystemProcessInformation

Ein Array von SYSTEM_PROCESS_INFORMATION Strukturen, eines für jeden Prozess, der im System ausgeführt wird.

Diese Strukturen enthalten Informationen über die Ressourcennutzung der einzelnen Prozesse, einschließlich der Anzahl der vom Prozess verwendeten Handles, der Spitzenauslastung der Seitendatei und der Anzahl der Speicherseiten, die der Prozess zugewiesen hat.

SystemProcessorPerformanceInformation

Ein Array von SYSTEM_PROCESSOR_PERFORMANCE_INFORMATION Strukturen, eines für jeden prozessor, der im System installiert ist.

SystemInterruptInformation

Eine undurchsichtige SYSTEM_INTERRUPT_INFORMATION Struktur, die verwendet werden kann, um einen unvorhersehbaren Seed für einen Zufallszahlengenerator zu generieren. Verwenden Sie stattdessen die Funktion CryptGenRandom .

SystemExceptionInformation

Eine undurchsichtige SYSTEM_EXCEPTION_INFORMATION Struktur, die verwendet werden kann, um einen unvorhersehbaren Seed für einen Zufallszahlengenerator zu generieren. Verwenden Sie stattdessen die Funktion CryptGenRandom .

SystemRegistryQuotaInformation

Eine SYSTEM_REGISTRY_QUOTA_INFORMATION-Struktur .

SystemLookasideInformation

Eine undurchsichtige SYSTEM_LOOKASIDE_INFORMATION Struktur, die verwendet werden kann, um einen unvorhersehbaren Seed für einen Zufallszahlengenerator zu generieren. Verwenden Sie stattdessen die Funktion CryptGenRandom .

SystemInformation [ein, aus]

Ein Zeiger auf einen Puffer, der die angeforderten Informationen empfängt. Die Größe und Struktur dieser Informationen hängt von dem Wert des Parameters SystemInformationClass ab, wie in der folgenden Tabelle angegeben.

SYSTEM_BASIC_INFORMATION

Wenn der SystemInformationClass-ParameterSystemBasicInformation ist, sollte der Puffer, auf den der Parameter SystemInformation verweist, groß genug sein, um eine einzelne SYSTEM_BASIC_INFORMATION Struktur mit dem folgenden Layout aufzunehmen:

typedef struct _SYSTEM_BASIC_INFORMATION {
    BYTE Reserved1[24];
    PVOID Reserved2[4];
    CCHAR NumberOfProcessors;
} SYSTEM_BASIC_INFORMATION;

Das NumberOfProcessors-Element enthält die Anzahl der im System vorhandenen Prozessoren. Verwenden Sie stattdessen GetSystemInfo , um diese Informationen abzurufen.

Die anderen Elemente der Struktur sind für die interne Verwendung durch das Betriebssystem reserviert.

SYSTEM_PERFORMANCE_INFORMATION

Wenn der SystemInformationClass-ParameterSystemPerformanceInformation ist, sollte der Puffer, auf den der Parameter SystemInformation verweist, groß genug sein, um eine undurchsichtige SYSTEM_PERFORMANCE_INFORMATION Struktur für die Verwendung bei der Generierung eines unvorhersehbaren Seed für einen Zufallszahlengenerator zu enthalten. Zu diesem Zweck hat die Struktur das folgende Layout:

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

Einzelne Elemente der Struktur sind für die interne Verwendung durch das Betriebssystem reserviert.

Verwenden Sie stattdessen die Funktion CryptGenRandom , um kryptografisch zufällige Daten zu generieren.

SYSTEM_TIMEOFDAY_INFORMATION

Wenn der SystemInformationClass-ParameterSystemTimeOfDayInformation ist, sollte der Puffer, auf den der Parameter SystemInformation verweist, groß genug sein, um eine undurchsichtige SYSTEM_TIMEOFDAY_INFORMATION Struktur für die Verwendung bei der Generierung eines unvorhersehbaren Seeds für einen Zufallszahlengenerator zu enthalten. Zu diesem Zweck hat die Struktur das folgende Layout:

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

Einzelne Elemente der Struktur sind für die interne Verwendung durch das Betriebssystem reserviert.

Verwenden Sie stattdessen die Funktion CryptGenRandom , um kryptografisch zufällige Daten zu generieren.

SYSTEM_PROCESS_INFORMATION

Wenn der Parameter SystemInformationClassSystemProcessInformation lautet, sollte der Puffer, auf den der Parameter SystemInformation verweist, groß genug sein, um ein Array aufzunehmen, das so viele SYSTEM_PROCESS_INFORMATION Strukturen enthält, wie prozesse im System ausgeführt werden. Jede Struktur hat das folgende Layout:

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;

Das NumberOfThreads-Element enthält die Gesamtzahl der derzeit ausgeführten Threads im Prozess.

Das HandleCount-Element enthält die Gesamtzahl der Handles, die vom betreffenden Prozess verwendet werden. Verwenden Sie GetProcessHandleCount , um diese Informationen stattdessen abzurufen.

Das PeakPagefileUsage-Element enthält die maximale Anzahl von Bytes des vom Prozess verwendeten Seitendateispeichers, und das PrivatePageCount-Element enthält die Anzahl der Speicherseiten, die für die Verwendung dieses Prozesses zugewiesen wurden.

Sie können diese Informationen auch mit der GetProcessMemoryInfo-Funktion oder der Win32_Process-Klasse abrufen.

Die anderen Elemente der Struktur sind für die interne Verwendung durch das Betriebssystem reserviert.

SYSTEM_PROCESSOR_PERFORMANCE_INFORMATION

Wenn der SystemInformationClass-ParameterSystemProcessorPerformanceInformation ist, sollte der Puffer, auf den der Parameter SystemInformation verweist, groß genug sein, um ein Array aufzunehmen, das so viele SYSTEM_PROCESS_INFORMATION Strukturen enthält, wie prozessoren (CPUs) im System installiert sind. Jede Struktur hat das folgende Layout:

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;

Das IdleTime-Element enthält die Zeitspanne, die das System im Leerlauf hatte, in 1/100Stel einer Nanosekunde.

Das KernelTime-Element enthält die Zeit, die das System für die Ausführung im Kernelmodus (einschließlich aller Threads in allen Prozessen, auf allen Prozessoren) in 1/100Stel einer Nanosekunde aufgewendet hat.

Der UserTime-Member enthält die Zeit, die das System für die Ausführung im Benutzermodus (einschließlich aller Threads in allen Prozessen, auf allen Prozessoren) in 1/100Stel einer Nanosekunde aufgewendet hat.

Verwenden Sie stattdessen GetSystemTimes , um diese Informationen abzurufen.

SYSTEM_INTERRUPT_INFORMATION

Wenn der SystemInformationClass-ParameterSystemInterruptInformation ist, sollte der Puffer, auf den der Parameter SystemInformation verweist, groß genug sein, um ein Array aufzunehmen, das so viele undurchsichtige SYSTEM_INTERRUPT_INFORMATION Strukturen enthält, wie Prozessoren (CPUs) auf dem System installiert sind. Jede Struktur oder das Array als Ganzes kann verwendet werden, um einen unvorhersehbaren Seed für einen Zufallszahlengenerator zu generieren. Zu diesem Zweck hat die Struktur das folgende Layout:

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

Einzelne Elemente der Struktur sind für die interne Verwendung durch das Betriebssystem reserviert.

Verwenden Sie stattdessen die Funktion CryptGenRandom , um kryptografisch zufällige Daten zu generieren.

SYSTEM_EXCEPTION_INFORMATION

Wenn der SystemInformationClass-ParameterSystemExceptionInformation Ist, sollte der Puffer, auf den der Parameter SystemInformation verweist, groß genug sein, um eine undurchsichtige SYSTEM_EXCEPTION_INFORMATION Struktur für die Generierung eines unvorhersehbaren Seed für einen Zufallszahlengenerator zu enthalten. Zu diesem Zweck hat die Struktur das folgende Layout:

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

Einzelne Elemente der Struktur sind für die interne Verwendung durch das Betriebssystem reserviert.

Verwenden Sie stattdessen die Funktion CryptGenRandom , um kryptografisch zufällige Daten zu generieren.

SYSTEM_REGISTRY_QUOTA_INFORMATION

Wenn der SystemInformationClass-ParameterSystemRegistryQuotaInformation ist, sollte der Puffer, auf den der Parameter SystemInformation verweist, groß genug sein, um eine einzelne SYSTEM_REGISTRY_QUOTA_INFORMATION Struktur mit dem folgenden Layout aufzunehmen:

typedef struct _SYSTEM_REGISTRY_QUOTA_INFORMATION {
    ULONG RegistryQuotaAllowed;
    ULONG RegistryQuotaUsed;
    PVOID Reserved1;
} SYSTEM_REGISTRY_QUOTA_INFORMATION;

Das RegistryQuotaAllowed-Element enthält die maximale Größe in Bytes, die die Registrierung auf diesem System erreichen kann.

Das RegistryQuotaUsed-Element enthält die aktuelle Größe der Registrierung in Bytes.

Verwenden Sie stattdessen GetSystemRegistryQuota , um diese Informationen abzurufen.

Das andere Element der Struktur ist für die interne Verwendung durch das Betriebssystem reserviert.

SYSTEM_LOOKASIDE_INFORMATION

Wenn der SystemInformationClass-ParameterSystemLookasideInformation ist, sollte der Puffer, auf den der Parameter SystemInformation verweist, groß genug sein, um eine undurchsichtige SYSTEM_LOOKASIDE_INFORMATION Struktur für die Verwendung bei der Generierung eines unvorhersehbaren Seeds für einen Zufallszahlengenerator zu enthalten. Zu diesem Zweck hat die Struktur das folgende Layout:

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

Einzelne Elemente der Struktur sind für die interne Verwendung durch das Betriebssystem reserviert.

Verwenden Sie stattdessen die Funktion CryptGenRandom , um kryptografisch zufällige Daten zu generieren.

SystemInformationLength [in]

Die Größe des Puffers, auf den der SystemInformation-Parameter in Bytes verweist.

ReturnLength [out, optional]

Ein optionaler Zeiger auf eine Position, an der die Funktion die tatsächliche Größe der angeforderten Informationen schreibt. Wenn diese Größe kleiner oder gleich dem SystemInformationLength-Parameter ist, kopiert die Funktion die Informationen in den SystemInformation-Puffer . Andernfalls wird ein NTSTATUS-Fehlercode zurückgegeben und in ReturnLength die Größe des Puffers zurückgegeben, die zum Empfangen der angeforderten Informationen erforderlich ist.

Rückgabewert

Gibt einen NTSTATUS-Erfolgs- oder Fehlercode zurück.

Die Formen und die Bedeutung von NTSTATUS-Fehlercodes sind in der Im DDK verfügbaren Ntstatus.h-Headerdatei aufgeführt und in der DDK-Dokumentation beschrieben.

Bemerkungen

Die ZwQuerySystemInformation-Funktion und die zurückgegebenen Strukturen sind für das Betriebssystem intern und können von einer Windows-Version zu einer anderen geändert werden. Um die Kompatibilität Ihrer Anwendung zu gewährleisten, ist es besser, stattdessen die zuvor erwähnten alternativen Funktionen zu verwenden.

Wenn Sie ZwQuerySystemInformation verwenden, greifen Sie auf die Funktion über dynamische Laufzeitverknüpfung zu. Dies gibt Ihrem Code die Möglichkeit, ordnungsgemäß zu reagieren, wenn die Funktion geändert oder aus dem Betriebssystem entfernt wurde. Signaturänderungen sind jedoch möglicherweise nicht erkennbar.

Diese Funktion verfügt über keine zugeordnete Importbibliothek. Sie müssen die Funktionen LoadLibrary und GetProcAddress verwenden, um dynamisch mit Ntdll.dll zu verknüpfen.

Anforderungen

Anforderung Wert
DLL
Ntdll.dll

Siehe auch

GetSystemInfo

GetProcessHandleCount

GetProcessMemoryInfo

GetSystemTimes

GetSystemRegistryQuota