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. AuxKlibQueryModuleInformation retourne STATUS_BUFFER_TOO_SMALL si le pointeur QueryInfo n’est pas NULL et que la valeur de BufferSize fournie par le pilote est trop petite.
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 à AuxKlibQueryModuleInformation réussit, la routine écrit une valeur ImageBase dans chaque élément du tableau QueryInfo. Chaque valeur ImageBase est un pointeur vers la base d’une image de pilote chargée. Ce pointeur reste valide uniquement lorsque le pilote reste chargé. L’appelant doit supposer que le pilote peut être déchargé à tout moment, sauf si l’appelant peut garantir autrement. Par exemple, un pilote peut être déchargé entre un appel à AuxKlibQueryModuleInformation qui obtient un pointeur vers l’image du pilote et un appel à AuxKlibGetImageExportDirectory qui utilise ce pointeur.
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 |
En-tête | aux_klib.h (include Aux_klib.h) |
bibliothèque | Aux_Klib.lib |
IRQL | PASSIVE_LEVEL |