Funzione RtlGetElementGenericTable (ntddk.h)

La routine RtlGetElementGenericTable restituisce un puntatore ai dati forniti dal chiamante per un particolare elemento di tabella generico.

Sintassi

NTSYSAPI PVOID RtlGetElementGenericTable(
  [in] PRTL_GENERIC_TABLE Table,
  [in] ULONG              I
);

Parametri

[in] Table

Puntatore alla tabella generica (RTL_GENERIC_TABLE) da cui deve essere recuperato l'elemento Ith. La tabella deve essere stata inizializzata chiamando RtlInitializeGenericTable.

[in] I

Indice dell'elemento selezionato. Questo valore è basato su zero, quindi l'indice dell'ultimo elemento inserito attualmente in Table è sempre uno minore del valore restituito da RtlNumberGenericTableElements.

Valore restituito

RtlGetElementGenericTable restituisce un puntatore ai dati forniti dal chiamante per l'elemento Ithnella tabella generica. Restituisce NULL se l'oggetto specificato è troppo grande o se la tabella generica attualmente non ha elementi.

Commenti

RtlGetElementGenericTable restituisce l'elemento Ith inserito nella tabella generica. Per recuperare il primo elemento, impostare su zero. Per recuperare l'ultimo elemento, impostare I su (RtlNumberGenericTableElements(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 viene decrementato. Pertanto, l'indice di un elemento potrebbe cambiare nel tempo.

RtlGetElementGenericTable è più efficiente di RtlLookupElementGenericTable se il chiamante può fornire l'indice di un particolare elemento per cui il chiamante deve accedere ai dati associati. Tuttavia, chiamando RtlGetElementGenericTable ripetutamente per testare tale elemento è meno efficiente rispetto alla chiamata di RtlLookupElementGenericTable per individuarlo.

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 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 RtlGetElementGenericTable 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 Qualsiasi livello (vedere Osservazioni)

Vedi anche

RtlDeleteElementGenericTable

RtlEnumerateGenericTableWithoutSplaying

RtlInitializeGenericTable

RtlInsertElementGenericTable

RtlLookupElementGenericTable

RtlNumberGenericTableElements