Freigeben über


NtQuerySystemInformation-Funktion (winternl.h)

[NtQuerySystemInformation kann in zukünftigen Versionen von Windows geändert oder nicht verfügbar sein. Anwendungen sollten die in diesem Thema aufgeführten alternativen Funktionen verwenden.]

Ruft die angegebenen Systeminformationen ab.

Syntax

__kernel_entry NTSTATUS NtQuerySystemInformation(
  [in]            SYSTEM_INFORMATION_CLASS SystemInformationClass,
  [in, out]       PVOID                    SystemInformation,
  [in]            ULONG                    SystemInformationLength,
  [out, optional] PULONG                   ReturnLength
);

Die Parameter

[in] SystemInformationClass

Einer der in SYSTEM_INFORMATION_CLASS aufgelisteten Werte, die die Art der abzurufenden Systeminformationen angeben. Dazu gehören die folgenden Werte.

SystemBasicInformation

Gibt die Anzahl der Prozessoren im System in einer SYSTEM_BASIC_INFORMATION-Struktur zurück. Verwenden Sie stattdessen die GetSystemInfo-Funktion .

SystemCodeIntegrityInformation

Gibt eine SYSTEM_CODEINTEGRITY_INFORMATION Struktur zurück, die verwendet werden kann, um die optionen zu bestimmen, die von der Codeintegrität im System erzwungen werden.

SystemExceptionInformation

Gibt eine undurchsichtige SYSTEM_EXCEPTION_INFORMATION Struktur zurück, die verwendet werden kann, um einen unvorhersehbaren Ausgangswert für einen Zufallszahlengenerator zu generieren. Verwenden Sie stattdessen die CryptGenRandom-Funktion .

SystemInterruptInformation

Gibt eine undurchsichtige SYSTEM_INTERRUPT_INFORMATION Struktur zurück, die verwendet werden kann, um einen unvorhersehbaren Ausgangswert für einen Zufallszahlengenerator zu generieren. Verwenden Sie stattdessen die CryptGenRandom-Funktion .

SystemKernelVaShadowInformation

Gibt eine SYSTEM_KERNEL_VA_SHADOW_INFORMATION Struktur zurück, die verwendet werden kann, um die Spekulationssteuerungseinstellungen für Angriffe zu bestimmen, die nicht autorisierte Datencachelasten umfassen (z. B. CVE-2017-5754).

SystemLeapSecondInformation

Gibt eine undurchsichtige SYSTEM_LEAP_SECOND_INFORMATION Struktur zurück, mit der Schaltsekunden systemweit aktiviert oder deaktiviert werden können. Diese Einstellung wird auch nach einem Neustart des Systems beibehalten.

SystemLookasideInformation

Gibt eine undurchsichtige SYSTEM_LOOKASIDE_INFORMATION Struktur zurück, die verwendet werden kann, um einen unvorhersehbaren Ausgangswert für einen Zufallszahlengenerator zu generieren. Verwenden Sie stattdessen die CryptGenRandom-Funktion .

SystemPerformanceInformation

Gibt eine undurchsichtige SYSTEM_PERFORMANCE_INFORMATION Struktur zurück, die verwendet werden kann, um einen unvorhersehbaren Ausgangswert für einen Zufallszahlengenerator zu generieren. Verwenden Sie stattdessen die CryptGenRandom-Funktion .

SystemPolicyInformation

Gibt Richtlinieninformationen in einer SYSTEM_POLICY_INFORMATION Struktur zurück. Verwenden Sie stattdessen die SLGetWindowsInformation-Funktion , um Richtlinieninformationen abzurufen.

SystemProcessInformation

Gibt ein Array von SYSTEM_PROCESS_INFORMATION Strukturen zurück, eines für jeden Prozess, der im System ausgeführt wird.

Diese Strukturen enthalten Informationen zur Ressourcennutzung jedes Prozesses, einschließlich der Anzahl der Threads und Handles, die vom Prozess verwendet werden, die Spitzenauslastung der Seitendatei und die Anzahl der Speicherseiten, die der Prozess zugewiesen hat.

Hinweis

