AuxKlibQueryModuleInformation, fonction (aux_klib.h)
La routine AuxKlibQueryModuleInformation récupère des informations sur les modules image que le système d’exploitation a chargés.
Syntaxe
NTSTATUS AuxKlibQueryModuleInformation(
[in, out] PULONG BufferSize,
[in] ULONG ElementSize,
[out, optional] PVOID QueryInfo
);
Paramètres
[in, out] BufferSize
Pointeur vers un emplacement qui contient ou reçoit une taille de mémoire tampon, en octets. Si queryInfo est NULL, l’emplacement reçoit le nombre d’octets que le pilote doit allouer pour le tableau qui reçoit les informations récupérées. Si queryInfo n’est pas NULL, l’emplacement doit contenir le nombre spécifié d’octets.
[in] ElementSize
Taille, en octets, de chaque élément du tableau vers lequel QueryInfo pointe. Cette valeur doit être taille de(AUX_MODULE_BASIC_INFO) ou taille de(AUX_MODULE_EXTENDED_INFO).
[out, optional] QueryInfo
Pointeur vers un tableau de structures AUX_MODULE_BASIC_INFO ou AUX_MODULE_EXTENDED_INFO qui reçoivent des informations sur les modules d’image chargés. Si ce pointeur est NULL, AuxKlibQueryModuleInformation écrit la taille de mémoire tampon requise à l’emplacement vers lequel BufferSize pointe.
Valeur de retour
AuxKlibQueryModuleInformation retourne STATUS_SUCCESS si l’opération réussit.
La routine peut retourner d’autres valeurs NTSTATUS .
Remarques
Pour obtenir des informations sur les modules d’image chargés du système d’exploitation, un pilote doit :
- Appelez AuxKlibQueryModuleInformation avec un pointeur NULLQueryInfo. Une fois AuxKlibQueryModuleInformation retourné, l’emplacement auquel le paramètre BufferSize pointe contiendra le nombre d’octets que le pilote devra allouer pour le tableau.
- Appelez une routine d’allocation de mémoire, telle que ExAllocatePoolWithTag, pour allouer une mémoire tampon pour le tableau.
- Appelez à nouveau AuxKlibQueryModuleInformation. Cette fois, le pointeur QueryInfo doit contenir l’adresse de la mémoire tampon allouée. Après AuxKlibQueryModuleInformation retourne, la mémoire tampon contient un tableau d’informations de module.
Si un appel à
Les pilotes doivent appeler AuxKlibInitialize avant d’appeler AuxKlibQueryModuleInformation.
Exemples
L’exemple de code suivant illustre les étapes répertoriées dans la section Notes précédentes.
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;
}
Exigences
Exigence | Valeur |
---|---|
client minimum pris en charge | Prise en charge à partir de Windows 2000. |
plateforme cible | Universel |
d’en-tête | aux_klib.h (include Aux_klib.h) |
bibliothèque | Aux_Klib.lib |
IRQL | PASSIVE_LEVEL |