Freigeben über


RtlLookupElementGenericTableFullAvl-Funktion (ntddk.h)

Die RtlLookupElementGenericTableFullAvl Routine durchsucht eine generische Tabelle nach einem Element, das den angegebenen Daten entspricht.

Syntax

NTSYSAPI PVOID RtlLookupElementGenericTableFullAvl(
  [in]  PRTL_AVL_TABLE      Table,
  [in]  PVOID               Buffer,
  [out] PVOID               *NodeOrParent,
  [out] TABLE_SEARCH_RESULT *SearchResult
);

Parameter

[in] Table

Zeiger auf die generische Adelson-Velsky/Landis (AVL)-Tabelle (RTL_AVL_TABLE). Die Tabelle muss durch Aufrufen von RtlInitializeGenericTableAvlinitialisiert worden sein.

[in] Buffer

Ein Puffer von Suchdaten, die an die CompareRoutine- übergeben werden sollen, die registriert wurde, als RtlInitializeGenericTableAvl die generische Tabelle initialisiert. Weitere Informationen finden Sie in der Beschreibung von RtlInitializeGenericTableAvl.

[out] NodeOrParent

Bei der Ausgabe beschreibt ein Wert, der die Beziehung der NodeOrParent- mit dem Tabelleneintrag (Knoten) beschreibt, nach dem RtlLookupElementGenericTableFullAvl gesucht wird. Der parameter SearchResult kann einen der folgenden Werte aufweisen:

TableEmptyTree

Die Struktur war leer. Der Inhalt NodeOrParent- wurde nicht geändert.

TableFoundNode

Die RtlLookupElementGenericTableFullAvl Routine fand einen Tabelleneintrag, dessen Schlüssel mit den Daten in Bufferübereinstimmt. NodeOrParent- enthält einen Zeiger auf den übereinstimmenden Eintrag.

TableInsertAsLeft

Die RtlLookupElementGenericTableFullAvl Routine hat keinen Tabelleneintrag gefunden, dessen Schlüssel mit den Daten in Bufferübereinstimmt. Ichnichtf den Eintrag, nach dem RtlLookupElementGenericTableFullAvl gesucht in der Tabelle gesucht wurde, wäre es das linke untergeordnete Element des Eintrags, auf den NodeOrParent verweist.

TableInsertAsRight

Die RtlLookupElementGenericTableFullAvl Routine hat keinen Tabelleneintrag gefunden, dessen Schlüssel mit den Daten in Bufferübereinstimmt. Wenn der Eintrag, nach dem RtlLookupElementGenericTableFullAvl gesucht wurde, in der Tabelle enthalten wäre, wäre es das richtige untergeordnete Element des Eintrags, auf den NodeOrParent verweist.

[out] SearchResult

Ein Zeiger auf einen Tabelleneintrag. Wenn die RtlLookupElementGenericTableFullAvl Routine einem Eintrag entspricht, verweist NodeOrParentauf den übereinstimmenden Eintrag. Wenn die RtlLookupElementGenericTableFullAvl Routine keine Übereinstimmung findet, verweist NodeOrParent auf den Eintrag, der das übergeordnete Element des Eintrags sein würde, nach dem RtlLookupElementGenericTableFullAvl Routine gesucht wurde.

Rückgabewert

RtlLookupElementGenericTableFullAvl gibt einen Zeiger auf die Benutzerdaten zurück, die dem übereinstimmenden Element in der generischen Tabelle zugeordnet sind, oder NULL-, wenn die generische Tabelle derzeit keine Elemente enthält oder wenn kein übereinstimmende Element gefunden wird.

Bemerkungen

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 RtlLookupElementGenericTableFullAvl Routine anstelle von RtlLookupElementGenericTable. Im Aufruf von RtlLookupElementGenericTableFullAvlmuss der Aufrufer eine RTL_AVL_TABLE Tabellenstruktur statt RTL_GENERIC_TABLEübergeben.

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

Aufrufer von RtlLookupElementGenericTableFullAvl müssen bei IRQL-< DISPATCH_LEVEL ausgeführt werden, wenn eine der folgenden Bedingungen gilt:

  • Der vom Aufrufer zugewiesene Speicher in Table oder bei Buffer kann ausgelagert werden.
  • Der vom Aufrufer bereitgestellte CompareRoutine- enthält ausgelagerten Code.

Anforderungen

Anforderung Wert
mindestens unterstützte Client- Verfügbar ab Windows XP.
Zielplattform- Universal
Header- ntddk.h (enthalten Ntddk.h, Ntifs.h)
Library NtosKrnl.lib
DLL- NtosKrnl.exe
IRQL- < DISPATCH_LEVEL (siehe Abschnitt "Hinweise")

Siehe auch

RtlInitializeGenericTableAvl

RtlIsGenericTableEmptyAvl

RtlNumberGenericTableElementsAvl