Wenn möglich, sollte SystemBasicProcessInformation stattdessen verwendet werden, da es schneller ist, weniger Arbeitsspeicher verbraucht und keine Zeitdauerdaten synchronisiert werden muss (wodurch Prozessorreaktivierungen eliminiert werden).

SystemBasicProcessInformation

Verfügbar ab Windows 11, Version 26100.4770

Gibt ein Array von SYSTEM_BASICPROCESS_INFORMATION Strukturen zurück, eines für jeden Prozess, der im System ausgeführt wird.

Diese Strukturen enthalten grundlegende Informationen zu jedem Prozess, einschließlich des Prozessnamens, seiner Prozess-ID und einer eindeutigen Sequenznummer.

Hinweis

SYSTEM_BASICPROCESS_INFORMATION ist mit SYSTEM_PROCESS_INFORMATION identisch, mit Ausnahme des SequenceNumber-Elements , bei dem es sich um einen eindeutigen Wert handelt, der jedem Prozess zugewiesen ist und verwendet wird, um die UniqueProcessId-Wiederverwendung (anstelle von "CreateTime") zu erkennen.

typedef struct _SYSTEM_BASICPROCESS_INFORMATION {
    ULONG NextEntryOffset;
    HANDLE UniqueProcessId;
    HANDLE InheritedFromUniqueProcessId;
    ULONG64 SequenceNumber;
    UNICODE_STRING ImageName;
} SYSTEM_BASICPROCESS_INFORMATION, *PSYSTEM_BASICPROCESS_INFORMATION;

Die Member sind mit den Elementen in SYSTEM_PROCESS_INFORMATION identisch, mit Ausnahme von SequenceNumber, einer eindeutigen Nummer, die jedem Prozess zugewiesen wird, der verwendet werden kann, um uniqueProcessId-Wiederverwendung anstelle von "CreateTime" zu erkennen.

SystemProcessorPerformanceInformation

Gibt ein Array von SYSTEM_PROCESSOR_PERFORMANCE_INFORMATION Strukturen zurück, eines für jeden Prozessor, der im System installiert ist.

SystemQueryPerformanceCounterInformation

Gibt eine SYSTEM_QUERY_PERFORMANCE_COUNTER_INFORMATION Struktur zurück, die verwendet werden kann, um zu bestimmen, ob für das System ein Kernelübergang erforderlich ist, um die Leistungsindikatorinformationen mit hoher Auflösung über einen QueryPerformanceCounter-Funktionsaufruf abzurufen.

SystemRegistryQuotaInformation

Gibt eine SYSTEM_REGISTRY_QUOTA_INFORMATION Struktur zurück.

SystemSpeculationControlInformation

Gibt eine SYSTEM_SPECULATION_CONTROL_INFORMATION Struktur zurück, die verwendet werden kann, um die Spekulationssteuerungseinstellungen für Angriffe mit Verzweigungszieleinfügung (z. B. CVE-2017-5715) zu bestimmen.

Jede SYSTEM_SPECULATION_CONTROL_INFORMATION Struktur weist das folgende Layout auf:

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;

Flag Bedeutung
BpbEnabled Wenn WAHR, werden Spekulationssteuerungsfeatures unterstützt und aktiviert.
BpbDisabledSystemPolicy Wenn WAHR, werden aufgrund der Systemrichtlinie Spekulationssteuerungsfeatures deaktiviert.
BpbDisabledNoHardwareSupport Wenn WAHR, werden Spekulationssteuerungsfeatures aufgrund fehlender Hardwareunterstützung deaktiviert.
SpecCtrlEnumerated Wenn WAHR, wird der i386/AMD64-IA32_SPEC_CTRL MSR nach Hardware aufgezählt.
SpecCmdEnumerated Wenn WAHR, wird der i386/AMD64-IA32_SPEC_CMD MSR von Hardware aufgezählt.
IbrsPresent Wenn WAHR, wird der i386/AMD64 IBRS MSR als vorhanden behandelt.
StibpPresent Wenn WAHR, ist der i386/AMD64 STIBP MSR vorhanden.
SmepPresent Wenn WAHR, ist das SMEP-Feature vorhanden und aktiviert.
SpeculativeStoreBypassDisableAvailable Wenn TRUE, ist die Betriebssystemunterstützung für SSBD vorhanden.
SpeculativeStoreBypassDisableSupported Wenn TRUE, ist die Hardwareunterstützung für SSBD vorhanden.
SpeculativeStoreBypassDisabledSystemWide Wenn TRUE, wird SSBD systemweit festgelegt.
SpeculativeStoreBypassDisabledKernel Wenn WAHR, wird SSBD im Kernel festgelegt.
SpeculativeStoreBypassDisableRequired Wenn WAHR, ist SSBD erforderlich, um Spekulationsangriffe zu verhindern.
BpbDisabledKernelToUser Wenn WAHR, wird die Vorhersage für indirekte Verzweigungen nicht für jeden Kernel zum Benutzerübergang geleert.
SpecCtrlRetpolineEnabled Wenn TRUE, ist Retpoline für kompatible Treiber aktiviert.
SpecCtrlImportOptimizationEnabled Wenn TRUE, ist die Importoptimierung aktiviert.
Reserviert Reservierte Flags.
 

