Condividi tramite


Funzione RtlGetElementGenericTableAvl (ntddk.h)

La routine RtlGetElementGenericTableAvl restituisce un puntatore ai dati forniti dal chiamante per un particolare elemento di tabella Adelson-Velsky/Landis (AVL).

Sintassi

NTSYSAPI PVOID RtlGetElementGenericTableAvl(
  [in] PRTL_AVL_TABLE Table,
  [in] ULONG          I
);

Parametri

[in] Table

Puntatore alla tabella AVL generica (RTL_AVL_TABLE) da cui recuperare il elemento th. La tabella deve essere stata inizializzata chiamando RtlInitializeGenericTableAvl.

[in] I

Indice dell'elemento selezionato. Questo valore è in base zero, pertanto l'indice dell'ultimo elemento inserito attualmente in Table è sempre minore del valore restituito da RtlNumberGenericTableElementsAvl.

Valore restituito

RtlGetElementGenericTableAvl restituisce un puntatore ai dati forniti dal chiamante per il Ielemento th nella tabella AVL generica. Restituisce NULL se l'specificato è troppo grande o se la tabella AVL generica non contiene elementi.

Osservazioni

RtlGetElementGenericTableAvl restituisce il elemento th inserito nella tabella AVL generica. Per recuperare il primo elemento, impostare su zero. Per recuperare l'ultimo elemento, impostare I su (RtlNumberGenericTableElementsAvl(Table)-1). Si noti che se un elemento viene eliminato dalla tabella generica, gli indici di tutti gli elementi inseriti dopo che l'elemento eliminato vengono decrementati. Pertanto, l'indice di un elemento può cambiare nel tempo.

RtlGetElementGenericTableAvl è più efficiente di RtlLookupElementGenericTableAvl se il chiamante può fornire l'indice di un particolare elemento per cui il chiamante deve accedere ai dati associati. Tuttavia, la chiamata RtlGetElementGenericTableAvl ripetutamente per testare tale elemento è meno efficiente della chiamata RtlLookupElementGenericTableAvl per individuarla.

Chiamanti di 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 a questo scopo.

Per impostazione predefinita, il sistema operativo usa alberi splay per implementare tabelle generiche. In alcune circostanze, le operazioni su un albero splay 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 di tabelle generiche usando alberi Adelson-Velsky/Landis (AVL). Se si desidera configurare le routine di tabella generiche per l'uso di 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 utilizzare il formato AVL delle routine di tabella generiche. Ad esempio, usare la routine RtlGetElementGenericTableAvl anziché RtlGetElementGenericTable. Nella chiamata a RtlGetElementGenericTableAvl, il chiamante deve passare una struttura di tabella RTL_AVL_TABLE anziché RTL_GENERIC_TABLE.

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

Fabbisogno

Requisito Valore
client minimo supportato Disponibile con Windows XP.
piattaforma di destinazione Universale
intestazione ntddk.h (include Ntddk.h, Ntifs.h)
libreria NtosKrnl.lib
dll NtosKrnl.exe
IRQL Qualsiasi livello (vedere la sezione Osservazioni)

Vedere anche

RtlDeleteElementGenericTableAvl

RtlEnumerateGenericTableWithoutSplayingAvl

RtlInitializeGenericTableAvl

RtlInsertElementGenericTableAvl

RtlLookupElementGenericTableAvl

RtlNumberGenericTableElementsAvl