Funzione RtlEnumerateGenericTable (ntddk.h)

La routine RtlEnumerateGenericTable viene usata per enumerare gli elementi in una tabella generica.

Sintassi

NTSYSAPI PVOID RtlEnumerateGenericTable(
  [in] PRTL_GENERIC_TABLE Table,
  [in] BOOLEAN            Restart
);

Parametri

[in] Table

Puntatore alla tabella generica (RTL_GENERIC_TABLE). La tabella deve essere stata inizializzata chiamando RtlInitializeGenericTable.

[in] Restart

Impostare su TRUE se l'enumerazione deve iniziare al primo elemento della tabella. Impostare su FALSE se si riprende l'enumerazione da una chiamata precedente.

Per enumerare tutti gli elementi nella tabella, usare RtlEnumerateGenericTable come indicato di seguito:

for (p = RtlEnumerateGenericTable ( Table, TRUE );
     p != NULL;
     p = RtlEnumerateGenericTable ( Table, FALSE )) {
        // Process the element pointed to by p
}

Valore restituito

RtlEnumerateGenericTable restituisce un puntatore all'elemento successivo, se presente. Se nella tabella non sono presenti altri elementi, RtlEnumerateGenericTable restituisceNULL.

Commenti

RtlEnumerateGenericTable appiattisce la tabella generica convertendola da un albero di riproduzione in un elenco collegato ordinato. Per enumerare la tabella senza appiattirla, usare RtlEnumerateGenericTableWithoutSplaying.

Chiamanti del Rtl.. Le routine genericTable sono responsabili della sincronizzazione esclusiva dell'accesso alla tabella generica. Un mutex veloce esclusivo è il meccanismo di sincronizzazione più efficiente da usare per questo scopo.

Per impostazione predefinita, il sistema operativo usa alberi di riproduzione per implementare tabelle generiche. In alcune circostanze, le operazioni su un albero di riproduzione renderanno l'albero profondo e stretto e potrebbe anche trasformarlo in una linea retta. Gli alberi molto profondi riducono le prestazioni delle ricerche. È possibile garantire un'implementazione ad albero più bilanciata e superficiale delle tabelle generiche usando alberi Adelson-Velsky/Landis (AVL). Se si desidera configurare le routine di tabella generiche per usare alberi AVL anziché alberi di riproduzione nel driver, inserire l'istruzione define seguente in un file di intestazione comune prima di includere Ntddk.h:

#define RTL_USE_AVL_TABLES 0

Se RTL_USE_AVL_TABLES non è definito, è necessario usare il formato AVL delle routine di tabella generiche. Ad esempio, usare la routine RtlEnumerateGenericTableAvl anziché RtlEnumerateGenericTable. Nella chiamata a RtlEnumerateGenericTableAvl, il chiamante deve passare una struttura di tabella RTL_AVL_TABLE anziché RTL_GENERIC_TABLE.

I chiamanti di RtlEnumerateGenericTable devono essere in esecuzione in IRQL < DISPATCH_LEVEL se la memoria allocata dal chiamante per la tabella generica è paginabile.

Requisiti

Requisito Valore
Piattaforma di destinazione Universale
Intestazione ntddk.h (include Ntddk.h, Ntifs.h, Fltkernel.h)
Libreria NtosKrnl.lib
DLL NtosKrnl.exe
IRQL DISPATCH_LEVEL IRQL < (vedere la sezione Osservazioni)

Vedi anche

ExInitializeFastMutex

RtlEnumerateGenericTableWithoutSplaying

RtlInitializeGenericTable

RtlIsGenericTableEmpty

RtlNumberGenericTableElements