SystemTimeOfDayInformation

Gibt eine undurchsichtige SYSTEM_TIMEOFDAY_INFORMATION Struktur zurück, die verwendet werden kann, um einen unvorhersehbaren Ausgangswert für einen Zufallszahlengenerator zu generieren. Verwenden Sie stattdessen die CryptGenRandom-Funktion .

[in, out] SystemInformation

Ein Zeiger auf einen Puffer, der die angeforderten Informationen empfängt. Die Größe und Struktur dieser Informationen variiert je nach Dem Wert des SystemInformationClass-Parameters :

SYSTEM_BASIC_INFORMATION

Wenn der Parameter "SystemInformationClass" "SystemBasicInformation" lautet, sollte der puffer, auf den der Parameter "SystemInformation" verweist, groß genug sein, um eine einzelne SYSTEM_BASIC_INFORMATION Struktur mit dem folgenden Layout zu enthalten:

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

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

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

SYSTEM_CODEINTEGRITY_INFORMATION

Wenn der Parameter "SystemInformationClass" "SystemCodeIntegrityInformation" lautet, sollte der puffer, auf den der Parameter "SystemInformation" verweist, groß genug sein, um eine einzelne SYSTEM_CODEINTEGRITY_INFORMATION Struktur mit dem folgenden Layout zu enthalten:

typedef struct _SYSTEM_CODEINTEGRITY_INFORMATION {
    ULONG  Length;
    ULONG  CodeIntegrityOptions;
} SYSTEM_CODEINTEGRITY_INFORMATION, *PSYSTEM_CODEINTEGRITY_INFORMATION;

Das Length-Element enthält die Größe der Struktur in Byte. Dies muss vom Aufrufer festgelegt werden.

Das CodeIntegrityOptions-Element enthält eine Bitmaske zum Identifizieren von Codeintegritätsoptionen.

Wert Bedeutung
0x01 CODEINTEGRITY_OPTION_ENABLED Die Erzwingung der Codeintegrität im Kernelmodus ist aktiviert.
0x02 CODEINTEGRITY_OPTION_TESTSIGN Testsignierter Inhalt ist durch Codeintegrität zulässig.
0x04 CODEINTEGRITY_OPTION_UMCI_ENABLED Die Erzwingung der Codeintegrität des Benutzermodus ist aktiviert.
0x08 CODEINTEGRITY_OPTION_UMCI_AUDITMODE_ENABLED Die Erzwingung der Codeintegrität des Benutzermodus ist im Überwachungsmodus aktiviert. Ausführbare Dateien dürfen ausgeführt/geladen werden; Überwachungsereignisse werden jedoch aufgezeichnet.
0x10 CODEINTEGRITY_OPTION_UMCI_EXCLUSIONPATHS_ENABLED Benutzermodus-Binärdateien, die von bestimmten Pfaden ausgeführt werden, dürfen auch dann ausgeführt werden, wenn codeintegritätsprüfungen fehlschlagen.

