Funzione RtlLookupElementGenericTableAvl (ntddk.h)
La routine RtlLookupElementGenericTableAvl cerca in una tabella generica un elemento che corrisponde ai dati specificati.
Sintassi
NTSYSAPI PVOID RtlLookupElementGenericTableAvl(
[in] PRTL_AVL_TABLE Table,
[in] PVOID Buffer
);
Parametri
[in] Table
Puntatore alla tabella generica Adelson-Velsky/Landis (AVL) (RTL_AVL_TABLE). La tabella deve essere stata inizializzata chiamando RtlInitializeGenericTableAvl.
[in] Buffer
Buffer dei dati di ricerca da passare al CompareRoutine registrato quando RtlInitializeGenericTableAvl inizializzato la tabella generica. Per altre informazioni, vedere la descrizione di RtlInitializeGenericTableAvl.
Valore restituito
RtlLookupElementGenericTableAvl restituisce un puntatore ai dati utente associati all'elemento corrispondente nella tabella generica oppure NULL se la tabella generica non contiene elementi o se non viene trovato alcun elemento corrispondente.
Osservazioni
Per impostazione predefinita, il sistema operativo usa alberi splay per implementare tabelle generiche, ma la RtlLookupElementGenericTableAvl routine funziona solo con alberi Adelson-Velsky/Landis (AVL). Per 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, 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.
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 a questo scopo.
I chiamanti di RtlLookupElementGenericTableAvl devono essere in esecuzione in IRQL < DISPATCH_LEVEL se una delle condizioni seguenti è bloccata:
La memoria allocata dal chiamante in table o in buffer è paginabile.
Il chiamante fornito CompareRoutine contiene codice pageable.
Fabbisogno
Requisito | Valore |
---|---|
piattaforma di destinazione | Universale |
intestazione | ntddk.h (include Ntddk.h, Ntifs.h) |
libreria | NtosKrnl.lib |
dll | NtosKrnl.exe |
IRQL | < DISPATCH_LEVEL IRQL (vedere la sezione Osservazioni) |