RtlLookupFirstMatchingElementGenericTableAvl-Funktion (ntddk.h)

Die RtlLookupFirstMatchingElementGenericTableAvl-Routine findet das linksste Element in der Struktur, das den angegebenen Daten entspricht.

Syntax

NTSYSAPI PVOID RtlLookupFirstMatchingElementGenericTableAvl(
  [in]  PRTL_AVL_TABLE Table,
  [in]  PVOID          Buffer,
  [out] PVOID          *RestartKey
);

Parameter

[in] Table

Ein Zeiger auf die generische Tabelle Adelson-Velsky/Landis (AVL) (RTL_AVL_TABLE).

[in] Buffer

Ein Puffer, der die Suchdaten enthält.

[out] RestartKey

Enthält in der Ausgabe einen Suchkontext, der mit einer Enumerationsroutine wie RtlEnumerateGenericTableWithoutSplayingAvl verwendet werden soll.

Rückgabewert

Die RtlLookupFirstMatchingElementGenericTableAvl-Routinegibt einen Zeiger auf die übereinstimmenden Daten oder NULL zurück, wenn keine Übereinstimmung gefunden wurde.

Hinweise

Eine Struktur, die eine generische Tabelle implementiert, kann mehrere Dateinamen enthalten, die sich nur für den Fall unterscheiden. Ein Suchalgorithmus kann diese Routine verwenden, um die erste Übereinstimmung ohne Verweis auf die Groß- und Kleinschreibung zu finden und eine Enumerationsroutine wie RtlEnumerateGenericTableWithoutSplayingAvl zu verwenden, um jede nachfolgende Übereinstimmung zurückzugeben.

Standardmäßig verwendet das Betriebssystem splay-Strukturen, um generische Tabellen zu implementieren, aber die RtlLookupFirstMatchingElementGenericTableAvl-Routinefunktioniert nur mit Adelson-Velsky/Landis-Bäumen (AVL). 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 Bäume beeinträchtigen die Leistung von Suchvorgängen. Mithilfe von Adelson-Velsky/Landis-Bäumen (AVL) können Sie eine ausgewogenere, flachere Strukturimplementierung generischer Tabellen sicherstellen. Wenn Sie die generischen Tabellenroutinen so konfigurieren möchten, dass sie AVL-Strukturen anstelle von splay-Strukturen 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 RTL_USE_AVL_TABLES nicht definiert ist, müssen Sie die AVL-Form der generischen Tabellenroutinen verwenden.

Aufrufer von RtlLookupFirstMatchingElementGenericTableAvl müssen unter <= APC_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 Vista.
Zielplattform Universell
Header ntddk.h (include FltKernel.h, Ntifs.h, Ntddk.h)
Bibliothek NtosKrnl.lib
DLL NtosKrnl.exe
IRQL <= APC_LEVEL (siehe Abschnitt Hinweise)

Weitere Informationen

RtlEnumerateGenericTableWithoutSplayingAvl