Ausschlusspfade werden im folgenden Registrierungsschlüssel im REG_MULTI_SZ Format aufgeführt:

  • Schlüssel: HKLM\SYSTEM\CurrentControlSet\Control\CI\TRSData
  • Wert: TestPath
Pfade, die diesem Schlüssel hinzugefügt werden, sollten in einem von zwei Formaten vorliegen:
  • Pfad (absolut oder relativ): \Programme\TestAutomationPath
  • Binär (spezifisch): \Program Files\TestAutomationPath\mybinary.exe
Die folgenden Pfade sind eingeschränkt und können nicht als Ausschluss hinzugefügt werden:
  • \
  • \Fenster
  • \Windows\System32
  • \Programme
Integrierte Pfadausschlüsse: Die folgenden Pfade werden standardmäßig ausgeschlossen. Sie müssen diese nicht speziell zu Pfadausschlüssen hinzufügen. Dies gilt nur für ARM (Windows-Runtime).
  • \Programme\WTT
  • \Programme (x86)\WTT
  • \WTT\JobsWorkingDir
  • \Programme\Allgemeine Dateien\Modellentwurfsumgebung
  • \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 Der Build der Codeintegrität stammt aus einem Testbuild.
0x40 CODEINTEGRITY_OPTION_PREPRODUCTION_BUILD Der Build der Codeintegrität stammt aus einem Vorproduktionsbuild.
0x80 CODEINTEGRITY_OPTION_DEBUGMODE_ENABLED Der Kerneldebugger ist angefügt, und die Codeintegrität kann das Laden von nicht signiertem Code zulassen.
0x100 CODEINTEGRITY_OPTION_FLIGHT_BUILD Der Build der Codeintegrität stammt aus einem Flight-Build.
0x200 CODEINTEGRITY_OPTION_FLIGHTING_ENABLED Flight-signierter Inhalt ist durch Codeintegrität zulässig. Von der Microsoft Development-Stammzertifizierungsstelle 2014 signierte Flight-Inhalte sind Inhalte.
0x400 CODEINTEGRITY_OPTION_HVCI_KMCI_ENABLED Hypervisor erzwungene Codeintegrität ist für Kernelmoduskomponenten aktiviert.
0x800 CODEINTEGRITY_OPTION_HVCI_KMCI_AUDITMODE_ENABLED Hypervisor erzwungene Codeintegrität ist im Überwachungsmodus aktiviert. Überwachungsereignisse werden für Kernelmoduskomponenten aufgezeichnet, die nicht mit HVCI kompatibel sind. Dieses Bit kann festgelegt werden, ob CODEINTEGRITY_OPTION_HVCI_KMCI_ENABLED festgelegt ist oder nicht.
0x1000 CODEINTEGRITY_OPTION_HVCI_KMCI_STRICTMODE_ENABLED Hypervisor erzwungene Codeintegrität ist für Kernelmoduskomponenten aktiviert, aber im strikten Modus.
0x2000 CODEINTEGRITY_OPTION_HVCI_IUM_ENABLED Hypervisor erzwungene Codeintegrität ist mit der Erzwingung der Komponentensignierung im isolierten Benutzermodus aktiviert.
 

SYSTEM_EXCEPTION_INFORMATION

Wenn der Parameter "SystemInformationClass" SystemExceptionInformation lautet, sollte der puffer, auf den der Parameter "SystemInformation" verweist, groß genug sein, um eine undurchsichtige SYSTEM_EXCEPTION_INFORMATION Struktur zur Verwendung beim Generieren eines unvorhersehbaren Seeds für einen Zufallszahlengenerator zu enthalten. Zu diesem Zweck weist die Struktur das folgende Layout auf:

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

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

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

SYSTEM_INTERRUPT_INFORMATION

Wenn der Parameter "SystemInformationClass" "SystemInterruptInformation" lautet, sollte der puffer, auf den der SystemInformation-Parameter verweist, groß genug sein, um ein Array zu enthalten, 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 Ausgangswert für einen Zufallszahlengenerator zu generieren. Zu diesem Zweck weist die Struktur das folgende Layout auf:

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

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

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

SYSTEM_KERNEL_VA_SHADOW_INFORMATION

