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) |