RtlGetElementGenericTableAvl-Funktion (ntddk.h)
Die RtlGetElementGenericTableAvl Routine gibt einen Zeiger auf die vom Aufrufer bereitgestellten Daten für ein bestimmtes generisches Adelson-Velsky/Landis (AVL)-Tabellenelement zurück.
Syntax
NTSYSAPI PVOID RtlGetElementGenericTableAvl(
[in] PRTL_AVL_TABLE Table,
[in] ULONG I
);
Parameter
[in] Table
Zeiger auf die generische AVL-Tabelle (RTL_AVL_TABLE), aus der das Ith-Element abgerufen werden soll. Die Tabelle muss durch Aufrufen von RtlInitializeGenericTableAvlinitialisiert worden sein.
[in] I
Index des ausgewählten Elements. Dieser Wert ist nullbasiert, sodass der Index des zuletzt eingefügten Elements, das sich derzeit in Table befindet, immer ein kleiner als der von RtlNumberGenericTableElementsAvlzurückgegebene Wert ist.
Rückgabewert
RtlGetElementGenericTableAvl gibt einen Zeiger auf die vom Aufrufer bereitgestellten Daten für das Ith-Element in der generischen AVL-Tabelle zurück. Sie gibt NULL- zurück, wenn die angegebene zu groß ist oder die generische AVL-Tabelle derzeit keine Elemente enthält.
Bemerkungen
RtlGetElementGenericTableAvl gibt das Ith-Element zurück, das in die generische AVL-Tabelle eingefügt wurde. Um das erste Element abzurufen, legen Sie ich auf Null fest. Um das letzte Element abzurufen, legen Sie I auf (RtlNumberGenericTableElementsAvl(Table)-1) fest. Beachten Sie, dass, wenn ein Element aus der generischen Tabelle gelöscht wird, die Indizes aller Elemente, die nach der Dekrementierung des gelöschten Elements eingefügt wurden. Daher kann sich der Index eines Elements im Laufe der Zeit ändern.
RtlGetElementGenericTableAvl effizienter als RtlLookupElementGenericTableAvl, wenn der Aufrufer den Index eines bestimmten Elements bereitstellen kann, für das der Aufrufer Zugriff auf die zugehörigen Daten benötigt. Das Aufrufen RtlGetElementGenericTableAvl wiederholt zu testen, um ein solches Element zu testen, ist jedoch weniger effizient als das Aufrufen RtlLookupElementGenericTableAvl, um es zu finden.
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 RTL_USE_AVL_TABLES nicht definiert ist, müssen Sie die AVL-Form der generischen Tabellenroutinen verwenden. Verwenden Sie z. B. die RtlGetElementGenericTableAvl Routine anstelle von RtlGetElementGenericTable. Im Aufruf von RtlGetElementGenericTableAvlmuss der Aufrufer eine RTL_AVL_TABLE Tabellenstruktur statt RTL_GENERIC_TABLEübergeben.
Aufrufer von RtlGetElementGenericTableAvl- müssen bei IRQL-< DISPATCH_LEVEL ausgeführt werden, wenn der vom Aufrufer zugewiesene Speicher für die generische Tabelle seitenfähig ist.
Anforderungen
Anforderung | Wert |
---|---|
mindestens unterstützte Client- | Verfügbar mit Windows XP. |
Zielplattform- | Universal |
Header- | ntddk.h (enthalten Ntddk.h, Ntifs.h) |
Library | NtosKrnl.lib |
DLL- | NtosKrnl.exe |
IRQL- | Beliebige Ebene (siehe Hinweise) |
Siehe auch
RtlDeleteElementGenericTableAvl
RtlEnumerateGenericTableWithoutSplayingAvl
RtlInsertElementGenericTableAvl