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:
- 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.
- Rufen Sie eine Speicherzuordnungsroutine auf, z. B. ExAllocatePoolWithTag, um einen Puffer für das Array zuzuweisen.
- 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.
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 |