Função AuxKlibQueryModuleInformation (aux_klib.h)
A rotina
Sintaxe
NTSTATUS AuxKlibQueryModuleInformation(
[in, out] PULONG BufferSize,
[in] ULONG ElementSize,
[out, optional] PVOID QueryInfo
);
Parâmetros
[in, out] BufferSize
Um ponteiro para um local que contém ou recebe um tamanho de buffer, em bytes. Se queryInfo for NULL, o local receberá o número de bytes que o driver deve alocar para a matriz que recebe as informações recuperadas. Se QueryInfo não estiver NULL, o local deverá conter o número especificado de bytes.
[in] ElementSize
O tamanho, em bytes, de cada elemento da matriz que queryInfo aponta. Esse valor deve ser sizeof(AUX_MODULE_BASIC_INFO) ou sizeof(AUX_MODULE_EXTENDED_INFO).
[out, optional] QueryInfo
Um ponteiro para uma matriz de estruturas de AUX_MODULE_BASIC_INFO ou AUX_MODULE_EXTENDED_INFO que recebe informações sobre módulos de imagem carregados. Se esse ponteiro for NULL, AuxKlibQueryModuleInformation gravará o tamanho do buffer necessário no local para o qual o BufferSize aponta.
Valor de retorno
AuxKlibQueryModuleInformation retornará STATUS_SUCCESS se a operação for bem-sucedida.
A rotina pode retornar outros valores NTSTATUS .
Observações
Para obter informações sobre os módulos de imagem carregados do sistema operacional, um driver deve:
-
Chame
AuxKlibQueryModuleInformation com um ponteiro NULL QueryInfo. Depois que AuxKlibQueryModuleInformation retorna, o local para o qual o parâmetro BufferSize conterá o número de bytes que o driver terá que alocar para a matriz. - Chame uma rotina de alocação de memória, como ExAllocatePoolWithTag, para alocar um buffer para a matriz.
-
Chame AuxKlibQueryModuleInformation novamente. Desta vez, o ponteiro
QueryInfo deve conter o endereço do buffer alocado. Depois que AuxKlibQueryModuleInformation retorna, o buffer contém uma matriz de informações do módulo.
Se uma chamada para
Os drivers devem chamar AuxKlibInitialize antes de chamar AuxKlibQueryModuleInformation.
Exemplos
O exemplo de código a seguir ilustra as etapas listadas na seção Comentários 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 |
---|---|
de cliente com suporte mínimo | Com suporte a partir do Windows 2000. |
da Plataforma de Destino |
Universal |
cabeçalho | aux_klib.h (incluir Aux_klib.h) |
biblioteca | Aux_Klib.lib |
IRQL | PASSIVE_LEVEL |