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 QueryInfo ポインターが NULL されず、ドライバーから提供された BufferSize 値が小さすぎる場合、STATUS_BUFFER_TOO_SMALLが返されます。

ルーチンは、他 NTSTATUS 値を返す場合があります。

備考

オペレーティング システムの読み込まれたイメージ モジュールに関する情報を取得するには、ドライバーは次の操作を行う必要があります。

  1. NULLQueryInfo ポインターを使用して、AuxKlibQueryModuleInformation 呼び出します。 AuxKlibQueryModuleInformation が返 後、BufferSize パラメーターが指す場所には、ドライバーが配列に割り当てる必要があるバイト数が含まれます。
  2. ExAllocatePoolWithTagなどのメモリ割り当てルーチン 呼び出して、配列のバッファーを割り当てます。
  3. AuxKlibQueryModuleInformation をもう一度 呼び出します。 今回は、QueryInfo ポインターに、割り当てられたバッファーのアドレスが含まれている必要があります。 AuxKlibQueryModuleInformation 戻った後、バッファーにはモジュール情報の配列が含まれます。
読み込まれたモジュールの数は、AuxKlibQueryModuleInformationを する 1 番目と 2 番目の呼び出しの間で変更できます。 その結果、AuxKlibQueryModuleInformation への 2 回目の呼び出しは、ドライバーが最初の呼び出しから取得したサイズに基づくバッファーを割り当てた場合でも、STATUS_BUFFER_TOO_SMALLを返す可能性があります。

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 以降でサポートされています。
ターゲット プラットフォーム の 万国
ヘッダー aux_klib.h (Aux_klib.h を含む)
ライブラリ Aux_Klib.lib
IRQL PASSIVE_LEVEL

関連項目

AUX_MODULE_BASIC_INFO

AUX_MODULE_EXTENDED_INFO

AuxKlibGetImageExportDirectory の

AuxKlibInitialize

ExAllocatePoolWithTag の