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
);

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, mit der ein unvorhersehbarer Seed für einen Zufallszahlengenerator generiert werden kann. Verwenden Sie stattdessen die Funktion CryptGenRandom .

SystemInterruptInformation

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

SystemKernelVaShadowInformation

Gibt eine SYSTEM_KERNEL_VA_SHADOW_INFORMATION Struktur zurück, die verwendet werden kann, um die Einstellungen für die Spekulationssteuerung für Angriffe mit nicht autorisierten Datencaches (z. B. CVE-2017-5754) zu bestimmen.

SystemLeapSecondInformation

Gibt eine undurchsichtige SYSTEM_LEAP_SECOND_INFORMATION-Struktur zurück, die verwendet werden kann, um Schaltsekunden systemweit zu aktivieren oder zu deaktivieren. Diese Einstellung bleibt auch nach einem Neustart des Systems erhalten.

SystemLookasideInformation

Gibt eine undurchsichtige SYSTEM_LOOKASIDE_INFORMATION-Struktur zurück, mit der ein unvorhersehbarer Seed für einen Zufallszahlengenerator generiert werden kann. Verwenden Sie stattdessen die Funktion CryptGenRandom .

SystemPerformanceInformation

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

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 über die Ressourcennutzung der einzelnen Prozesse, einschließlich der Anzahl von Threads und Handles, die vom Prozess verwendet werden, die Maximale Seiten-Dateinutzung und die Anzahl der Speicherseiten, die der Prozess zugewiesen hat.

SystemProcessorPerformanceInformation

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

SystemQueryPerformanceCounterInformation

Gibt eine SYSTEM_QUERY_PERFORMANCE_COUNTER_INFORMATION-Struktur zurück, die verwendet werden kann, um zu bestimmen, ob das System einen Kernelübergang erfordert, um die hochauflösenden Leistungsindikatorinformationen ü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, mit der die Spekulationssteuerungseinstellungen für Angriffe mit Branchzielinjektion (z. B. CVE-2017-5715) bestimmt werden können.

Jede SYSTEM_SPECULATION_CONTROL_INFORMATION Struktur hat das folgende Layout:

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;

Kennzeichnen Bedeutung
BpbEnabled Wenn TRUE, werden Spekulationssteuerungsfeatures unterstützt und aktiviert.
BpbDisabledSystemPolicy Wenn true, sind Spekulationssteuerungsfeatures aufgrund der Systemrichtlinie deaktiviert.
BpbDisabledNoHardwareSupport Wenn TRUE, sind Die Features für die Spekulationssteuerung aufgrund fehlender Hardwareunterstützung deaktiviert.
SpecCtrlEnumerated Bei TRUE wird der i386/AMD64 IA32_SPEC_CTRL MSR nach Hardware aufgezählt.
SpecCmdEnumerated Bei TRUE wird der i386/AMD64 IA32_SPEC_CMD MSR nach Hardware aufgezählt.
IbrsPresent Bei TRUE wird die i386/AMD64 IBRS MSR als vorhanden behandelt.
StibpPresent Wenn TRUE, ist die i386/AMD64 STIBP MSR vorhanden.
SmepPresent Bei TRUE ist die SMEP-Funktion vorhanden und aktiviert.
SpeculativeStoreBypassDisableAvailable Wenn TRUE, ist die Betriebssystemunterstützung für SSBD vorhanden.
SpeculativeStoreBypassDisableSupported Wenn TRUE, ist Hardwareunterstützung für SSBD vorhanden.
SpeculativeStoreBypassDisabledSystemWide Wenn TRUE, wird SSBD systemweit festgelegt.
SpeculativeStoreBypassDisabledKernel Wenn TRUE, wird SSBD im Kernel festgelegt.
SpeculativeStoreBypassDisableRequired Wenn TRUE, ist SSBD erforderlich, um Spekulationsangriffe zu verhindern.
BpbDisabledKernelToUser Wenn TRUE, wird die indirekte Branchvorhersage nicht für jeden Kernel zum Benutzerübergang geleert.
SpecCtrlRetpolineEnabled Bei TRUE ist Retpoline für kompatible Treiber aktiviert.
SpecCtrlImportOptimizationEnabled Bei 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 Seed für einen Zufallszahlengenerator zu generieren. Verwenden Sie stattdessen die Funktion CryptGenRandom .

[in, out] SystemInformation