Wenn der Parameter "SystemInformationClass" "SystemKernelVaShadowInformation" lautet, sollte der puffer, auf den der Parameter "SystemInformation" verweist, groß genug sein, um eine einzelne SYSTEM_KERNEL_VA_SHADOW_INFORMATION Struktur mit dem folgenden Layout zu enthalten:

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;

Der KvaShadowEnabled gibt an, ob die Schattenung aktiviert ist.

Der KvaShadowUserGlobal gibt an, dass der Benutzer/global aktiviert ist.

Die KvaShadowPcid gibt an, ob PCID aktiviert ist.

Die KvaShadowInvpcid gibt an, ob PCID aktiviert ist und ob INVPCID verwendet wird.

Der KvaShadowRequired gibt an, ob die Hardware für CVE-2017-5754 anfällig ist.

Die KvaShadowRequiredAvailable gibt an, ob das Feld "KvaShadowRequired " vom Betriebssystem unterstützt wird.

Der InvalidPteBit gibt das physische Adressbit an, das für ungültige Seitentabelleneinträge oder null verwendet wird, wenn nicht festgelegt.

Der L1DataCacheFlushSupported gibt an, ob die Hardware L1-Datencache-Leeren unterstützt.

Das L1TerminalFaultMitigationPresent gibt an, ob das Betriebssystem den L1-Terminalfehler (CVE-2018-3620) unterstützt.

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

SYSTEM_LEAP_SECOND_INFORMATION

Wenn der Parameter "SystemInformationClass" systemLeapSecondInformation lautet, sollte der puffer, auf den der Parameter "SystemInformation" verweist, groß genug sein, um eine undurchsichtige SYSTEM_LEAP_SECOND_INFORMATION Struktur für die Aktivierung oder Deaktivierung von Schalt sekunden systemweit zu verwenden. Diese Einstellung wird auch nach einem Neustart des Systems beibehalten. Zu diesem Zweck weist die Struktur das folgende Layout auf:

typedef struct _SYSTEM_LEAP_SECOND_INFORMATION {
    BOOLEAN Enabled;
    ULONG Flags;
} SYSTEM_LEAP_SECOND_INFORMATION

Das Feld "Flags " ist für die zukünftige Verwendung reserviert.

SYSTEM_LOOKASIDE_INFORMATION

Wenn der Parameter "SystemInformationClass" SystemLookasideInformation lautet, sollte der puffer, auf den der Parameter "SystemInformation" verweist, groß genug sein, um eine undurchsichtige SYSTEM_LOOKASIDE_INFORMATION Struktur zur Verwendung beim Generieren eines unvorhersehbaren Seeds für einen Zufallszahlengenerator zu enthalten. Zu diesem Zweck weist die Struktur das folgende Layout auf:

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

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

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

SYSTEM_PERFORMANCE_INFORMATION

Wenn der Parameter "SystemInformationClass"SystemPerformanceInformation lautet, sollte der puffer, auf den der Parameter "SystemInformation " verweist, groß genug sein, um eine undurchsichtige SYSTEM_PERFORMANCE_INFORMATION Struktur zur Verwendung beim Generieren eines unvorhersehbaren Ausgangswerts für einen Zufallszahlengenerator zu enthalten. Zu diesem Zweck weist die Struktur das folgende Layout auf:

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

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

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

SYSTEM_POLICY_INFORMATION

Wenn der Parameter "SystemInformationClass" "SystemPolicyInformation" lautet, sollte der puffer, auf den der Parameter "SystemInformation" verweist, groß genug sein, um eine einzelne SYSTEM_POLICY_INFORMATION Struktur mit dem folgenden Layout zu enthalten:

typedef struct _SYSTEM_POLICY_INFORMATION {
    PVOID Reserved1[2];
    ULONG Reserved2[3];
} SYSTEM_POLICY_INFORMATION;

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

Verwenden Sie stattdessen die SLGetWindowsInformation-Funktion , um Richtlinieninformationen abzurufen.

SYSTEM_PROCESS_INFORMATION

