Funzione RtlEnumerateGenericTableWithoutSplayingAvl (ntddk.h)

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

Sintassi

NTSYSAPI PVOID RtlEnumerateGenericTableWithoutSplayingAvl(
  [in]      PRTL_AVL_TABLE Table,
  [in, out] PVOID          *RestartKey
);

Parametri

[in] Table

Puntatore alla tabella generica (RTL_AVL_TABLE). La tabella deve essere stata inizializzata chiamando RtlInitializeGenericTableAvl.

[in, out] RestartKey

Indirizzo dell'elemento restituito dalla chiamata precedente a RtlEnumerateGenericTableWithoutSplayingAvl. Deve essere impostato su NULL se l'enumerazione deve iniziare al primo elemento della tabella.

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

RestartKey = NULL;
for (ptr = RtlEnumerateGenericTableWithoutSplayingAvl(Table, &RestartKey);
     ptr != NULL;
     ptr = RtlEnumerateGenericTableWithoutSplayingAvl(Table, &RestartKey)) {
        // Process the element pointed to by ptr
}

Valore restituito

RtlEnumerateGenericTableWithoutSplayingAvl restituisce un puntatore alla struttura definita dal chiamante associata all'elemento. Restituisce NULL se RestartKey è NULL e la tabella non ha elementi o se RestartKey è un puntatore restituito e non esiste alcun elemento successivo.

Commenti

La routine RtlEnumerateGenericTableWithoutSplayingAvl non funziona effettivamente con un albero di riproduzione, ma fornisce una routine denominata analoga a RtlEnumerateGenericTableWithoutSplayingAvl.

RtlEnumerateGenericTableWithoutSplayingAvl può essere chiamato ripetutamente per elaborare i dati del chiamante in ogni elemento di una tabella generica.

Per impostazione predefinita, il sistema operativo usa alberi splay per implementare tabelle generiche, ma la routine RtlLookupElementGenericTableFullAvl funziona solo con alberi Adelson-Velsky/Landis (AVL). Per 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 RtlEnumerateGenericTableWithoutSplayingAvl anziché RtlEnumerateGenericTableWithoutSplaying. Nella chiamata a RtlEnumerateGenericTableWithoutSplayingAvl, il chiamante deve passare una struttura di tabella RTL_AVL_TABLE anziché RTL_GENERIC_TABLE.

Chiamanti del Rtl*. Le routine GenericTableAvl* 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.

I chiamanti di RtlEnumerateGenericTableWithoutSplayingAvl 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)
Libreria NtosKrnl.lib
DLL NtosKrnl.exe
IRQL Vedere La sezione Osservazioni.

Vedi anche

RtlEnumerateGenericTableAvl

RtlInitializeGenericTableAvl

RtlIsGenericTableEmptyAvl

RtlNumberGenericTableElementsAvl