Freigeben über


RtlEnumerateGenericTableWithoutSplayingAvl-Funktion (ntddk.h)

Die RtlEnumerateGenericTableWithoutSplayingAvl Routine wird zum Aufzählen der Elemente in einer generischen Tabelle verwendet.

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 RtlInitializeGenericTableAvlinitialisiert worden sein.

[in, out] RestartKey

Eine Adresse des Elements, das vom vorherigen Aufruf an RtlEnumerateGenericTableWithoutSplayingAvlzurückgegeben wird. Sollte auf NULL- festgelegt werden, wenn die Enumeration beim ersten Element in der Tabelle beginnen soll.

Verwenden Sie zum Aufzählen aller Elemente in der Tabelle 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 dem Element zugeordnete aufruferdefinierte Struktur zurück. Sie gibt NULL- zurück, wenn RestartKeyNULL- ist und die Tabelle keine Elemente aufweist oder wenn RestartKey ein zurückgegebener Zeiger ist und kein nächstes Element vorhanden ist.

Bemerkungen

RtlEnumerateGenericTableWithoutSplayingAvl kann wiederholt aufgerufen werden, um die Daten des Aufrufers in jedem Element einer generischen Tabelle zu verarbeiten.

Elemente werden in der zurückgegebenen Reihenfolge zurückgegeben, wie durch den parameter PRTL_AVL_COMPARE_ROUTINE definiert wird, der an RtlInitializeGenericTableAvlbereitgestellt wird.

Standardmäßig verwendet das Betriebssystem Splay-Strukturen, um generische Tabellen zu implementieren, aber die RtlLookupElementGenericTableFullAvl Routine funktioniert nur mit Adelson-Velsky/Landis (AVL)-Strukturen. Um die generischen Tabellenroutinen für die Verwendung von AVL-Strukturen anstelle von Wiedergabestrukturen in Ihrem Treiber zu konfigurieren, fügen Sie die folgende Define-Anweisung in eine allgemeine Headerdatei ein, bevor Ntddk.heingeschlossen wird:

#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 RtlEnumerateGenericTableWithoutSplayingAvlmuss der Aufrufer eine RTL_AVL_TABLE Tabellenstruktur statt RTL_GENERIC_TABLEübergeben.

Anrufer des* 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 für diesen Zweck.

Anrufer von RtlEnumerateGenericTableWithoutSplayingAvl müssen bei IRQL-< DISPATCH_LEVEL ausgeführt werden, wenn der vom Aufrufer zugewiesene Speicher für die generische Tabelle seitenfähig ist.

Anforderungen

Anforderung Wert
Zielplattform- Universal
Header- ntddk.h (enthalten Ntddk.h, Ntifs.h)
Library NtosKrnl.lib
DLL- NtosKrnl.exe
IRQL- Siehe Abschnitt "Hinweise".

Siehe auch

RtlEnumerateGenericTableAvl

RtlInitializeGenericTableAvl

RtlIsGenericTableEmptyAvl

RtlNumberGenericTableElementsAvl