Fonction RtlLookupElementGenericTableFullAvl (ntddk.h)
La routine RtlLookupElementGenericTableFullAvl recherche un élément qui correspond aux données spécifiées dans une table générique.
Syntaxe
NTSYSAPI PVOID RtlLookupElementGenericTableFullAvl(
[in] PRTL_AVL_TABLE Table,
[in] PVOID Buffer,
[out] PVOID *NodeOrParent,
[out] TABLE_SEARCH_RESULT *SearchResult
);
Paramètres
[in] Table
Pointeur vers la table Adelson-Velsky/Landis (AVL) générique (RTL_AVL_TABLE). La table doit avoir été initialisée en appelant RtlInitializeGenericTableAvl.
[in] Buffer
Mémoire tampon des données de recherche à transmettre à compareRoutine qui a été inscrite lorsque RtlInitializeGenericTableAvl a initialisé la table générique. Pour plus d’informations, consultez la description de RtlInitializeGenericTableAvl.
[out] NodeOrParent
Sur la sortie, valeur qui décrit la relation du NodeOrParent avec l’entrée de table (nœud) que RtlLookupElementGenericTableFullAvl recherche. Le paramètre SearchResult peut avoir l’une des valeurs suivantes :
TableEmptyTree
L’arborescence était vide. Le contenu de NodeOrParentn’a pas été modifié.
TableFoundNode
La routine RtlLookupElementGenericTableFullAvl a trouvé une entrée de table dont la clé correspond aux données dans Buffer. NodeOrParent contient un pointeur vers l’entrée correspondante.
TableInsertAsLeft
La routine RtlLookupElementGenericTableFullAvl n’a pastrouvé d’entrée de table dont la clé correspond aux données dans Buffer. Jen’ai pasl’entrée que RtlLookupElementGenericTableFullAvl a cherchée dans la table, il s’agirait de l’enfant gauche de l’entrée vers laquelle NodeOrParent pointe.
TableInsertAsRight
La routine RtlLookupElementGenericTableFullAvl n’a pastrouvé d’entrée de table dont la clé correspond aux données dans Buffer. Si l’entrée recherchée par RtlLookupElementGenericTableFullAvl était dans la table, elle serait l’enfant approprié de l’entrée vers laquelle NodeOrParent pointe.
[out] SearchResult
Pointeur vers une entrée de table. Si la routine RtlLookupElementGenericTableFullAvl correspond à une entrée, NodeOrParentpointe vers l’entrée correspondante. Si la routine RtlLookupElementGenericTableFullAvl ne parvient pas à trouver une correspondance, NodeOrParent pointe vers l’entrée qui serait le parent de l’entrée que la routine RtlLookupElementGenericTableFullAvl recherchait.
Valeur retournée
RtlLookupElementGenericTableFullAvl renvoie un pointeur vers les données utilisateur associées à l’élément correspondant dans la table générique, ou NULL si la table générique n’a actuellement aucun élément ou si aucun élément correspondant n’est trouvé.
Remarques
Par défaut, le système d’exploitation utilise des arborescences de lecture pour implémenter des tables génériques, mais la routine RtlLookupElementGenericTableFullAvl fonctionne uniquement avec les arborescences Adelson-Velsky/Landis (AVL). Pour configurer les routines de table génériques pour utiliser des arborescences AVL au lieu d’arborescences de lecture dans votre pilote, insérez l’instruction define suivante dans un fichier d’en-tête commun avant d’inclure Ntddk.h :
#define RTL_USE_AVL_TABLES 0
Si RTL_USE_AVL_TABLES n’est pas défini, vous devez utiliser la forme AVL des routines de table génériques. Par exemple, utilisez la routine RtlLookupElementGenericTableFullAvl au lieu de RtlLookupElementGenericTable. Dans l’appel à RtlLookupElementGenericTableFullAvl, l’appelant doit passer une structure de table RTL_AVL_TABLE plutôt qu’RTL_GENERIC_TABLE.
Les appelants du Rtl.. Les routines GenericTableAvl sont chargées de synchroniser exclusivement l’accès à la table générique. Un mutex rapide exclusif est le mécanisme de synchronisation le plus efficace à utiliser à cet effet.
Les appelants de RtlLookupElementGenericTableFullAvl doivent s’exécuter sur IRQL < DISPATCH_LEVEL si l’une des conditions suivantes est remplie :
- La mémoire allouée par l’appelant au niveau de la table ou de la mémoire tampon est paginable.
- CompareRoutine fourni par l’appelant contient du code paginable.
Configuration requise
Condition requise | Valeur |
---|---|
Client minimal pris en charge | Disponible à partir de Windows XP. |
Plateforme cible | Universal |
En-tête | ntddk.h (inclure Ntddk.h, Ntifs.h) |
Bibliothèque | NtosKrnl.lib |
DLL | NtosKrnl.exe |
IRQL | < DISPATCH_LEVEL (voir la section Remarques) |