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 initialisierte. 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. Null wird zurückgegeben , wenn die generische Tabelle derzeit keine Elemente enthält oder wenn kein übereinstimmende Element gefunden wird.

Hinweise

Wenn ein übereinstimmende Element gefunden wird, gleicht RtlLookupElementGenericTable die Wiedergabestruktur der generischen Tabelle neu aus.

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, der für diesen Zweck verwendet werden kann.

Standardmäßig verwendet das Betriebssystem Splay-Strukturen, um generische Tabellen zu implementieren. Unter bestimmten Umständen wird die Struktur durch Vorgänge in einer Splay-Struktur tief und schmal und kann sogar in eine gerade Linie umgewandelt werden. Sehr tiefe Strukturen beeinträchtigen die Leistung von Suchvorgängen. Sie können eine ausgewogenere, flachere Strukturimplementierung generischer Tabellen sicherstellen, indem Sie Adelson-Velsky/Landis-Strukturen (AVL) verwenden. Wenn Sie die generischen Tabellenroutinen so konfigurieren möchten, 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 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 RtlLookupElementGenericTableAvl muss der Aufrufer anstelle von RTL_GENERIC_TABLE eine RTL_AVL_TABLE Tabellenstruktur übergeben.

Aufrufer von RtlLookupElementGenericTable müssen unter IRQL < DISPATCH_LEVEL ausgeführt werden, wenn eine der folgenden Bedingungen erfüllt ist:

  • Der vom Aufrufer zugeordnete Arbeitsspeicher bei Table oder buffer kann ausgelagert werden.

  • Die vom Aufrufer bereitgestellte CompareRoutine enthält ausgelagerten Code.

Andernfalls können Aufrufer von RtlLookupElementGenericTable unter IRQL <= DISPATCH_LEVEL ausgeführt werden, wenn nicht ausgelagerter Arbeitsspeicher oder Code verwendet wird.

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.

Weitere Informationen

RTL_AVL_TABLE

RTL_GENERIC_TABLE

RtlInitializeGenericTable

RtlIsGenericTableEmpty

RtlNumberGenericTableElements