Ein Zeiger auf einen Puffer, der die angeforderten Informationen empfängt. Die Größe und Struktur dieser Informationen hängt vom Wert des Parameters SystemInformationClass ab:

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_CODEINTEGRITY_INFORMATION

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

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 Bytes. Dies muss vom Aufrufer festgelegt werden.

Das CodeIntegrityOptions-Element enthält eine Bitmaske, um Codeintegritätsoptionen zu identifizieren.

Wert Bedeutung
0x01 CODEINTEGRITY_OPTION_ENABLED Die Erzwingung der Codeintegrität im Kernelmodus ist aktiviert.
0x02 CODEINTEGRITY_OPTION_TESTSIGN Das Testen signierter Inhalte ist durch die Codeintegrität zulässig.
0x04 CODEINTEGRITY_OPTION_UMCI_ENABLED Die Erzwingung der Codeintegrität im Benutzermodus ist aktiviert.
0x08 CODEINTEGRITY_OPTION_UMCI_AUDITMODE_ENABLED Die Erzwingung der Codeintegrität im Benutzermodus ist im Überwachungsmodus aktiviert. Ausführbare Dateien dürfen ausgeführt/geladen werden. Überwachungsereignisse werden jedoch aufgezeichnet.
0x10 CODEINTEGRITY_OPTION_UMCI_EXCLUSIONPATHS_ENABLED Binärdateien im Benutzermodus, 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 in 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:
  • \
  • \Windows
  • \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\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 Der Build von Codeintegrität stammt aus einem Testbuild.
0x40 CODEINTEGRITY_OPTION_PREPRODUCTION_BUILD Der Build von Codeintegrität stammt aus einem Vorproduktionsbuild.
0x80 CODEINTEGRITY_OPTION_DEBUGMODE_ENABLED Der Kerneldebugger ist angefügt, und die Codeintegrität ermöglicht möglicherweise das Laden von nicht signiertem Code.
0x100 CODEINTEGRITY_OPTION_FLIGHT_BUILD Der Build von Codeintegrität stammt aus einem Flightbuild.
0x200 CODEINTEGRITY_OPTION_FLIGHTING_ENABLED Flightsignierte Inhalte sind durch Codeintegrität zulässig. Flightsignierte Inhalte sind Von der Microsoft Development-Stammzertifizierungsstelle 2014 signierte Inhalte.
0x400 CODEINTEGRITY_OPTION_HVCI_KMCI_ENABLED Hypervisor erzwungene Codeintegrität ist für Kernelmoduskomponenten aktiviert.
0x800 CODEINTEGRITY_OPTION_HVCI_KMCI_AUDITMODE_ENABLED Durch 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, jedoch im strikten Modus.
0x2000 CODEINTEGRITY_OPTION_HVCI_IUM_ENABLED Die vom Hypervisor erzwungene Codeintegrität wird mit der Erzwingung der Signatur von Komponenten im isolierten Benutzermodus aktiviert.
 

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_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_KERNEL_VA_SHADOW_INFORMATION

Wenn der SystemInformationClass-ParameterSystemKernelVaShadowInformation ist, 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 aufzunehmen:

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 gibt an, ob Schatten aktiviert ist.

KvaShadowUserGlobal gibt an, dass benutzer/global aktiviert ist.

KvaShadowPcid gibt an, ob PCID aktiviert ist.

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

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

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

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

L1DataCacheFlushSupported gibt an, ob die Hardware L1-Datencacheleerungen unterstützt.

