Функция AuxKlibQueryModuleInformation (aux_klib.h)
Подпрограмма AuxKlibQueryModuleInformation извлекает сведения о модулях образа, загруженных операционной системой.
Синтаксис
NTSTATUS AuxKlibQueryModuleInformation(
[in, out] PULONG BufferSize,
[in] ULONG ElementSize,
[out, optional] PVOID QueryInfo
);
Параметры
[in, out] BufferSize
Указатель на расположение, содержащее или получающее размер буфера в байтах. Если QueryInfoNULL, расположение получает количество байтов, которые драйвер должен выделить для массива, получающего полученную информацию. Если QueryInfo не NULL, расположение должно содержать указанное количество байтов.
[in] ElementSize
Размер в байтах каждого элемента массива, на который QueryInfo указывает. Это значение должно быть sizeof(AUX_MODULE_BASIC_INFO) или sizeof(AUX_MODULE_EXTENDED_INFO).
[out, optional] QueryInfo
Указатель на массив AUX_MODULE_BASIC_INFO или AUX_MODULE_EXTENDED_INFO структур, получающих сведения о загруженных модулях образа. Если этот указатель NULL, AuxKlibQueryModuleInformation записывает требуемый размер буфера в расположение, на которое BufferSize указывает.
Возвращаемое значение
AuxKlibQueryModuleInformation возвращает STATUS_SUCCESS, если операция выполнена успешно.
Подпрограмма может возвращать другие значения NTSTATUS .
Замечания
Чтобы получить сведения о загруженных модулях образа операционной системы, драйвер должен:
- Вызов AuxKlibQueryModuleInformation с указателем NULLQueryInfo. После AuxKlibQueryModuleInformation расположение, на которое указывает параметр BufferSize, будет содержать количество байтов, которые драйвер должен выделить для массива.
- Вызовите подпрограмму выделения памяти, например ExAllocatePoolWithTag, чтобы выделить буфер для массива.
-
Снова вызовите AuxKlibQueryModuleInformation. На этот раз указатель QueryInfo
должен содержать адрес выделенного буфера. После AuxKlibQueryModuleInformation буфер содержит массив сведений о модуле.
Если вызов AuxKlibQueryModuleInformation выполнен, подпрограмма записывает значение ImageBase для каждого элемента в массиве QueryInfo. Каждое значение ImageBase — это указатель на базу загруженного образа драйвера. Этот указатель остается допустимым только в то время как драйвер остается загруженным. Вызывающий объект должен предположить, что драйвер можно выгрузить в любое время, если вызывающий объект не может гарантировать в противном случае. Например, драйвер может быть выгружен между вызовом AuxKlibQueryModuleInformation, который получает указатель на образ драйвера и вызов AuxKlibGetImageExportDirectory, использующий этот указатель.
Драйверы должны вызывать AuxKlibInitialize перед вызовом AuxKlibQueryModuleInformation.
Примеры
В следующем примере кода показаны шаги, перечисленные в предыдущем разделе "Примечания".
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;
}
Требования
Требование | Ценность |
---|---|
минимальные поддерживаемые клиентские | Поддерживается начиная с Windows 2000. |
целевая платформа | Всеобщий |
заголовка | aux_klib.h (включить Aux_klib.h) |
библиотеки |
Aux_Klib.lib |
IRQL | PASSIVE_LEVEL |