RtlEnumerateGenericTable-Funktion (ntddk.h)
Die RtlEnumerateGenericTable-Routine wird verwendet, um die Elemente in einer generischen Tabelle aufzulisten.
Syntax
NTSYSAPI PVOID RtlEnumerateGenericTable(
[in] PRTL_GENERIC_TABLE Table,
[in] BOOLEAN Restart
);
Parameter
[in] Table
Ein Zeiger auf die generische Tabelle (RTL_GENERIC_TABLE). Die Tabelle muss durch Aufrufen von RtlInitializeGenericTable initialisiert worden sein.
[in] Restart
Legen Sie auf TRUE fest, wenn die Enumeration beim ersten Element in der Tabelle beginnen soll. Legen Sie auf FALSE fest, wenn die Enumeration aus einem vorherigen Aufruf fortgesetzt wird.
Um alle Elemente in der Tabelle aufzulisten, verwenden Sie RtlEnumerateGenericTable wie folgt:
for (p = RtlEnumerateGenericTable ( Table, TRUE );
p != NULL;
p = RtlEnumerateGenericTable ( Table, FALSE )) {
// Process the element pointed to by p
}
Rückgabewert
RtlEnumerateGenericTable gibt einen Zeiger auf das nächste Element zurück, sofern vorhanden. Wenn keine weiteren Elemente in der Tabelle vorhanden sind, gibt RtlEnumerateGenericTableNULL zurück.
Hinweise
RtlEnumerateGenericTable flacht die generische Tabelle ab, indem sie aus einer splay-Struktur in eine sortierte verknüpfte Liste konvertiert wird. Um die Tabelle aufzulisten, ohne sie zu verkürzen, verwenden Sie RtlEnumerateGenericTableWithoutSplaying.
Anrufer der Rtl.. GenericTable-Routinen sind ausschließlich für die 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 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. Verwenden Sie beispielsweise die RtlEnumerateGenericTableAvl-Routine anstelle von RtlEnumerateGenericTable. Beim Aufruf von RtlEnumerateGenericTableAvl muss der Aufrufer eine RTL_AVL_TABLE Tabellenstruktur übergeben und nicht RTL_GENERIC_TABLE.
Aufrufer von RtlEnumerateGenericTable müssen am IRQL-DISPATCH_LEVEL < ausgeführt werden, wenn der vom Aufrufer zugewiesene Arbeitsspeicher für die generische Tabelle ausgelagert werden kann.
Anforderungen
Anforderung | Wert |
---|---|
Zielplattform | Universell |
Header | ntddk.h (include Ntddk.h, Ntifs.h, Fltkernel.h) |
Bibliothek | NtosKrnl.lib |
DLL | NtosKrnl.exe |
IRQL | IRQL-DISPATCH_LEVEL < (siehe Abschnitt "Hinweise") |