L1TerminalFaultMitigationPresent gibt an, ob das Betriebssystem die L1-Terminalfehlerminderung (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 SystemInformationClass-ParameterSystemLeapSecondInformation ist, sollte der Puffer, auf den der Parameter SystemInformation verweist, groß genug sein, um eine undurchsichtige SYSTEM_LEAP_SECOND_INFORMATION Struktur für die Verwendung beim Aktivieren oder Deaktivieren von Schaltsekunden systemweit zu enthalten. Diese Einstellung bleibt auch nach einem Neustart des Systems erhalten. Zu diesem Zweck hat die Struktur das folgende Layout:

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 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.

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_POLICY_INFORMATION

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

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

Einzelne Elemente 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 SystemInformationClass-ParameterSystemProcessInformation ist, enthält der Puffer, auf den der Parameter SystemInformation verweist, eine SYSTEM_PROCESS_INFORMATION Struktur für jeden Prozess. Jeder dieser Strukturen folgt im Arbeitsspeicher sofort eine oder mehrere SYSTEM_THREAD_INFORMATION Strukturen, die Informationen zu jedem 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 Parameter SystemInformation verweist, sollte groß genug sein, um ein Array aufzunehmen, 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 ReturnLength-Parameter angegeben.

Jede SYSTEM_PROCESS_INFORMATION Struktur hat das folgende Layout:

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;

Der Anfang des nächsten Elements im Array ist die Adresse des vorherigen Elements und 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 Imagenamen des Prozesses.

Das BasePriority-Element enthält die Basispriorität des Prozesses, die die Startpriorität für Threads ist, die innerhalb des zugeordneten Prozesses erstellt wurden.

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

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

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

Das PeakVirtualSize-Element enthält die Spitzengröße des vom Prozess verwendeten virtuellen Arbeitsspeichers in Bytes.

Das VirtualSize-Element enthält die aktuelle Größe des vom Prozess verwendeten virtuellen Arbeitsspeichers in Bytes.

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

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

Das QuotaNonPagedPoolUsage-Element enthält das aktuelle Kontingent, das dem Prozess für die nicht ausseitige Poolnutzung in Rechnung gestellt 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 an Seitendateispeicher, die vom Prozess verwendet werden.

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

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

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

SYSTEM_THREAD_INFORMATION

Wenn der SystemInformationClass-ParameterSystemProcessInformation ist, enthält der Puffer, auf den der Parameter SystemInformation verweist, eine SYSTEM_PROCESS_INFORMATION Struktur für jeden Prozess. Jeder dieser Strukturen folgt im Arbeitsspeicher sofort eine oder mehrere SYSTEM_THREAD_INFORMATION Strukturen, die Informationen zu jedem 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 hat das folgende Layout:

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-Element enthält die Startadresse des Threads.

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

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

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

Das ThreadState-Element enthält den aktuellen Threadstatus.

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

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_PROCESSOR_PERFORMANCE_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;

Der IdleTime-Member enthält die Zeit, die das System im Leerlauf hatte, in Intervallen von 100 Nanosekunden.

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 Intervallen von 100 Nanosekunden aufgewendet hat.

Das UserTime-Element 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 Intervallen von 100 Nanosekunden aufgewendet hat.

Verwenden Sie stattdessen GetSystemTimes , um diese Informationen abzurufen.

SYSTEM_QUERY_PERFORMANCE_COUNTER_INFORMATION

Wenn der SystemInformationClass-ParameterSystemQueryPerformanceCounterInformation ist, 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 aufzunehmen:

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-Member 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 deaktiviert.

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_SPECULATION_CONTROL_INFORMATION

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

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 gibt an, ob Spekulationssteuerungsfeatures unterstützt und aktiviert werden.

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

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

Die SpecCtrlEnumer hat angegeben , ob der IA32_SPEC_CTRL MSR von Hardware aufgezählt wird.

SpecCmdEnumerated gibt an, ob die IA32_SPEC_CMD MSR von Hardware aufgezählt wird.

IbrsPresent gibt an, ob die IBRS-MSR als vorhanden behandelt wird.

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

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

Der SpeculativeStoreBypassDisableAvailable gibt an, ob die anderen SSBD-Felder (Speculative Store Bypass Disable) in dieser Datenstruktur vom Betriebssystem unterstützt werden.

Der SpeculativeStoreBypassDisableSupported gibt an, ob 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 bekanntlich anfällig für spekulative Speicherumgehung ist.

Der BpbDisabledKernelToUser gibt an, ob die indirekte Branchvorhersage für jeden Kernel-Zu-Benutzer-Übergang geleert wird.

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

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.

[in] SystemInformationLength

Die Größe des Puffers, auf den der SystemInformation-Parameter 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 ist
SystemInformationLength-Parameter : Die Funktion kopiert 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 Formulare und die Bedeutung von NTSTATUS-Fehlercodes sind in der Ntstatus.h-Headerdatei aufgeführt, die im DDK verfügbar ist, und werden in der DDK-Dokumentation beschrieben.

Hinweise

Die NtQuerySystemInformation-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 NtQuerySystemInformation verwenden, greifen Sie über dynamische Verknüpfungen zur Laufzeit auf die Funktion 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

   
Zielplattform Windows
Kopfzeile winternl.h
Bibliothek ntdll.lib
DLL ntdll.dll

Weitere Informationen

GetProcessHandleCount

GetProcessMemoryInfo

GetSystemInfo

GetSystemRegistryQuota

GetSystemTimes