RtlEnumerateGenericTableAvl-Funktion (ntddk.h)
Die RtlEnumerateGenericTableAvl-Routine wird verwendet, um die Elemente in einer generischen Tabelle aufzulisten.
Syntax
NTSYSAPI PVOID RtlEnumerateGenericTableAvl(
[in] PRTL_AVL_TABLE Table,
[in] BOOLEAN Restart
);
Parameter
[in] Table
Ein Zeiger auf die generische Tabelle (RTL_AVL_TABLE). Die Tabelle muss durch Aufrufen von RtlInitializeGenericTableAvl initialisiert worden sein.
[in] Restart
Legen Sie diesen Wert auf TRUE fest, wenn die Enumeration am ersten Element in der Tabelle beginnen soll. Legen Sie diesen Wert auf FALSE fest, wenn die Enumeration aus einem vorherigen Aufruf fortgesetzt wird.
Um alle Elemente in der Tabelle aufzulisten, verwenden Sie RtlEnumerateGenericTableAvl wie folgt:
for (p = RtlEnumerateGenericTableAvl ( Table, TRUE );
p != NULL;
p = RtlEnumerateGenericTableAvl ( Table, FALSE )) {
// Process the element pointed to by p
}
Rückgabewert
RtlEnumerateGenericTableAvl gibt einen Zeiger auf das nächste Element zurück, sofern vorhanden. Wenn keine weiteren Elemente in der Tabelle vorhanden sind, gibt RtlEnumerateGenericTableAvlNULL zurück.
Hinweise
Anrufer der Rtl.. GenericTableAvl-Routinen sind für die ausschließliche Synchronisierung des Zugriffs auf die generische Tabelle verantwortlich. Ein exklusiver schneller Mutex ist der effizienteste Synchronisierungsmechanismus, der für diesen Zweck verwendet werden kann.
Standardmäßig verwendet das Betriebssystem Splay-Strukturen, um generische Tabellen zu implementieren, aber die RtlEnumerateGenericTableAvl-Routine funktioniert nur mit Adelson-Velsky/Landis-Strukturen (AVL). Um die generischen Tabellenroutinen so zu konfigurieren, dass sie AVL-Strukturen anstelle von Splaystrukturen in Ihrem Treiber verwenden, fügen Sie die folgende define-Anweisung in eine allgemeine Headerdatei ein, bevor Sie Ntddk.h einschließen:
#define RTL_USE_AVL_TABLES 0
Wenn RTL_USE_AVL_TABLES nicht definiert ist, müssen Sie die AVL-Form der generischen Tabellenroutinen verwenden. Verwenden Sie beispielsweise die RtlEnumerateGenericTableAvl-Routine anstelle von RtlEnumerateGenericTable. Im Aufruf von RtlEnumerateGenericTableAvl muss der Aufrufer anstelle von RTL_GENERIC_TABLE eine RTL_AVL_TABLE Tabellenstruktur übergeben.
Aufrufer von RtlEnumerateGenericTableAvl müssen im IRQL-DISPATCH_LEVEL < ausgeführt werden, wenn der vom Aufrufer zugewiesene Arbeitsspeicher für die generische Tabelle ausgelagert werden kann.
Anforderungen
Anforderung | Wert |
---|---|
Zielplattform | Universell |
Header | ntddk.h (include Ntddk.h, Ntifs.h, Fltkernel.h) |
Bibliothek | NtosKrnl.lib |
DLL | NtosKrnl.exe |
IRQL | IRQL-DISPATCH_LEVEL < (siehe Abschnitt "Hinweise") |