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 Tabelle Adelson-Velsky/Landis (AVL) (RTL_AVL_TABLE). Die Tabelle muss durch Aufrufen von RtlInitializeGenericTableAvl initialisiert worden sein.
[in] Buffer
Ein Puffer von Suchdaten, die an die CompareRoutine übergeben werden sollen, die registriert wurde, als RtlInitializeGenericTableAvl die generische Tabelle initialisierte. Weitere Informationen finden Sie in der Beschreibung von RtlInitializeGenericTableAvl.
[out] NodeOrParent
In der Ausgabe ein Wert, der die Beziehung von NodeOrParent mit dem Tabelleneintrag (Knoten) beschreibt, nach dem RtlLookupElementGenericTableFullAvl sucht. Der SearchResult-Parameter kann einen der folgenden Werte aufweisen:
TableEmptyTree
Die Struktur war leer. Der Inhalt von NodeOrParent wurde nicht geändert.
TableFoundNode
Die RtlLookupElementGenericTableFullAvl-Routine hat einen Tabelleneintrag gefunden, dessen Schlüssel mit den Daten in Buffer übereinstimmt. NodeOrParent enthält einen Zeiger auf den übereinstimmenden Eintrag.
TableInsertAsLeft
Die RtlLookupElementGenericTableFullAvl-Routine hat keinenTabelleneintrag gefunden, dessen Schlüssel mit den Daten in Buffer übereinstimmt. Ich habenichtden Eintrag, nach dem RtlLookupElementGenericTableFullAvl gesucht hat, in der Tabelle, es wäre das linke untergeordnete Element des Eintrags, auf den NodeOrParent verweist.
TableInsertAsRight
Die RtlLookupElementGenericTableFullAvl-Routine hat keinenTabelleneintrag gefunden, dessen Schlüssel mit den Daten in Buffer übereinstimmt. Wenn sich der Von RtlLookupElementGenericTableFullAvl gesuchte Eintrag in der Tabelle befindet, wäre er das richtige untergeordnete Element des Eintrags, auf den NodeOrParent verweist.
[out] SearchResult
Ein Zeiger auf einen Tabelleneintrag. Wenn die RtlLookupElementGenericTableFullAvl-Routine mit einem Eintrag übereinstimmt, zeigt NodeOrParentauf den übereinstimmenden Eintrag. Wenn die RtlLookupElementGenericTableFullAvl-Routine keine Übereinstimmung findet, zeigt NodeOrParent auf den Eintrag, der das übergeordnete Element des Eintrags ist, nach dem die 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 wurde.
Hinweise
Standardmäßig verwendet das Betriebssystem splay-Strukturen, um generische Tabellen zu implementieren, aber die RtlLookupElementGenericTableFullAvl-Routine funktioniert nur mit Adelson-Velsky/Landis-Bäumen (AVL). 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 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 RtlLookupElementGenericTableFullAvl-Routine anstelle von RtlLookupElementGenericTable. Beim Aufruf von RtlLookupElementGenericTableFullAvl muss der Aufrufer eine RTL_AVL_TABLE Tabellenstruktur übergeben, anstatt RTL_GENERIC_TABLE.
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 erfüllt ist:
- Der vom Aufrufer zugewiesene Arbeitsspeicher bei Table oder bei Buffer kann ausgelagert werden.
- Die vom Aufrufer bereitgestellte CompareRoutine enthält ausserwählbaren Code.
Anforderungen
Anforderung | Wert |
---|---|
Unterstützte Mindestversion (Client) | Verfügbar ab Windows XP. |
Zielplattform | Universell |
Header | ntddk.h (include Ntddk.h, Ntifs.h) |
Bibliothek | NtosKrnl.lib |
DLL | NtosKrnl.exe |
IRQL | < DISPATCH_LEVEL (siehe Abschnitt Hinweise) |