Función AuxKlibQueryModuleInformation (aux_klib.h)
La rutina AuxKlibQueryModuleInformation recupera información sobre los módulos de imagen que el sistema operativo ha cargado.
Sintaxis
NTSTATUS AuxKlibQueryModuleInformation(
[in, out] PULONG BufferSize,
[in] ULONG ElementSize,
[out, optional] PVOID QueryInfo
);
Parámetros
[in, out] BufferSize
Puntero a una ubicación que contiene o recibe un tamaño de búfer, en bytes. Si QueryInfo es NULL, la ubicación recibe el número de bytes que el controlador debe asignar para la matriz que recibe la información recuperada. Si QueryInfo no es null, la ubicación debe contener el número especificado de bytes.
[in] ElementSize
Tamaño, en bytes, de cada elemento de la matriz a la que apunta QueryInfo. Este valor debe ser sizeof(AUX_MODULE_BASIC_INFO) o sizeof(AUX_MODULE_EXTENDED_INFO).
[out, optional] QueryInfo
Puntero a una matriz de estructuras de AUX_MODULE_BASIC_INFO o AUX_MODULE_EXTENDED_INFO que recibe información sobre los módulos de imagen cargados. Si este puntero es NULL , AuxKlibQueryModuleInformation escribe el tamaño de búfer necesario en la ubicación a la que BufferSize apunta.
Valor devuelto
AuxKlibQueryModuleInformation devuelve STATUS_SUCCESS si la operación se realiza correctamente.
La rutina puede devolver otros valores NTSTATUS de .
Observaciones
Para obtener información sobre los módulos de imagen cargados del sistema operativo, un controlador debe:
- Llame a AuxKlibQueryModuleInformation con un puntero de NULLQueryInfo. Después de AuxKlibQueryModuleInformation, la ubicación a la que apunta el parámetro BufferSize contendrá el número de bytes que tendrá que asignar el controlador para la matriz.
- Llame a una rutina de asignación de memoria, como ExAllocatePoolWithTag, para asignar un búfer para la matriz.
- Vuelva a llamar a AuxKlibQueryModuleInformation. Esta vez, el puntero QueryInfo debe contener la dirección del búfer asignado. Después de AuxKlibQueryModuleInformation devuelve, el búfer contiene una matriz de información del módulo.
Si una llamada a
Los controladores deben llamar a AuxKlibInitialize antes de llamar a AuxKlibQueryModuleInformation.
Ejemplos
En el ejemplo de código siguiente se muestran los pasos que aparecen en la sección Comentarios anterior.
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;
}
Requisitos
Requisito | Valor |
---|---|
cliente mínimo admitido | Se admite a partir de Windows 2000. |
de la plataforma de destino de |
Universal |
encabezado de |
aux_klib.h (incluya Aux_klib.h) |
biblioteca de |
Aux_Klib.lib |
irQL | PASSIVE_LEVEL |