RtlEnumerateGenericTableWithoutSplayingAvl-Funktion (ntddk.h)
Die RtlEnumerateGenericTableWithoutSplayingAvl-Routine wird verwendet, um die Elemente in einer generischen Tabelle aufzulisten.
Syntax
NTSYSAPI PVOID RtlEnumerateGenericTableWithoutSplayingAvl(
[in] PRTL_AVL_TABLE Table,
[in, out] PVOID *RestartKey
);
Parameter
[in] Table
Ein Zeiger auf die generische Tabelle (RTL_AVL_TABLE). Die Tabelle muss durch Aufrufen von RtlInitializeGenericTableAvl initialisiert worden sein.
[in, out] RestartKey
Eine Adresse des Elements, das vom vorherigen Aufruf von RtlEnumerateGenericTableWithoutSplayingAvl zurückgegeben wurde. Sollte auf NULL festgelegt werden, wenn die Enumeration am ersten Element in der Tabelle beginnen soll.
Um alle Elemente in der Tabelle aufzulisten, verwenden Sie RtlEnumerateGenericTableWithoutSplayingAvl wie folgt:
RestartKey = NULL;
for (ptr = RtlEnumerateGenericTableWithoutSplayingAvl(Table, &RestartKey);
ptr != NULL;
ptr = RtlEnumerateGenericTableWithoutSplayingAvl(Table, &RestartKey)) {
// Process the element pointed to by ptr
}
Rückgabewert
RtlEnumerateGenericTableWithoutSplayingAvl gibt einen Zeiger auf die vom Aufrufer definierte Struktur zurück, die dem Element zugeordnet ist. Null wird zurückgegeben , wenn RestartKeyNULL ist und die Tabelle keine Elemente enthält oder wenn RestartKey ein zurückgegebener Zeiger ist und kein nächstes Element vorhanden ist.
Hinweise
Die RtlEnumerateGenericTableWithoutSplayingAvl-Routine funktioniert nicht mit einer Splay-Struktur, sondern stellt eine analoge benannte Routine zu RtlEnumerateGenericTableWithoutSplayingAvl bereit.
RtlEnumerateGenericTableWithoutSplayingAvl kann wiederholt aufgerufen werden, um die Daten des Aufrufers in jedem Element einer generischen Tabelle zu verarbeiten.
Standardmäßig verwendet das Betriebssystem Splay-Strukturen, um generische Tabellen zu implementieren, aber die RtlLookupElementGenericTableFullAvl-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 RtlEnumerateGenericTableWithoutSplayingAvl-Routine anstelle von RtlEnumerateGenericTableWithoutSplaying. Im Aufruf von RtlEnumerateGenericTableWithoutSplayingAvl muss der Aufrufer anstelle von RTL_GENERIC_TABLE eine RTL_AVL_TABLE Tabellenstruktur übergeben.
Anrufer* 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.
Aufrufer von RtlEnumerateGenericTableWithoutSplayingAvl 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) |
Bibliothek | NtosKrnl.lib |
DLL | NtosKrnl.exe |
IRQL | Weitere Informationen finden Sie im Abschnitt mit den Hinweisen. |