Condividi tramite


Funzione RtlLookupElementGenericTableFullAvl (ntddk.h)

La routine RtlLookupElementGenericTableFullAvl cerca una tabella generica per un elemento corrispondente ai dati specificati.

Sintassi

NTSYSAPI PVOID RtlLookupElementGenericTableFullAvl(
  [in]  PRTL_AVL_TABLE      Table,
  [in]  PVOID               Buffer,
  [out] PVOID               *NodeOrParent,
  [out] TABLE_SEARCH_RESULT *SearchResult
);

Parametri

[in] Table

Puntatore alla tabella Adelson-Velsky/Landis (AVL) generica (RTL_AVL_TABLE). La tabella deve essere stata inizializzata chiamando RtlInitializeGenericTableAvl.

[in] Buffer

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

[out] NodeOrParent

Nell'output, un valore che descrive la relazione di NodeOrParent con la voce di tabella (nodo) che RtlLookupElementGenericTableFullAvl sta cercando. Il parametro SearchResult può avere uno dei valori seguenti:

TableEmptyTree

L'albero era vuoto. Il contenuto di NodeOrParentnon è stato modificato.

TableFoundNode

La routine RtlLookupElementGenericTableFullAvl ha trovato una voce di tabella la cui chiave corrisponde ai dati nel buffer. NodeOrParent contiene un puntatore alla voce corrispondente.

TableInsertAsLeft

La routine RtlLookupElementGenericTableFullAvlnonha trovato una voce di tabella la cui chiave corrisponde ai dati nel buffer. Non fla voce che RtlLookupElementGenericTableFullAvl ha cercato nella tabella, sarebbe il figlio sinistro della voce a cui NodeOrParent punta.

TableInsertAsRight

La routine RtlLookupElementGenericTableFullAvlnonha trovato una voce di tabella la cui chiave corrisponde ai dati nel buffer. Se la voce RtlLookupElementGenericTableFullAvl era nella tabella, sarebbe il figlio giusto della voce a cui NodeOrParent punta.

[out] SearchResult

Puntatore a una voce di tabella. Se la routine RtlLookupElementGenericTableFullAvl corrisponde a una voce, NodeOrParentpunta alla voce corrispondente. Se la routine RtlLookupElementGenericTableFullAvl non riesce a trovare una corrispondenza, NodeOrParent punta alla voce che sarebbe l'elemento padre della voce in cui è stata eseguita la ricerca della routine RtlLookupElementGenericTableFullAvl .

Valore restituito

RtlLookupElementGenericTableFullAvl restituisce un puntatore ai dati utente associati all'elemento corrispondente nella tabella generica o NULL se la tabella generica non contiene elementi o se non viene trovato alcun elemento corrispondente.

Commenti

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 RtlLookupElementGenericTableFullAvl anziché RtlLookupElementGenericTable. Nella chiamata a RtlLookupElementGenericTableFullAvl 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 RtlLookupElementGenericTableFullAvl devono essere eseguiti in IRQL < DISPATCH_LEVEL se una delle condizioni seguenti contiene:

  • La memoria allocata dal chiamante in Table o in Buffer è paginabile.
  • Il chiamante fornito da CompareRoutine contiene codice paginabile.

Requisiti

Requisito Valore
Client minimo supportato Disponibile a partire da Windows XP.
Piattaforma di destinazione Universale
Intestazione ntddk.h (include Ntddk.h, Ntifs.h)
Libreria NtosKrnl.lib
DLL NtosKrnl.exe
IRQL < DISPATCH_LEVEL (vedere la sezione Osservazioni)

Vedi anche

RtlInitializeGenericTableAvl

RtlIsGenericTableEmptyAvl

RtlNumberGenericTableElementsAvl