Funzione AuxKlibQueryModuleInformation (aux_klib.h)
La routine AuxKlibQueryModuleInformation recupera informazioni sui moduli immagine caricati dal sistema operativo.
Sintassi
NTSTATUS AuxKlibQueryModuleInformation(
[in, out] PULONG BufferSize,
[in] ULONG ElementSize,
[out, optional] PVOID QueryInfo
);
Parametri
[in, out] BufferSize
Puntatore a una posizione che contiene o riceve una dimensione del buffer, in byte. Se QueryInfo è NULL, il percorso riceve il numero di byte che il driver deve allocare per la matrice che riceve le informazioni recuperate. Se QueryInfo non è NULL, il percorso deve contenere il numero specificato di byte.
[in] ElementSize
Dimensioni, in byte, di ogni elemento della matrice a cui QueryInfo punta. Questo valore deve essere sizeof(AUX_MODULE_BASIC_INFO) o sizeof(AUX_MODULE_EXTENDED_INFO).
[out, optional] QueryInfo
Puntatore a una matrice di strutture AUX_MODULE_BASIC_INFO o AUX_MODULE_EXTENDED_INFO che ricevono informazioni sui moduli immagine caricati. Se questo puntatore è NULL, AuxKlibQueryModuleInformation scrive le dimensioni del buffer necessarie nella posizione in cui BufferSize punta.
Valore restituito
AuxKlibQueryModuleInformation restituisce STATUS_SUCCESS se l'operazione ha esito positivo.
La routine potrebbe restituire altri valori NTSTATUS .
Osservazioni
Per ottenere informazioni sui moduli immagine caricati del sistema operativo, un driver deve:
-
Chiamare
AuxKlibQueryModuleInformation conun puntatore NULL QueryInfo . Dopo aver restituitoAuxKlibQueryModuleInformation, il percorso a cui punta il parametro BufferSize conterrà il numero di byte che il driver dovrà allocare per la matrice. - Chiamare una routine di allocazione di memoria, ad esempio ExAllocatePoolWithTag, per allocare un buffer per la matrice.
- Chiama di nuovo AuxKlibQueryModule Information. Questa volta, il puntatore QueryInfo deve contenere l'indirizzo del buffer allocato. Dopo restituito il AuxKlibQueryModuleInformation, il buffer contiene una matrice di informazioni sul modulo.
Se una chiamata a
I driver devono chiamare AuxKlibInitialize prima di chiamare AuxKlibQueryModuleInformation.
Esempi
Nell'esempio di codice seguente vengono illustrati i passaggi elencati nella sezione Osservazioni precedente.
NTSTATUS status;
ULONG modulesSize;
AUX_MODULE_EXTENDED_INFO* modules;
ULONG numberOfModules;
//
// Get the required array size.
//
status = AuxKlibQueryModuleInformation(
&modulesSize,
sizeof(AUX_MODULE_EXTENDED_INFO),
NULL
);
if (!NT_SUCCESS(status) || modulesSize == 0) {
break;
}
//
// Calculate the number of modules.
//
numberOfModules = modulesSize / sizeof(AUX_MODULE_EXTENDED_INFO);
//
// Allocate memory to receive data.
//
modules =
(AUX_MODULE_EXTENDED_INFO*) ExAllocatePoolWithTag(
PagedPool,
modulesSize,
'3LxF'
);
if (modules == NULL) {
status = STATUS_INSUFFICIENT_RESOURCES;
break;
}
RtlZeroMemory(
modules,
modulesSize
);
//
// Obtain the module information.
//
status = AuxKlibQueryModuleInformation(
&modulesSize,
sizeof(AUX_MODULE_EXTENDED_INFO),
modules
);
if (!NT_SUCCESS(status)) {
break;
}
Fabbisogno
Requisito | Valore |
---|---|
client minimo supportato | Supportato a partire da Windows 2000. |
piattaforma di destinazione | Universale |
intestazione |
aux_klib.h (includere Aux_klib.h) |
libreria |
Aux_Klib.lib |
IRQL | PASSIVE_LEVEL |