RtlGetElementGenericTableAvl-Funktion (ntddk.h)

Die RtlGetElementGenericTableAvl-Routine gibt einen Zeiger auf die vom Aufrufer bereitgestellten Daten für ein bestimmtes generisches Adelson-Velsky/Landis-Tabellenelement (AVL) 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 I-ten-Element abgerufen werden soll. Die Tabelle muss durch Aufrufen von RtlInitializeGenericTableAvl initialisiert worden sein.

[in] I

Index des ausgewählten Elements. Dieser Wert ist nullbasiert, sodass der Index des zuletzt eingefügten Elements, das derzeit in Table enthalten ist, immer ein kleiner als der von RtlNumberGenericTableElementsAvl zurückgegebene Wert ist.

Rückgabewert

RtlGetElementGenericTableAvl gibt einen Zeiger auf die vom Aufrufer bereitgestellten Daten für das I-ten-Element in der generischen AVL-Tabelle zurück. Er gibt NULL zurück, wenn das angegebene I zu groß ist oder wenn die generische AVL-Tabelle derzeit keine Elemente enthält.

Hinweise

RtlGetElementGenericTableAvl gibt das I-ten-Element zurück, das in die generische AVL-Tabelle eingefügt wurde. Um das erste Element abzurufen, legen Sie I auf 0 (null) fest. Um das letzte Element abzurufen, legen Sie I auf (RtlNumberGenericTableElementsAvl(Table)-1) fest. Wenn ein Element aus der generischen Tabelle gelöscht wird, werden die Indizes aller Elemente, die nach dem gelöschten Element eingefügt werden, verringert. Daher kann sich der Index eines Elements im Laufe der Zeit ändern.

RtlGetElementGenericTableAvl ist effizienter als RtlLookupElementGenericTableAvl , wenn der Aufrufer den Index eines bestimmten Elements bereitstellen kann, für das der Aufrufer Zugriff auf die zugeordneten Daten benötigt. Das wiederholte Aufrufen von RtlGetElementGenericTableAvl zum Testen auf ein solches Element ist jedoch weniger effizient als der Aufruf von 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, 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 RTL_USE_AVL_TABLES nicht definiert ist, müssen Sie die AVL-Form der generischen Tabellenroutinen verwenden. Verwenden Sie beispielsweise die RtlGetElementGenericTableAvl-Routine anstelle von RtlGetElementGenericTable. Im Aufruf von RtlGetElementGenericTableAvl muss der Aufrufer anstelle von RTL_GENERIC_TABLE eine RTL_AVL_TABLE Tabellenstruktur übergeben.

Aufrufer von RtlGetElementGenericTableAvl müssen im IRQL-DISPATCH_LEVEL < ausgeführt werden, wenn der vom Aufrufer zugewiesene Arbeitsspeicher für die generische Tabelle ausgelagert werden kann.

Anforderungen

Anforderung Wert
Unterstützte Mindestversion (Client) Verfügbar mit Windows XP.
Zielplattform Universell
Header ntddk.h (include Ntddk.h, Ntifs.h)
Bibliothek NtosKrnl.lib
DLL NtosKrnl.exe
IRQL Beliebige Ebene (siehe Hinweise)

Weitere Informationen

RtlDeleteElementGenericTableAvl

RtlEnumerateGenericTableWithoutSplayingAvl

RtlInitializeGenericTableAvl

RtlInsertElementGenericTableAvl

RtlLookupElementGenericTableAvl

RtlNumberGenericTableElementsAvl