Wenn der Parameter SystemInformationClassSystemProcessInformation ist, enthält der puffer, auf den der Parameter "SystemInformation " verweist, eine SYSTEM_PROCESS_INFORMATION Struktur für jeden Prozess. Jeder dieser Strukturen folgt sofort im Arbeitsspeicher von mindestens einem SYSTEM_THREAD_INFORMATION Strukturen, die Informationen für jeden Thread im vorherigen Prozess bereitstellen. Weitere Informationen zu SYSTEM_THREAD_INFORMATION finden Sie im Abschnitt zu dieser Struktur in diesem Artikel.

Der puffer, auf den der SystemInformation-Parameter verweist, sollte groß genug sein, um ein Array zu enthalten, das so viele SYSTEM_PROCESS_INFORMATION und SYSTEM_THREAD_INFORMATION Strukturen enthält, wie Prozesse und Threads im System ausgeführt werden. Diese Größe wird durch den Parameter ReturnLength angegeben.

Jede SYSTEM_PROCESS_INFORMATION Struktur weist das folgende Layout auf:

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;

Der Anfang des nächsten Elements im Array ist die Adresse des vorherigen Elements plus der Wert im NextEntryOffset-Element . Für das letzte Element im Array ist NextEntryOffset 0.

Das NumberOfThreads-Element enthält die Anzahl der Threads im Prozess.

Das ImageName-Element enthält den Bildnamen des Prozesses.

Das BasePriority-Mitglied enthält die Basispriorität des Prozesses, bei dem es sich um die Startpriorität für Threads handelt, die innerhalb des zugeordneten Prozesses erstellt wurden.

Das UniqueProcessId-Mitglied enthält die eindeutige Prozess-ID des Prozesses.

Das InheritedFromUniqueProcessId-Element enthält die eindeutige Prozess-ID des übergeordneten Elements.

Das HandleCount-Mitglied enthält die Gesamtanzahl der Handles, die vom betreffenden Prozess verwendet werden; Verwenden Sie getProcessHandleCount , um diese Informationen stattdessen abzurufen.

Das SessionId-Mitglied enthält den Sitzungsbezeichner der Prozesssitzung.

Das PeakVirtualSize-Element enthält die Spitzengröße des virtuellen Speichers, der vom Prozess verwendet wird.

Das VirtualSize-Element enthält die aktuelle Größe des virtuellen Arbeitsspeichers, der vom Prozess verwendet wird.

Das PeakWorkingSetSize-Element enthält die Spitzengröße in Kilobyte des Arbeitssatzes des Prozesses.

Das QuotaPagedPoolUsage-Mitglied enthält das aktuelle Kontingent, das dem Prozess für die Seitenpoolnutzung in Rechnung gestellt wird.

Das Member "QuotaNonPagedPoolUsage " enthält das aktuelle Kontingent, das dem Prozess für die Verwendung eines nicht ausseitigen Pools berechnet wird.

Das PagefileUsage-Element enthält die Anzahl der Bytes des vom Prozess verwendeten Seitendateispeichers.

Das PeakPagefileUsage-Element enthält die maximale Anzahl von Bytes des vom Prozess verwendeten Seitendateispeichers.

Das PrivatePageCount-Mitglied enthält die Anzahl der Speicherseiten, die für die Verwendung dieses Prozesses zugewiesen wurden.

Sie können auch die PeakWorkingSetSize-, QuotaPagedPoolUsage-, QuotaNonPagedPoolUsage-, PagefileUsage-, PeakPagefileUsage- und PrivatePageCount-Informationen mithilfe der GetProcessMemoryInfo-Funktion oder der Win32_Process-Klasse abrufen.

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

SYSTEM_THREAD_INFORMATION

Wenn der Parameter SystemInformationClassSystemProcessInformation ist, enthält der puffer, auf den der Parameter "SystemInformation " verweist, eine SYSTEM_PROCESS_INFORMATION Struktur für jeden Prozess. Jeder dieser Strukturen folgt sofort im Arbeitsspeicher von mindestens einem SYSTEM_THREAD_INFORMATION Strukturen, die Informationen für jeden Thread im vorherigen Prozess bereitstellen. Weitere Informationen zu SYSTEM_PROCESS_INFORMATION finden Sie im Abschnitt zu dieser Struktur in diesem Artikel. Jede SYSTEM_THREAD_INFORMATION Struktur weist das folgende Layout auf:

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;

