Funzione ZwQuerySystemInformation

[ZwQuerySystemInformation non è più disponibile per l'uso a partire da Windows 8. Usare invece le funzioni alternative elencate in questo argomento.

Recupera le informazioni di sistema specificate.

Sintassi

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

Parametri

SystemInformationClass [in]

Tipo di informazioni di sistema da recuperare. Questo parametro può essere uno dei valori seguenti dal tipo di enumerazione SYSTEM_INFORMATION_CLASS .

SystemBasicInformation

Numero di processori nel sistema in una struttura SYSTEM_BASIC_INFORMATION . Usare invece la funzione GetSystemInfo .

SystemPerformanceInformation

Struttura SYSTEM_PERFORMANCE_INFORMATION opaca che può essere usata per generare un valore di inizializzazione imprevedibile per un generatore di numeri casuali. Usare invece la funzione CryptGenRandom .

SystemTimeOfDayInformation

Struttura SYSTEM_TIMEOFDAY_INFORMATION opaca che può essere usata per generare un valore di inizializzazione imprevedibile per un generatore di numeri casuali. Usare invece la funzione CryptGenRandom .

SystemProcessInformation

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 handle usati dal processo, l'utilizzo massimo dei file di pagina e il numero di pagine di memoria allocate dal processo.

SystemProcessorPerformanceInformation

Matrice di strutture SYSTEM_PROCESSOR_PERFORMANCE_INFORMATION , una per ogni processore installato nel sistema.

SystemInterruptInformation

Struttura SYSTEM_INTERRUPT_INFORMATION opaca che può essere usata per generare un valore di inizializzazione imprevedibile per un generatore di numeri casuali. Usare invece la funzione CryptGenRandom .

SystemExceptionInformation

Struttura SYSTEM_EXCEPTION_INFORMATION opaca che può essere usata per generare un valore di inizializzazione imprevedibile per un generatore di numeri casuali. Usare invece la funzione CryptGenRandom .

SystemRegistryQuotaInformation

Struttura SYSTEM_REGISTRY_QUOTA_INFORMATION .

SystemLookasideInformation

Struttura SYSTEM_LOOKASIDE_INFORMATION opaca che può essere usata per generare un valore di inizializzazione imprevedibile per un generatore di numeri casuali. Usare invece la funzione CryptGenRandom .

SystemInformation [in, out]

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 , come indicato nella tabella seguente.

SYSTEM_BASIC_INFORMATION

Quando il parametro SystemInformationClass è SystemBasicInformation, il buffer a cui punta il parametro SystemInformation deve essere sufficientemente grande da 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 invece GetSystemInfo per recuperare queste informazioni.

Gli altri membri della struttura sono riservati per l'uso interno da parte del sistema operativo.

SYSTEM_PERFORMANCE_INFORMATION

Quando il parametro SystemInformationClass è SystemPerformanceInformation, il buffer a cui punta il parametro SystemInformation deve essere sufficientemente grande da contenere una struttura SYSTEM_PERFORMANCE_INFORMATION opaca da utilizzare per generare un valore di inizializzazione 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 per l'uso interno da parte del sistema operativo.

Usare invece la funzione CryptGenRandom per generare dati crittograficamente casuali.

SYSTEM_TIMEOFDAY_INFORMATION

Quando il parametro SystemInformationClass è SystemTimeOfDayInformation, il buffer a cui punta il parametro SystemInformation deve essere sufficientemente grande da contenere una struttura SYSTEM_TIMEOFDAY_INFORMATION opaca da utilizzare per generare un valore di inizializzazione 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 per l'uso interno da parte del sistema operativo.

Usare invece la funzione CryptGenRandom per generare dati crittograficamente casuali.

SYSTEM_PROCESS_INFORMATION

Quando il parametro SystemInformationClass è SystemProcessInformation, il buffer a cui punta il parametro SystemInformation deve essere sufficientemente grande da contenere una matrice contenente il numero di strutture SYSTEM_PROCESS_INFORMATION in esecuzione nel sistema. Ogni struttura ha il layout seguente:

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

Il membro NumberOfThreads contiene il numero totale di thread attualmente in esecuzione nel processo.

Il membro HandleCount contiene il numero totale di handle utilizzati dal processo in questione; usare invece GetProcessHandleCount per recuperare queste informazioni.

Il membro PeakPagefileUsage contiene il numero massimo di byte di spazio di archiviazione di file di pagine utilizzato dal processo e il membro PrivatePageCount contiene il numero di pagine di memoria allocate per l'uso di questo processo.

È anche possibile recuperare queste informazioni usando la funzione GetProcessMemoryInfo o la classe Win32_Process .

Gli altri membri della struttura sono riservati per l'uso interno da parte del sistema operativo.

SYSTEM_PROCESSOR_PERFORMANCE_INFORMATION

Quando il parametro SystemInformationClass è SystemProcessorPerformanceInformation, il buffer a cui punta il parametro SystemInformation deve essere sufficientemente grande per contenere una matrice contenente tutte le strutture SYSTEM_PROCESS_INFORMATION in quanto sono installate processori (CPU) 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 la quantità di tempo inattiva del sistema, espressa in 1/100simi di nanosecondo.

Il membro KernelTime contiene la quantità di tempo impiegato dal sistema per l'esecuzione in modalità kernel (inclusi tutti i thread in tutti i processi, in tutti i processori), in 1/100simi di un nanosecondo.

Il membro UserTime contiene la quantità di tempo impiegato dal sistema in modalità utente (inclusi tutti i thread in tutti i processi, in tutti i processori), in 1/100 di un nanosecondo.

Usare invece GetSystemTimes per recuperare queste informazioni.

SYSTEM_INTERRUPT_INFORMATION

Quando il parametro SystemInformationClass è SystemInterruptInformation, il buffer a cui punta il parametro SystemInformation deve essere sufficientemente grande da contenere una matrice che contiene il numero di strutture SYSTEM_INTERRUPT_INFORMATION opache in cui sono installati processori (CPU) nel sistema. Ogni struttura, o la matrice nel suo complesso, può essere usata per generare un valore di inizializzazione 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 per l'uso interno da parte del sistema operativo.

Usare invece la funzione CryptGenRandom per generare dati crittograficamente casuali.

SYSTEM_EXCEPTION_INFORMATION

Quando il parametro SystemInformationClass è SystemExceptionInformation, il buffer a cui punta il parametro SystemInformation deve essere sufficientemente grande da contenere una struttura SYSTEM_EXCEPTION_INFORMATION opaca da utilizzare per generare un valore di inizializzazione 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 per l'uso interno da parte del sistema operativo.

Usare invece la funzione CryptGenRandom per generare dati crittograficamente casuali.

SYSTEM_REGISTRY_QUOTA_INFORMATION

Quando il parametro SystemInformationClass è SystemRegistryQuotaInformation, il buffer a cui punta il parametro SystemInformation deve essere sufficientemente grande 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ò raggiungere in questo sistema.

Il membro RegistryQuotaUsed contiene le dimensioni correnti del Registro di sistema, in byte.

Usare invece GetSystemRegistryQuota per recuperare queste informazioni.

L'altro membro della struttura è riservato per l'uso interno da parte del sistema operativo.

SYSTEM_LOOKASIDE_INFORMATION

Quando il parametro SystemInformationClass è SystemLookasideInformation, il buffer a cui punta il parametro SystemInformation deve essere sufficientemente grande da contenere una struttura SYSTEM_LOOKASIDE_INFORMATION opaca da utilizzare per generare un valore di inizializzazione 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 per l'uso interno da parte del sistema operativo.

Usare invece la funzione CryptGenRandom per generare dati crittograficamente casuali.

SystemInformationLength [in]

Dimensioni del buffer a cui punta il parametro SystemInformation , in byte.

ReturnLength [out, facoltativo]

Puntatore facoltativo in una posizione in cui la funzione scrive le dimensioni effettive delle informazioni richieste. Se tale dimensione è minore o uguale al parametro SystemInformationLength , la funzione copia le informazioni nel buffer SystemInformation ; in caso contrario, restituisce un codice di errore NTSTATUS e restituisce in ReturnLength la dimensione del buffer necessaria per ricevere le informazioni richieste.

Valore restituito

Restituisce un codice NTSTATUS riuscito o di errore.

Le forme e il significato dei codici di errore NTSTATUS sono elencati nel file di intestazione Ntstatus.h disponibile nella DDK e sono descritti nella documentazione di DDK.

Commenti

La funzione ZwQuerySystemInformation 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 invece le funzioni alternative indicate in precedenza.

Se si usa ZwQuerySystemInformation, accedere alla funzione tramite il collegamento dinamico in fase di esecuzione. In questo modo, il codice può rispondere normalmente se la funzione è stata modificata o rimossa dal sistema operativo. Le modifiche apportate alla firma, tuttavia, potrebbero non essere rilevabili.

Questa funzione non ha una libreria di importazione associata. È necessario usare le funzioni LoadLibrary e GetProcAddress per collegare dinamicamente a Ntdll.dll.

Requisiti

Requisito Valore
DLL
Ntdll.dll

Vedi anche

GetSystemInfo

GetProcessHandleCount

GetProcessMemoryInfo

GetSystemTimes

GetSystemRegistryQuota