RtlLookupElementGenericTable-Funktion (ntddk.h)
Die RtlLookupElementGenericTable Routine durchsucht eine generische Tabelle nach einem Element, das den angegebenen Daten entspricht.
Syntax
NTSYSAPI PVOID RtlLookupElementGenericTable(
PRTL_GENERIC_TABLE Table,
PVOID Buffer
);
Parameter
Table
Zeiger auf die generische Tabelle (RTL_GENERIC_TABLE). Die Tabelle muss durch Aufrufen von RtlInitializeGenericTable-initialisiert worden sein.
Buffer
Ein Puffer von Suchdaten, die an die CompareRoutine- übergeben werden sollen, die registriert wurde, als RtlInitializeGenericTable die generische Tabelle initialisiert. Weitere Informationen finden Sie in der Beschreibung von RtlInitializeGenericTable.
Rückgabewert
RtlLookupElementGenericTable gibt einen Zeiger auf die vom Aufrufer bereitgestellten Daten für das gewünschte Element in der generischen Tabelle zurück. Es wird NULL- zurückgegeben, wenn die generische Tabelle derzeit keine Elemente enthält oder wenn kein übereinstimmende Element gefunden wird.
Bemerkungen
Wenn ein übereinstimmende Element gefunden wird, RtlLookupElementGenericTable die Wiedergabestruktur der generischen Tabelle erneut ausgeglichen.
Anrufer der Rtl.. GenericTable-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.
Standardmäßig verwendet das Betriebssystem Splay-Strukturen, um generische Tabellen zu implementieren. Unter bestimmten Umständen werden Vorgänge in einem Spielbaum den Baum tief und schmal machen und ihn sogar in eine gerade Linie verwandeln. Sehr tiefe Bäume beeinträchtigen die Leistung von Suchvorgängen. Sie können eine ausgewogenere, flachere Strukturimplementierung generischer Tabellen sicherstellen, indem Sie Adelson-Velsky/Landis (AVL)-Strukturen verwenden. Wenn Sie die generischen Tabellenroutinen so konfigurieren möchten, dass AVL-Strukturen anstelle von Splay-Strukturen in Ihrem Treiber verwendet werden, fügen Sie die folgende Define-Anweisung in eine allgemeine Headerdatei ein, bevor Sie ntddk.heinschließen:
`#define RTL_USE_AVL_TABLES 0`
Wenn Sie RTL_USE_AVL_TABLES nicht wie oben angegeben definieren, müssen Sie die AVL-Form der generischen Tabellenroutinen verwenden. Verwenden Sie beispielsweise die RtlLookupElementGenericTableAvl Routine anstelle von RtlLookupElementGenericTable. Im Aufruf von RtlLookupElementGenericTableAvlmuss der Aufrufer eine RTL_AVL_TABLE Tabellenstruktur statt RTL_GENERIC_TABLEübergeben.
Anrufer von RtlLookupElementGenericTable 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.
Andernfalls können Aufrufer von RtlLookupElementGenericTable- bei IRQL-<= DISPATCH_LEVEL ausgeführt werden, wenn nicht ausgelagerter Speicher oder Code verwendet wird.
Anforderungen
Anforderung | Wert |
---|---|
Zielplattform- | Universal |
Header- | ntddk.h (enthalten Ntddk.h, Ntifs.h) |
Library | NtosKrnl.lib |
DLL- | NtosKrnl.exe |
IRQL- | Siehe Abschnitt "Hinweise". |