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. AuxKlibQueryModuleInformation devuelve STATUS_BUFFER_TOO_SMALL si el puntero QueryInfo no es NULL y el valor bufferSize proporcionado por el controlador es demasiado pequeño.
La rutina podría devolver otros valores NTSTATUS.
Comentarios
Para obtener información sobre los módulos de imagen cargados del sistema operativo, un controlador debe:
- Llame a AuxKlibQueryModuleInformation con un puntero QueryInfoNULL. Una vez devuelto AuxKlibQueryModuleInformation , la ubicación a la que apunta el parámetro BufferSize contendrá el número de bytes a los 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 que se devuelva AuxKlibQueryModuleInformation , el búfer contiene una matriz de información del módulo.
Si una llamada a AuxKlibQueryModuleInformation se realiza correctamente, la rutina escribe un valor de ImageBase en cada elemento de la matriz QueryInfo . Cada valor de ImageBase es un puntero a la base de una imagen de controlador cargada. Este puntero solo es válido mientras el controlador permanece cargado. El autor de la llamada debe suponer que el controlador se puede descargar en cualquier momento, a menos que el autor de la llamada pueda garantizar lo contrario. Por ejemplo, un controlador podría descargarse entre una llamada a AuxKlibQueryModuleInformation que obtiene un puntero a la imagen del controlador y una llamada a AuxKlibGetImageExportDirectory que usa este puntero.
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 | Value |
---|---|
Cliente mínimo compatible | Se admite a partir de Windows 2000. |
Plataforma de destino | Universal |
Encabezado | aux_klib.h (incluya Aux_klib.h) |
Library | Aux_Klib.lib |
IRQL | PASSIVE_LEVEL |
Consulte también
Comentarios
https://aka.ms/ContentUserFeedback.
Próximamente: A lo largo de 2024 iremos eliminando gradualmente GitHub Issues como mecanismo de comentarios sobre el contenido y lo sustituiremos por un nuevo sistema de comentarios. Para más información, vea:Enviar y ver comentarios de