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) |