Freigeben über


AuxKlibQueryModuleInformation-Funktion (aux_klib.h)

Die AuxKlibQueryModuleInformation Routine ruft Informationen zu den Vom Betriebssystem geladenen Imagemodulen ab.

Syntax

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

Parameter

[in, out] BufferSize

Ein Zeiger auf eine Position, die eine Puffergröße in Bytes enthält oder empfängt. Wenn QueryInfo-NULL-ist, empfängt der Speicherort die Anzahl der Bytes, die der Treiber für das Array zuweisen muss, das die abgerufenen Informationen empfängt. Wenn QueryInfo- nicht NULL-ist, muss der Speicherort die angegebene Anzahl von Bytes enthalten.

[in] ElementSize

Die Größe jedes Elements des Arrays in Bytes, auf das QueryInfo verweist. Dieser Wert muss Größe(AUX_MODULE_BASIC_INFO) oder Größe(AUX_MODULE_EXTENDED_INFO) sein.

[out, optional] QueryInfo

Ein Zeiger auf ein Array von AUX_MODULE_BASIC_INFO oder AUX_MODULE_EXTENDED_INFO Strukturen, die Informationen zu geladenen Bildmodulen empfängt. Wenn dieser Zeiger NULL-ist, schreibt AuxKlibQueryModuleInformation die erforderliche Puffergröße an die Position, auf die BufferSize verweist.

Rückgabewert

AuxKlibQueryModuleInformation gibt STATUS_SUCCESS zurück, wenn der Vorgang erfolgreich ist. AuxKlibQueryModuleInformation gibt STATUS_BUFFER_TOO_SMALL zurück, wenn der QueryInfo Zeiger nicht NULL- ist und der vom Treiber bereitgestellte BufferSize Wert zu klein ist.

Die Routine gibt möglicherweise andere NTSTATUS-Wertezurück.

Bemerkungen

Um Informationen zu den geladenen Imagemodulen des Betriebssystems zu erhalten, muss ein Treiber:

  1. Rufen Sie AuxKlibQueryModuleInformation mit einem NULL-QueryInfo Zeiger auf. Nachdem AuxKlibQueryModuleInformation zurückgegeben wurde, enthält der Speicherort, auf den der BufferSize Parameter verweist, die Anzahl der Bytes, die der Treiber für das Array zuordnen muss.
  2. Rufen Sie eine Speicherzuordnungsroutine auf, z. B. ExAllocatePoolWithTag, um einen Puffer für das Array zuzuweisen.
  3. Rufen Sie AuxKlibQueryModuleInformation erneut auf. Dieses Mal muss der QueryInfo- Zeiger die Adresse des zugeordneten Puffers enthalten. Nachdem AuxKlibQueryModuleInformation zurückgegeben wurde, enthält der Puffer ein Array von Modulinformationen.
Die Anzahl der geladenen Module kann zwischen dem ersten und zweiten Aufruf von AuxKlibQueryModuleInformationgeändert werden. Daher gibt der zweite Aufruf von AuxKlibQueryModuleInformation möglicherweise STATUS_BUFFER_TOO_SMALL zurück, auch wenn der Treiber einen Puffer zuweist, der auf der Größe basiert, die vom ersten Aufruf abgerufen wurde.

Wenn ein Aufruf von AuxKlibQueryModuleInformation erfolgreich ist, schreibt die Routine einen ImageBase Wert in jedes Element im QueryInfo- Array. Jeder ImageBase Wert ist ein Zeiger auf die Basis eines geladenen Treiberimages. Dieser Zeiger bleibt nur gültig, während der Treiber geladen bleibt. Der Anrufer sollte davon ausgehen, dass der Treiber jederzeit entladen werden kann, es sei denn, der Anrufer kann andernfalls garantieren. Beispielsweise kann ein Treiber zwischen einem Aufruf von AuxKlibQueryModuleInformation entladen werden, der einen Zeiger auf das Treiberimage abruft und einen Aufruf von AuxKlibGetImageExportDirectory, die diesen Zeiger verwendet.

Treiber müssen AuxKlibInitialize- aufrufen, bevor AuxKlibQueryModuleInformationaufgerufen wird.

Beispiele

Im folgenden Codebeispiel werden die Schritte veranschaulicht, die im vorherigen Abschnitt "Hinweise" aufgeführt sind.

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

Anforderungen

Anforderung Wert
mindestens unterstützte Client- Wird ab Windows 2000 unterstützt.
Zielplattform- Universal
Header- aux_klib.h (einschließen Aux_klib.h)
Library Aux_Klib.lib
IRQL- PASSIVE_LEVEL

Siehe auch

AUX_MODULE_BASIC_INFO

AUX_MODULE_EXTENDED_INFO

AuxKlibGetImageExportDirectory

AuxKlibInitialize

ExAllocatePoolWithTag-