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を返します。 QueryInfo ポインターが NULL ではなく、ドライバー指定の BufferSize 値が小さすぎる場合、AuxKlibQueryModuleInformation はSTATUS_BUFFER_TOO_SMALLを返します。
ルーチンは、他の NTSTATUS 値を返す場合があります。
注釈
オペレーティング システムの読み込まれたイメージ モジュールに関する情報を取得するには、ドライバーで次の操作を行う必要があります。
- NULLQueryInfo ポインターを使用して AuxKlibQueryModuleInformation を呼び出します。 AuxKlibQueryModuleInformation が返された後、BufferSize パラメーターが指す場所には、ドライバーが配列に割り当てる必要があるバイト数が含まれます。
- ExAllocatePoolWithTag などのメモリ割り当てルーチンを呼び出して、配列のバッファーを割り当てます。
- AuxKlibQueryModuleInformation をもう一度呼び出します。 今回は、 QueryInfo ポインターに割り当てられたバッファーのアドレスが含まれている必要があります。 AuxKlibQueryModuleInformation が返された後、バッファーにはモジュール情報の配列が含まれます。
AuxKlibQueryModuleInformation の呼び出しが成功した場合、ルーチンは、QueryInfo 配列内の各要素に ImageBase 値を書き込みます。 各 ImageBase 値は、読み込まれたドライバー イメージのベースへのポインターです。 このポインターは、ドライバーの読み込み中にのみ有効なままです。 呼び出し元は、呼び出し元がそれ以外の場合を保証できない限り、いつでもドライバーをアンロードできると想定する必要があります。 たとえば、ドライバー イメージへのポインターを取得する AuxKlibQueryModuleInformation の呼び出しと、このポインターを使用する AuxKlibGetImageExportDirectory の呼び出しの間に、ドライバーがアンロードされる場合があります。
ドライバーは、AuxKlibQueryModuleInformation を呼び出す前に AuxKlibInitialize を呼び出す必要があります。
例
次のコード例は、前の「解説」セクションに記載されている手順を示しています。
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 以降でサポートされています。 |
対象プラットフォーム | ユニバーサル |
Header | aux_klib.h (Aux_klib.h を含む) |
Library | Aux_Klib.lib |
IRQL | PASSIVE_LEVEL |
こちらもご覧ください
フィードバック
https://aka.ms/ContentUserFeedback」を参照してください。
以下は間もなく提供いたします。2024 年を通じて、コンテンツのフィードバック メカニズムとして GitHub の issue を段階的に廃止し、新しいフィードバック システムに置き換えます。 詳細については、「フィードバックの送信と表示