Funzione RtlLookupElementGenericTable (ntddk.h)

La routine RtlLookupElementGenericTable cerca in una tabella generica un elemento che corrisponde ai dati specificati.

Sintassi

NTSYSAPI PVOID RtlLookupElementGenericTable(
  PRTL_GENERIC_TABLE Table,
  PVOID              Buffer
);

Parametri

Table

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

Buffer

Buffer di dati di ricerca da passare alla classe CompareRoutine registrata quando RtlInitializeGenericTable inizializza la tabella generica. Per altre informazioni, vedere la descrizione di RtlInitializeGenericTable.

Valore restituito

RtlLookupElementGenericTable restituisce un puntatore ai dati forniti dal chiamante per l'elemento desiderato nella tabella generica. Restituisce NULL se la tabella generica non contiene elementi o se non viene trovato alcun elemento corrispondente.

Commenti

Se viene trovato un elemento corrispondente, RtlLookupElementGenericTable bilancia nuovamente l'albero di riproduzione della tabella generica.

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 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 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 Splay 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 non si definisce RTL_USE_AVL_TABLES come specificato in precedenza, è necessario utilizzare il formato AVL delle routine di tabella generiche. Ad esempio, utilizzare la routine RtlLookupElementGenericTableAvl anziché RtlLookupElementGenericTable. Nella chiamata a RtlLookupElementGenericTableAvl il chiamante deve passare una struttura di tabella RTL_AVL_TABLE anziché RTL_GENERIC_TABLE.

I chiamanti di RtlLookupElementGenericTable devono essere in esecuzione in IRQL < DISPATCH_LEVEL se una delle condizioni seguenti contiene:

  • La memoria allocata dal chiamante in Table o in Buffer è paging.

  • Il chiamante fornito da CompareRoutine contiene codice di paging.

In caso contrario, i chiamanti di RtlLookupElementGenericTable possono essere eseguiti in IRQL <= DISPATCH_LEVEL quando si usa una memoria o codice non di paging.

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

RTL_AVL_TABLE

RTL_GENERIC_TABLE

RtlInitializeGenericTable

RtlIsGenericTableEmpty

RtlNumberGenericTableElements