Das StartAddress-Mitglied enthält die Startadresse des Threads.

Das ClientId-Mitglied enthält die ID des Threads und den Prozess, der den Thread besitzt.

Das Element "Priority" enthält die dynamische Threadpriorität.

Das BasePriority-Element enthält die Basisthreadpriorität.

Das ThreadState-Mitglied enthält den aktuellen Threadstatus.

Das WaitReason-Element enthält den Grund, warum der Thread wartet.

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

SYSTEM_PROCESSOR_PERFORMANCE_INFORMATION

Wenn der Parameter SystemInformationClassSystemProcessorPerformanceInformation ist, sollte der puffer, auf den der SystemInformation-Parameter verweist, groß genug sein, um ein Array zu enthalten, das so viele SYSTEM_PROCESSOR_PERFORMANCE_INFORMATION Strukturen enthält, wie prozessoren (CPUs) im System installiert sind. Jede Struktur weist das folgende Layout auf:

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 den Zeitraum, in dem das System im Leerlauf war, in 100-Nanosekunden-Intervallen.

Das KernelTime-Mitglied enthält die Zeit, die das System im Kernelmodus ausgeführt hat (einschließlich aller Threads in allen Prozessen, auf allen Prozessoren), in 100-Nanosekunden-Intervallen.

Das UserTime-Mitglied enthält die Zeit, die das System im Benutzermodus ausgeführt hat (einschließlich aller Threads in allen Prozessen, auf allen Prozessoren), in 100-Nanosekunden-Intervallen.

Verwenden Sie stattdessen GetSystemTimes , um diese Informationen abzurufen.

SYSTEM_QUERY_PERFORMANCE_COUNTER_INFORMATION

Wenn der Parameter "SystemInformationClass" systemQueryPerformanceCounterInformation lautet, sollte der puffer, auf den der Parameter "SystemInformation" verweist, groß genug sein, um eine einzelne SYSTEM_QUERY_PERFORMANCE_COUNTER_INFORMATION Struktur mit dem folgenden Layout zu enthalten:

typedef struct _SYSTEM_QUERY_PERFORMANCE_COUNTER_INFORMATION {
    ULONG                           Version;
    QUERY_PERFORMANCE_COUNTER_FLAGS Flags;
    QUERY_PERFORMANCE_COUNTER_FLAGS ValidFlags;
} SYSTEM_QUERY_PERFORMANCE_COUNTER_INFORMATION;

Die Flags - und ValidFlags-Elemente sind QUERY_PERFORMANCE_COUNTER_FLAGS Strukturen mit dem folgenden Layout:

typedef struct _QUERY_PERFORMANCE_COUNTER_FLAGS {
    union {
        struct {
            ULONG KernelTransition:1;
            ULONG Reserved:31;
        };
        ULONG ul;
    };
} QUERY_PERFORMANCE_COUNTER_FLAGS;

Das ValidFlags-Element der SYSTEM_QUERY_PERFORMANCE_COUNTER_INFORMATION-Struktur gibt an, welche Bits des Flags-Elements gültige Informationen enthalten. Wenn ein Kernelübergang erforderlich ist, wird das KernelTransition-Bit sowohl in ValidFlags als auch in Flags festgelegt. Wenn kein Kernelübergang erforderlich ist, wird das KernelTransition-Bit in ValidFlags festgelegt und in Flags gelöscht.

SYSTEM_REGISTRY_QUOTA_INFORMATION

Wenn der Parameter "SystemInformationClass" "SystemRegistryQuotaInformation" lautet, sollte der puffer, auf den der Parameter "SystemInformation" verweist, groß genug sein, um eine einzelne SYSTEM_REGISTRY_QUOTA_INFORMATION Struktur mit dem folgenden Layout zu enthalten:

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

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

Das Member RegistryQuotaUsed enthält die aktuelle Größe der Registrierung in Byte.

Verwenden Sie stattdessen GetSystemRegistryQuota , um diese Informationen abzurufen.

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

