Fungsi AuxKlibQueryModuleInformation (aux_klib.h)

Rutinitas AuxKlibQueryModuleInformation mengambil informasi tentang modul gambar yang telah dimuat sistem operasi.

Sintaks

NTSTATUS AuxKlibQueryModuleInformation(
  [in, out]       PULONG BufferSize,
  [in]            ULONG  ElementSize,
  [out, optional] PVOID  QueryInfo
);

Parameter

[in, out] BufferSize

Penunjuk ke lokasi yang berisi atau menerima ukuran buffer, dalam byte. Jika QueryInfoADALAH NULL, lokasi menerima jumlah byte yang harus dialokasikan driver untuk array yang menerima informasi yang diambil. Jika QueryInfo bukan NULL, lokasi harus berisi jumlah byte yang ditentukan.

[in] ElementSize

Ukuran, dalam byte, dari setiap elemen array yang dituju queryInfo . Nilai ini harus sizeof(AUX_MODULE_BASIC_INFO) atau sizeof(AUX_MODULE_EXTENDED_INFO).

[out, optional] QueryInfo

Penunjuk ke array struktur AUX_MODULE_BASIC_INFO atau AUX_MODULE_EXTENDED_INFO yang menerima informasi tentang modul gambar yang dimuat. Jika pointer ini NULL, AuxKlibQueryModuleInformation menulis ukuran buffer yang diperlukan ke lokasi yang ditunjuk bufferSize .

Menampilkan nilai

AuxKlibQueryModuleInformation mengembalikan STATUS_SUCCESS jika operasi berhasil. AuxKlibQueryModuleInformation mengembalikan STATUS_BUFFER_TOO_SMALL jika penunjuk QueryInfo bukan NULL dan nilai BufferSize yang disediakan driver terlalu kecil.

Rutinitas mungkin mengembalikan nilai NTSTATUS lainnya.

Keterangan

Untuk mendapatkan informasi tentang modul gambar yang dimuat sistem operasi, driver harus:

  1. Panggil AuxKlibQueryModuleInformation dengan penunjuk QueryInfoNULL. Setelah AuxKlibQueryModuleInformation kembali, lokasi yang dituju parameter BufferSize akan berisi jumlah byte yang harus dialokasikan driver untuk array.
  2. Panggil rutinitas alokasi memori, seperti ExAllocatePoolWithTag, untuk mengalokasikan buffer untuk array.
  3. Panggil AuxKlibQueryModuleInformation lagi. Kali ini, penunjuk QueryInfo harus berisi alamat buffer yang dialokasikan. Setelah AuxKlibQueryModuleInformation kembali, buffer berisi array informasi modul.
Jumlah modul yang dimuat dapat berubah antara panggilan pertama dan kedua ke AuxKlibQueryModuleInformation. Akibatnya, panggilan kedua ke AuxKlibQueryModuleInformation mungkin mengembalikan STATUS_BUFFER_TOO_SMALL bahkan jika driver mengalokasikan buffer yang didasarkan pada ukuran yang diperoleh dari panggilan pertama.

Jika panggilan ke AuxKlibQueryModuleInformation berhasil, rutin menulis nilai ImageBase ke setiap elemen dalam array QueryInfo . Setiap nilai ImageBase adalah penunjuk ke dasar gambar driver yang dimuat. Penunjuk ini tetap valid hanya saat driver tetap dimuat. Pemanggil harus mengasumsikan bahwa driver dapat dibongkar kapan saja kecuali pemanggil dapat menjamin sebaliknya. Misalnya, driver mungkin dibongkar antara panggilan ke AuxKlibQueryModuleInformation yang mendapatkan penunjuk ke gambar driver dan panggilan ke AuxKlibGetImageExportDirectory yang menggunakan pointer ini.

Driver harus memanggil AuxKlibInitialize sebelum memanggil AuxKlibQueryModuleInformation.

Contoh

Contoh kode berikut mengilustrasikan langkah-langkah yang tercantum di bagian Keterangan sebelumnya.

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;
    }

Persyaratan

Persyaratan Nilai
Klien minimum yang didukung Didukung dimulai dengan Windows 2000.
Target Platform Universal
Header aux_klib.h (termasuk Aux_klib.h)
Pustaka Aux_Klib.lib
IRQL PASSIVE_LEVEL

Lihat juga

AUX_MODULE_BASIC_INFO

AUX_MODULE_EXTENDED_INFO

AuxKlibGetImageExportDirectory

AuxKlibInitialize

ExAllocatePoolWithTag