Funzione NtQuerySystemInformation (winternl.h)
[NtQuerySystemInformation può essere modificato o non disponibile nelle versioni future di Windows. Le applicazioni devono usare le funzioni alternative elencate in questo argomento.
Recupera le informazioni di sistema specificate.
Sintassi
__kernel_entry NTSTATUS NtQuerySystemInformation(
[in] SYSTEM_INFORMATION_CLASS SystemInformationClass,
[in, out] PVOID SystemInformation,
[in] ULONG SystemInformationLength,
[out, optional] PULONG ReturnLength
);
Parametri
[in] SystemInformationClass
Uno dei valori enumerati in SYSTEM_INFORMATION_CLASS, che indicano il tipo di informazioni di sistema da recuperare. Questi includono i valori seguenti.
SystemBasicInformation
Restituisce il numero di processori nel sistema in una struttura SYSTEM_BASIC_INFORMATION . Usare invece la funzione GetSystemInfo .
SystemCodeIntegrityInformation
Restituisce una struttura SYSTEM_CODEINTEGRITY_INFORMATION che può essere usata per determinare le opzioni applicate dall'integrità del codice nel sistema.
SystemExceptionInformation
Restituisce una struttura SYSTEM_EXCEPTION_INFORMATION opaca che può essere usata per generare un seeding imprevedibile per un generatore di numeri casuali. Usare invece la funzione CryptGenRandom .
SystemInterruptInformation
Restituisce una struttura SYSTEM_INTERRUPT_INFORMATION opaca che può essere usata per generare un seeding imprevedibile per un generatore di numeri casuali. Usare invece la funzione CryptGenRandom .
SystemKernelVaShadowInformation
Restituisce una struttura SYSTEM_KERNEL_VA_SHADOW_INFORMATION che può essere usata per determinare le impostazioni di controllo della speculazione per gli attacchi che coinvolgono carichi di cache di dati non autorizzati (ad esempio CVE-2017-5754).
SystemLeapSecondInformation
Restituisce una struttura SYSTEM_LEAP_SECOND_INFORMATION opaca che può essere usata per abilitare o disabilitare il passaggio a livello di sistema. Questa impostazione persiste anche dopo il riavvio del sistema.
SystemLookasideInformation
Restituisce una struttura SYSTEM_LOOKASIDE_INFORMATION opaca che può essere usata per generare un seeding imprevedibile per un generatore di numeri casuali. Usare invece la funzione CryptGenRandom .
SystemPerformanceInformation
Restituisce una struttura SYSTEM_PERFORMANCE_INFORMATION opaca che può essere usata per generare un seeding imprevedibile per un generatore di numeri casuali. Usare invece la funzione CryptGenRandom .
SystemPolicyInformation
Restituisce informazioni sui criteri in una struttura di SYSTEM_POLICY_INFORMATION . Usare invece la funzione SLGetWindowsInformation per ottenere informazioni sui criteri.
SystemProcessInformation
Restituisce una matrice di strutture SYSTEM_PROCESS_INFORMATION , una per ogni processo in esecuzione nel sistema.
Queste strutture contengono informazioni sull'utilizzo delle risorse di ogni processo, tra cui il numero di thread e handle usati dal processo, l'utilizzo massimo del file di pagina e il numero di pagine di memoria allocate dal processo.
SystemProcessorPerformanceInformation
Restituisce una matrice di strutture SYSTEM_PROCESSOR_PERFORMANCE_INFORMATION , una per ogni processore installato nel sistema.
SystemQueryPerformanceCounterInformation
Restituisce una struttura SYSTEM_QUERY_PERFORMANCE_COUNTER_INFORMATION che può essere usata per determinare se il sistema richiede una transizione del kernel per recuperare le informazioni sui contatori delle prestazioni ad alta risoluzione tramite una chiamata di funzione QueryPerformanceCounter .
SystemRegistryQuotaInformation
Restituisce una struttura SYSTEM_REGISTRY_QUOTA_INFORMATION .
SystemSpeculationControlInformation
Restituisce una struttura SYSTEM_SPECULATION_CONTROL_INFORMATION che può essere usata per determinare le impostazioni di controllo della speculazione per gli attacchi che coinvolgono l'inserimento di destinazione del ramo (ad esempio CVE-2017-5715).
Ogni struttura SYSTEM_SPECULATION_CONTROL_INFORMATION ha il layout seguente:
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;
Bandiera | Significato |
BpbEnabled | Se TRUE, le funzionalità di controllo della speculazione sono supportate e abilitate. |
BpbDisabledSystemPolicy | Se TRUE, le funzionalità di controllo della speculazione sono disabilitate a causa dei criteri di sistema. |
BpbDisabledNoHardwareSupport | Se TRUE, le funzionalità di controllo della speculazione sono disabilitate a causa dell'assenza di supporto hardware. |
SpecCtrlEnumerated | Se TRUE, l'IA32_SPEC_CTRL MSR i386/AMD64 viene enumerato dall'hardware. |
SpecCmdEnumerated | Se TRUE, l'i386/AMD64 IA32_SPEC_CMD MSR viene enumerato dall'hardware. |
IbrsPresent | Se TRUE, l'i386/AMD64 IBRS MSR viene considerato presente. |
StibpPresent | Se TRUE, è presente l'MSR i386/AMD64 STIBP. |
SmepPresent | Se TRUE, la funzionalità SMEP è presente e abilitata. |
SpeculativeStoreBypassDisableAvailable | Se TRUE, esiste il supporto del sistema operativo per SSBD. |
SpeculativeStoreBypassDisableSupported | Se TRUE, esiste il supporto hardware per SSBD. |
SpeculativeStoreBypassDisabledSystemWide | Se TRUE, SSBD è impostato a livello di sistema. |
SpeculativeStoreBypassDisabledKernel | Se TRUE, SSBD è impostato nel kernel. |
SpeculativeStoreBypassDisableRequired | Se TRUE, SSBD è necessario per evitare attacchi di speculazione. |
BpbDisabledKernelToUser | Se TRUE, la stima del ramo indiretto non viene scaricata in ogni kernel per la transizione dell'utente. |
SpecCtrlRetpolineEnabled | Se TRUE, Retpoline è abilitato per i driver compatibili. |
SpecCtrlImportOptimizationEnabled | Se TRUE, l'ottimizzazione dell'importazione è abilitata. |
Riservato | Flag riservati. |
SystemTimeOfDayInformation
Restituisce una struttura SYSTEM_TIMEOFDAY_INFORMATION opaca che può essere usata per generare un seeding imprevedibile per un generatore di numeri casuali. Usare invece la funzione CryptGenRandom .
[in, out] SystemInformation
Puntatore a un buffer che riceve le informazioni richieste. Le dimensioni e la struttura di queste informazioni variano a seconda del valore del parametro SystemInformationClass :
SYSTEM_BASIC_INFORMATION
Quando il parametro SystemInformationClass è SystemBasicInformation, il buffer a cui punta il parametro SystemInformation deve essere sufficiente per contenere una singola struttura SYSTEM_BASIC_INFORMATION con il layout seguente:
typedef struct _SYSTEM_BASIC_INFORMATION {
BYTE Reserved1[24];
PVOID Reserved2[4];
CCHAR NumberOfProcessors;
} SYSTEM_BASIC_INFORMATION;
Il membro NumberOfProcessors contiene il numero di processori presenti nel sistema. Usare GetSystemInfo invece per recuperare queste informazioni.
Gli altri membri della struttura sono riservati all'uso interno del sistema operativo.
SYSTEM_CODEINTEGRITY_INFORMATION
Quando il parametro SystemInformationClass è SystemCodeIntegrityInformation, il buffer a cui punta il parametro SystemInformation deve essere sufficiente per contenere una singola struttura SYSTEM_CODEINTEGRITY_INFORMATION con il layout seguente:
typedef struct _SYSTEM_CODEINTEGRITY_INFORMATION {
ULONG Length;
ULONG CodeIntegrityOptions;
} SYSTEM_CODEINTEGRITY_INFORMATION, *PSYSTEM_CODEINTEGRITY_INFORMATION;
Il membro Length contiene le dimensioni della struttura in byte. Questa operazione deve essere impostata dal chiamante.
Il membro CodeIntegrityOptions contiene una maschera bit per identificare le opzioni di integrità del codice.
Valore | Significato | |
0x01 | CODEINTEGRITY_OPTION_ENABLED | L'applicazione dell'integrità del codice in modalità kernel è abilitata. |
0x02 | CODEINTEGRITY_OPTION_TESTSIGN | Il contenuto firmato dal test è consentito dall'integrità del codice. |
0x04 | CODEINTEGRITY_OPTION_UMCI_ENABLED | L'applicazione dell'integrità del codice in modalità utente è abilitata. |
0x08 | CODEINTEGRITY_OPTION_UMCI_AUDITMODE_ENABLED | L'applicazione dell'integrità del codice in modalità utente è abilitata in modalità di controllo. Gli eseguibili saranno autorizzati a eseguire/caricare; tuttavia, gli eventi di controllo verranno registrati. |
0x10 | CODEINTEGRITY_OPTION_UMCI_EXCLUSIONPATHS_ENABLED |
I file binari in modalità utente eseguiti da determinati percorsi possono essere eseguiti anche se non riescono a controllare l'integrità del codice.
I percorsi di esclusione sono elencati nella chiave del Registro di sistema seguente nel formato REG_MULTI_SZ:
|
0x20 | CODEINTEGRITY_OPTION_TEST_BUILD | La compilazione dell'integrità del codice proviene da una compilazione di test. |
0x40 | CODEINTEGRITY_OPTION_PREPRODUCTION_BUILD | La compilazione dell'integrità del codice proviene da una compilazione di pre-produzione. |
0x80 | CODEINTEGRITY_OPTION_DEBUGMODE_ENABLED | Il debugger del kernel è collegato e l'integrità del codice può consentire il caricamento del codice non firmato. |
0x100 | CODEINTEGRITY_OPTION_FLIGHT_BUILD | La compilazione dell'integrità del codice proviene da una compilazione in anteprima. |
0x200 | CODEINTEGRITY_OPTION_FLIGHTING_ENABLED | Il contenuto firmato in anteprima è consentito dall'integrità del codice. Il contenuto firmato in anteprima è firmato dall'autorità di certificazione radice di sviluppo Microsoft 2014. |
0x400 | CODEINTEGRITY_OPTION_HVCI_KMCI_ENABLED | L'integrità del codice applicata da Hypervisor è abilitata per i componenti della modalità kernel. |
0x800 | CODEINTEGRITY_OPTION_HVCI_KMCI_AUDITMODE_ENABLED | L'integrità del codice applicata da Hypervisor è abilitata in modalità di controllo. Gli eventi di controllo verranno registrati per i componenti della modalità kernel che non sono compatibili con HVCI. Questo bit può essere impostato o meno se CODEINTEGRITY_OPTION_HVCI_KMCI_ENABLED è impostato o meno. |
0x1000 | CODEINTEGRITY_OPTION_HVCI_KMCI_STRICTMODE_ENABLED | L'integrità del codice applicata dall'Hypervisor è abilitata per i componenti della modalità kernel, ma in modalità rigorosa. |
0x2000 | CODEINTEGRITY_OPTION_HVCI_IUM_ENABLED | L'integrità del codice applicata da Hypervisor è abilitata con l'imposizione della firma del componente modalità utente isolata. |
SYSTEM_EXCEPTION_INFORMATION
Quando il parametro SystemInformationClass è SystemExceptionInformation, il buffer a cui punta il parametro SystemInformation deve essere sufficiente per contenere una struttura di SYSTEM_EXCEPTION_INFORMATION opaca da usare per generare un seeding imprevedibile per un generatore di numeri casuali. A questo scopo, la struttura ha il layout seguente:
typedef struct _SYSTEM_EXCEPTION_INFORMATION {
BYTE Reserved1[16];
} SYSTEM_EXCEPTION_INFORMATION;
I singoli membri della struttura sono riservati all'uso interno del sistema operativo.
Usare invece la funzione CryptGenRandom per generare dati crittografici casuali.
SYSTEM_INTERRUPT_INFORMATION
Quando il parametro SystemInformationClass è SystemInterruptInformation, il buffer a cui punta il parametro SystemInformation deve essere sufficiente per contenere una matrice contenente il numero di strutture opache SYSTEM_INTERRUPT_INFORMATION installate nel sistema. Ogni struttura, o la matrice nel suo complesso, può essere usata per generare un seeding imprevedibile per un generatore di numeri casuali. A questo scopo, la struttura ha il layout seguente:
typedef struct _SYSTEM_INTERRUPT_INFORMATION {
BYTE Reserved1[24];
} SYSTEM_INTERRUPT_INFORMATION;
I singoli membri della struttura sono riservati all'uso interno del sistema operativo.
Usare invece la funzione CryptGenRandom per generare dati crittografici casuali.
SYSTEM_KERNEL_VA_SHADOW_INFORMATION
Quando il parametro SystemInformationClass è SystemKernelVaShadowInformation, il buffer a cui punta il parametro SystemInformation deve essere sufficiente per contenere una singola struttura SYSTEM_KERNEL_VA_SHADOW_INFORMATION con il layout seguente:
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 indica se l'ombreggiatura è abilitata.
KvaShadowUserGlobal indica che l'utente/globale è abilitato.
KvaShadowPcid indica se PCID è abilitato.
KvaShadowInvpcid indica se PCID è abilitato e se INVPCID è in uso.
KvaShadowRequired indica se l'hardware è noto per essere soggetto a CVE-2017-5754.
KvaShadowRequiredAvailable indica se il campo KvaShadowRequired è supportato dal sistema operativo.
InvalidPteBit indica il bit di indirizzo fisico usato per le voci della tabella di pagina non valide o zero se non impostato.
L1DataCacheFlushSupported indica se l'hardware supporta lo scaricamento della cache dei dati L1.
L1TerminalFaultMitigationPresent indica se il sistema operativo supporta l'errore del terminale L1 (CVE-2018-3620) mitigazione del sistema operativo.
Il membro riservato della struttura è riservato per l'uso interno del sistema operativo.
SYSTEM_LEAP_SECOND_INFORMATION
Quando il parametro SystemInformationClass è SystemLeapSecondInformation, il buffer a cui punta il parametro SystemInformation deve essere sufficiente per contenere una struttura di SYSTEM_LEAP_SECOND_INFORMATION opaca da usare per abilitare o disabilitare il livello di sistema dei secondi di salto. Questa impostazione persiste anche dopo il riavvio del sistema. A questo scopo, la struttura ha il layout seguente:
typedef struct _SYSTEM_LEAP_SECOND_INFORMATION {
BOOLEAN Enabled;
ULONG Flags;
} SYSTEM_LEAP_SECOND_INFORMATION
Il campo Flags è riservato per l'uso futuro.
SYSTEM_LOOKASIDE_INFORMATION
Quando il parametro SystemInformationClass è SystemLookasideInformation, il buffer a cui punta il parametro SystemInformation deve essere sufficiente per contenere una struttura SYSTEM_LOOKASIDE_INFORMATION opaca da usare per generare un seeding imprevedibile per un generatore di numeri casuali. A questo scopo, la struttura ha il layout seguente:
typedef struct _SYSTEM_LOOKASIDE_INFORMATION {
BYTE Reserved1[32];
} SYSTEM_LOOKASIDE_INFORMATION;
I singoli membri della struttura sono riservati all'uso interno del sistema operativo.
Usare invece la funzione CryptGenRandom per generare dati crittografici casuali.
SYSTEM_PERFORMANCE_INFORMATION
Quando il parametro SystemInformationClass è SystemPerformanceInformation, il buffer a cui punta il parametro SystemInformation deve essere sufficiente per contenere una struttura SYSTEM_PERFORMANCE_INFORMATION opaca da usare per generare un seeding imprevedibile per un generatore di numeri casuali. A questo scopo, la struttura ha il layout seguente:
typedef struct _SYSTEM_PERFORMANCE_INFORMATION {
BYTE Reserved1[312];
} SYSTEM_PERFORMANCE_INFORMATION;
I singoli membri della struttura sono riservati all'uso interno del sistema operativo.
Usare invece la funzione CryptGenRandom per generare dati crittografici casuali.
SYSTEM_POLICY_INFORMATION
Quando il parametro SystemInformationClass è SystemPolicyInformation, il buffer a cui punta il parametro SystemInformation deve essere sufficiente per contenere una singola struttura SYSTEM_POLICY_INFORMATION con il layout seguente:
typedef struct _SYSTEM_POLICY_INFORMATION {
PVOID Reserved1[2];
ULONG Reserved2[3];
} SYSTEM_POLICY_INFORMATION;
I singoli membri della struttura sono riservati all'uso interno del sistema operativo.
Usare invece la funzione SLGetWindowsInformation per ottenere informazioni sui criteri.
SYSTEM_PROCESS_INFORMATION
Quando il parametro SystemInformationClass è SystemProcessInformation, il buffer a cui punta il parametro SystemInformation contiene una struttura SYSTEM_PROCESS_INFORMATION per ogni processo. Ognuna di queste strutture viene immediatamente seguita in memoria da una o più strutture SYSTEM_THREAD_INFORMATION che forniscono informazioni per ogni thread nel processo precedente. Per altre informazioni su SYSTEM_THREAD_INFORMATION, vedere la sezione relativa a questa struttura in questo articolo.
Il buffer a cui punta il parametro SystemInformation deve essere sufficiente per contenere una matrice contenente il numero di SYSTEM_PROCESS_INFORMATION e le strutture SYSTEM_THREAD_INFORMATION in esecuzione nel sistema. Questa dimensione viene specificata dal parametro ReturnLength .
Ogni struttura SYSTEM_PROCESS_INFORMATION ha il layout seguente:
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;
L'inizio dell'elemento successivo nella matrice è l'indirizzo dell'elemento precedente e il valore nel membro NextEntryOffset . Per l'ultimo elemento della matrice, NextEntryOffset è 0.
Il membro NumberOfThreads contiene il numero di thread nel processo.
Il membro ImageName contiene il nome dell'immagine del processo.
Il membro BasePriority contiene la priorità di base del processo, ovvero la priorità iniziale per i thread creati all'interno del processo associato.
Il membro UniqueProcessId contiene l'ID processo univoco del processo.
Il membro HandleCount contiene il numero totale di handle usati dal processo in questione; usare GetProcessHandleCount per recuperare queste informazioni.
Il membro SessionId contiene l'identificatore di sessione della sessione del processo.
Il membro PeakVirtualSize contiene le dimensioni di picco, in byte, della memoria virtuale usata dal processo.
Il membro VirtualSize contiene le dimensioni correnti, in byte, della memoria virtuale usata dal processo.
Il membro PeakWorkingSetSize contiene le dimensioni di picco, in kilobyte, del set di lavoro del processo.
Il membro QuotaPagedPoolUsage contiene la quota corrente addebitata al processo per l'utilizzo del pool a pagina.
Il membro QuotaNonPagedPoolUsage contiene la quota corrente addebitata al processo per l'utilizzo del pool non a pagina.
Il membro PagefileUsage contiene il numero di byte di archiviazione file di pagina in uso dal processo.
Il membro PeakPagefileUsage contiene il numero massimo di byte di archiviazione di file di pagina usati dal processo.
Il membro PrivatePageCount contiene il numero di pagine di memoria allocate per l'uso di questo processo.
È anche possibile recuperare le informazioni PeakWorkingSetSize, QuotaPagedPoolUsage, QuotaNonPagedPoolUsage, PagefileUsage, PeakPagefileUsage e PrivatePageCount usando la funzione GetProcessMemoryInfo o la classe Win32_Process.
Gli altri membri della struttura sono riservati all'uso interno del sistema operativo.
SYSTEM_THREAD_INFORMATION
Quando il parametro SystemInformationClass è SystemProcessInformation, il buffer a cui punta il parametro SystemInformation contiene una struttura SYSTEM_PROCESS_INFORMATION per ogni processo. Ognuna di queste strutture viene immediatamente seguita in memoria da una o più strutture SYSTEM_THREAD_INFORMATION che forniscono informazioni per ogni thread nel processo precedente. Per altre informazioni su SYSTEM_PROCESS_INFORMATION, vedere la sezione relativa a questa struttura in questo articolo. Ogni struttura SYSTEM_THREAD_INFORMATION ha il layout seguente:
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;
Il membro StartAddress contiene l'indirizzo iniziale del thread.
Il membro ClientId contiene l'ID del thread e il processo proprietario del thread.
Il membro Priority contiene la priorità del thread dinamico.
Il membro BasePriority contiene la priorità del thread di base.
Il membro ThreadState contiene lo stato del thread corrente.
Il membro WaitReason contiene il motivo per cui il thread è in attesa.
Gli altri membri della struttura sono riservati all'uso interno del sistema operativo.
SYSTEM_PROCESSOR_PERFORMANCE_INFORMATION
Quando il parametro SystemInformationClass è SystemProcessorPerformanceInformation, il buffer a cui punta il parametro SystemInformation deve essere abbastanza grande per contenere una matrice contenente il numero di strutture SYSTEM_PROCESSOR_PERFORMANCE_INFORMATION installate nel sistema. Ogni struttura ha il layout seguente:
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;
Il membro IdleTime contiene il tempo di inattività del sistema, in intervalli di 100 nanosecondi.
Il membro KernelTime contiene la quantità di tempo trascorsa dal sistema in modalità Kernel (inclusi tutti i thread in tutti i processi, in tutti i processori), in intervalli di 100 nanosecondi.
Il membro UserTime contiene la quantità di tempo trascorso dal sistema in modalità Utente (inclusi tutti i thread in tutti i processi, in tutti i processori), in intervalli di 100 nanosecondi.
Usare Invece GetSystemTimes per recuperare queste informazioni.
SYSTEM_QUERY_PERFORMANCE_COUNTER_INFORMATION
Quando il parametro SystemInformationClass è SystemQueryPerformanceCounterInformation, il buffer a cui punta il parametro SystemInformation deve essere sufficiente per contenere una singola struttura SYSTEM_QUERY_PERFORMANCE_COUNTER_INFORMATION con il layout seguente:
typedef struct _SYSTEM_QUERY_PERFORMANCE_COUNTER_INFORMATION {
ULONG Version;
QUERY_PERFORMANCE_COUNTER_FLAGS Flags;
QUERY_PERFORMANCE_COUNTER_FLAGS ValidFlags;
} SYSTEM_QUERY_PERFORMANCE_COUNTER_INFORMATION;
I membri Flag e ValidFlags sono QUERY_PERFORMANCE_COUNTER_FLAGS strutture con il layout seguente:
typedef struct _QUERY_PERFORMANCE_COUNTER_FLAGS {
union {
struct {
ULONG KernelTransition:1;
ULONG Reserved:31;
};
ULONG ul;
};
} QUERY_PERFORMANCE_COUNTER_FLAGS;
Il membro ValidFlags della struttura SYSTEM_QUERY_PERFORMANCE_COUNTER_INFORMATION indica quali bit del membro Flags contengono informazioni valide. Se è necessaria una transizione del kernel, il bit KernelTransition è impostato sia in ValidFlags che in Flag. Se non è necessaria una transizione del kernel, il bit KernelTransition è impostato in ValidFlags e deselezionato in Flag.
SYSTEM_REGISTRY_QUOTA_INFORMATION
Quando il parametro SystemInformationClass è SystemRegistryQuotaInformation, il buffer a cui punta il parametro SystemInformation deve essere sufficiente per contenere una singola struttura SYSTEM_REGISTRY_QUOTA_INFORMATION con il layout seguente:
typedef struct _SYSTEM_REGISTRY_QUOTA_INFORMATION {
ULONG RegistryQuotaAllowed;
ULONG RegistryQuotaUsed;
PVOID Reserved1;
} SYSTEM_REGISTRY_QUOTA_INFORMATION;
Il membro RegistryQuotaAllowed contiene le dimensioni massime, in byte, che il Registro di sistema può ottenere.
Il membro RegistryQuotaUsed contiene le dimensioni correnti del Registro di sistema, in byte.
Usare GetSystemRegistryQuota per recuperare queste informazioni.
L'altro membro della struttura è riservato per l'uso interno del sistema operativo.
SYSTEM_SPECULATION_CONTROL_INFORMATION
Quando il parametro SystemInformationClass è SystemSpeculationControlInformation, il buffer a cui punta il parametro SystemInformation deve essere sufficiente per contenere una singola struttura SYSTEM_SPECULATION_CONTROL_INFORMATION con il layout seguente:
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 indica se le funzionalità di controllo della speculazione sono supportate e abilitate.
BpbDisabledSystemPolicy indica se le funzionalità di controllo della speculazione sono disabilitate a causa dei criteri di sistema.
BpbDisabledNoHardwareSupport se le funzionalità di controllo della speculazione sono disabilitate a causa dell'assenza di supporto hardware.
SpecCtrlEnumerated se il IA32_SPEC_CTRL MSR viene enumerato dall'hardware.
SpecCmdEnumerated indica se il IA32_SPEC_CMD MSR viene enumerato dall'hardware.
IbrsPresent indica se l'msR IBRS viene considerato presente.
StibpPresent indica se è presente l'MSR STIBP.
SmepPresent indica se la funzionalità SMEP è presente e abilitata.
L'oggetto SpeculativeStoreBypassDisableAvailable indica se gli altri campi di bypass dell'archivio speculativo (SSBD) in questa struttura di dati sono supportati dal sistema operativo.
L'oggetto SpeculativeStoreBypassDisableSupported indica se è presente il supporto hardware per SSBD.
L'oggetto SpeculativeStoreBypassDisabledSystemWide indica se SSBD è stato abilitato a livello di sistema.
SpeculativeStoreBypassDisabledKernel indica se SSBD è stato disabilitato per la modalità kernel.
L'oggetto SpeculativeStoreBypassDisableRequired indica se l'hardware è noto per essere soggetto al bypass dell'archivio speculativo.
BpbDisabledKernelToUser indica se la stima del ramo indiretto viene scaricata su ogni kernel per la transizione dell'utente.
Il membro riservato della struttura è riservato per l'uso interno del sistema operativo.
SYSTEM_TIMEOFDAY_INFORMATION
Quando il parametro SystemInformationClass è SystemTimeOfDayInformation, il buffer a cui punta il parametro SystemInformation deve essere sufficiente per contenere una struttura di SYSTEM_TIMEOFDAY_INFORMATION opaca da usare per generare un seeding imprevedibile per un generatore di numeri casuali. A questo scopo, la struttura ha il layout seguente:
typedef struct _SYSTEM_TIMEOFDAY_INFORMATION {
BYTE Reserved1[48];
} SYSTEM_TIMEOFDAY_INFORMATION;
I singoli membri della struttura sono riservati all'uso interno del sistema operativo.
Usare invece la funzione CryptGenRandom per generare dati crittografici casuali.
[in] SystemInformationLength
Dimensioni del buffer a cui punta il parametro SystemInformation , in byte.
[out, optional] ReturnLength
Puntatore facoltativo a una posizione in cui la funzione scrive le dimensioni effettive delle informazioni richieste. Se la dimensione è minore o uguale a
Parametro SystemInformationLength , la funzione copia le informazioni nel buffer SystemInformation ; in caso contrario, restituisce un codice di errore NTSTATUS e restituisce in ReturnLength le dimensioni del buffer necessarie per ricevere le informazioni richieste.
Valore restituito
Restituisce un codice NTSTATUS riuscito o di errore.
I moduli e il significato dei codici di errore NTSTATUS sono elencati nel file di intestazione Ntstatus.h disponibile nella DDK e sono descritti nella documentazione DDK.
Commenti
La funzione NtQuerySystemInformation e le strutture restituite sono interne al sistema operativo e soggette a modifiche da una versione di Windows a un'altra. Per mantenere la compatibilità dell'applicazione, è preferibile usare le funzioni alternative indicate in precedenza.
Se si usa NtQuerySystemInformation, accedere alla funzione tramite il collegamento dinamico di runtime. Ciò consente al codice di rispondere in modo normale se la funzione è stata modificata o rimossa dal sistema operativo. Le modifiche alla firma, tuttavia, potrebbero non essere rilevabili.
Questa funzione non ha alcuna libreria di importazione associata. È necessario usare le funzioni LoadLibrary e GetProcAddress per collegare dinamicamente a Ntdll.dll.
Requisiti
Piattaforma di destinazione | Windows |
Intestazione | winternl.h |
Libreria | ntdll.lib |
DLL | ntdll.dll |