SYSTEM_SPECULATION_CONTROL_INFORMATION

Wenn der Parameter "SystemInformationClass" SystemSpeculationControlInformation lautet, sollte der puffer, auf den der Parameter "SystemInformation" verweist, groß genug sein, um eine einzelne SYSTEM_SPECULATION_CONTROL_INFORMATION Struktur mit dem folgenden Layout zu enthalten:

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;

Die BpbEnabled gibt an, ob Spekulationssteuerungsfeatures unterstützt und aktiviert werden.

Die BpbDisabledSystemPolicy gibt an, ob aufgrund der Systemrichtlinie Spekulationssteuerungsfeatures deaktiviert sind.

BpbDisabledNoHardwareSupport, ob Spekulationssteuerungsfeatures aufgrund der fehlenden Hardwareunterstützung deaktiviert werden.

Das SpecCtrlEnumerated , ob die IA32_SPEC_CTRL MSR von Hardware aufgezählt wird.

Die SpecCmdEnumerated gibt an, ob der IA32_SPEC_CMD MSR durch Hardware aufgezählt wird.

Das IbrsPresent gibt an, ob die IBRS MSR als anwesend behandelt wird.

StibpPresent gibt an, ob die STIBP-MSR vorhanden ist.

SmepPresent gibt an, ob das SMEP-Feature vorhanden und aktiviert ist.

Das SpeculativeStoreBypassDisableAvailable gibt an, ob die anderen spekulativen Speicherumgehungsfelder (SSBD) in dieser Datenstruktur vom Betriebssystem unterstützt werden.

Der SpeculativeStoreBypassDisableSupported gibt an, ob die Hardwareunterstützung für SSBD vorhanden ist.

Der SpeculativeStoreBypassDisabledSystemWide gibt an, ob SSBD systemweit aktiviert wurde.

Der SpeculativeStoreBypassDisabledKernel gibt an, ob SSBD für den Kernelmodus deaktiviert wurde.

Der SpeculativeStoreBypassDisableRequired gibt an, ob die Hardware für spekulative Speicherumgehung anfällig ist.

Die BpbDisabledKernelToUser gibt an, ob die indirekte Verzweigungsvorhersage für jeden Kernel zum Benutzerübergang geleert wird.

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

SYSTEM_TIMEOFDAY_INFORMATION

Wenn der Parameter "SystemInformationClass" "SystemTimeOfDayInformation" lautet, sollte der puffer, auf den der Parameter "SystemInformation" verweist, groß genug sein, um eine undurchsichtige SYSTEM_TIMEOFDAY_INFORMATION Struktur zur Verwendung beim Generieren eines unvorhersehbaren Seeds für einen Zufallszahlengenerator zu enthalten. Zu diesem Zweck weist die Struktur das folgende Layout auf:

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

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

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

[in] SystemInformationLength

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

[out, optional] ReturnLength

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 der Größe ist
SystemInformationLength-Parameter 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, der zum Empfangen der angeforderten Informationen erforderlich ist.

Rückgabewert

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

Die Formulare und die Bedeutung von NTSTATUS-Fehlercodes werden in der Datei "Ntstatus.h"-Header aufgeführt, die in der DDK-Dokumentation zur Verfügung steht.

Bemerkungen

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

Wenn Sie NtQuerySystemInformation verwenden, greifen Sie über dynamische Verknüpfungen zur Laufzeit auf die Funktion zu. Dadurch erhalten Sie die Möglichkeit, ordnungsgemäß zu reagieren, wenn die Funktion geändert oder aus dem Betriebssystem entfernt wurde. Signaturänderungen können jedoch möglicherweise nicht erkannt werden.

Diese Funktion weist keine zugeordnete Importbibliothek auf. Sie müssen die Funktionen LoadLibrary und GetProcAddress verwenden, um dynamisch mit Ntdll.dllzu verknüpfen.

Anforderungen

Anforderung Wert
Zielplattform Fenster
Header winternl.h
Library ntdll.lib
DLL ntdll.dll

Siehe auch

GetProcessHandleCount

GetProcessMemoryInfo

GetSystemInfo

GetSystemRegistryQuota

GetSystemTimes