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。 AuxKlibQueryModuleInformation 傳回STATUS_BUFFER_TOO_SMALL,如果 QueryInfo 指標未 NULL,且驅動程式提供的 BufferSize 值太小。
例程可能會傳回其他
言論
若要取得作業系統所載入映像模組的相關信息,驅動程序必須:
- 使用 NULLQueryInfo 指標呼叫 AuxKlibQueryModuleInformation。 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 |