Функция AuxKlibQueryModuleInformation (aux_klib.h)
Подпрограмма AuxKlibQueryModuleInformation извлекает сведения о модулях образов, загруженных операционной системой.
Синтаксис
NTSTATUS AuxKlibQueryModuleInformation(
[in, out] PULONG BufferSize,
[in] ULONG ElementSize,
[out, optional] PVOID QueryInfo
);
Параметры
[in, out] BufferSize
Указатель на расположение, содержащее или получающее размер буфера в байтах. Если параметр QueryInfo имеет значение NULL, расположение получает количество байтов, которое драйвер должен выделить для массива, получающего полученные сведения. Если значение 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, если операция выполнена успешно. AuxKlibQueryModuleInformation возвращает STATUS_BUFFER_TOO_SMALL, если указатель QueryInfo не равен NULL , а предоставленное драйвером значение BufferSize слишком мало.
Подпрограмма может возвращать другие значения NTSTATUS.
Комментарии
Чтобы получить сведения о загруженных модулях образов операционной системы, драйвер должен:
- Вызовите AuxKlibQueryModuleInformation с указателем QueryInfo NULL. После возврата 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 |
См. также раздел
Обратная связь
https://aka.ms/ContentUserFeedback.
Ожидается в ближайшее время: в течение 2024 года мы постепенно откажемся от GitHub Issues как механизма обратной связи для контента и заменим его новой системой обратной связи. Дополнительные сведения см. в разделеОтправить и просмотреть отзыв по