RtlLookupFirstMatchingElementGenericTableAvl, fonction (ntddk.h)
La routine RtlLookupFirstMatchingElementGenericTableAvl recherche l’élément le plus à gauche dans l’arborescence qui correspond aux données indiquées.
Syntaxe
NTSYSAPI PVOID RtlLookupFirstMatchingElementGenericTableAvl(
[in] PRTL_AVL_TABLE Table,
[in] PVOID Buffer,
[out] PVOID *RestartKey
);
Paramètres
[in] Table
Pointeur vers la table Adelson-Velsky/Landis (AVL) générique (RTL_AVL_TABLE).
[in] Buffer
Mémoire tampon qui contient les données de recherche.
[out] RestartKey
Sur la sortie, contient un contexte de recherche à utiliser avec une routine d’énumération, telle que RtlEnumerateGenericTableWithoutSplayingAvl.
Valeur retournée
La routine RtlLookupFirstMatchingElementGenericTableAvlretourne un pointeur vers les données correspondantes, ou NULL si aucune correspondance n’a été trouvée.
Remarques
Une arborescence qui implémente une table générique peut contenir plusieurs noms de fichiers qui diffèrent uniquement par le cas. Un algorithme de recherche peut utiliser cette routine pour localiser la première correspondance, sans référence à la casse, et utiliser une routine d’énumération, telle que RtlEnumerateGenericTableWithoutSplayingAvl, pour retourner chaque correspondance suivante.
Par défaut, le système d’exploitation utilise des arborescences de lecture pour implémenter des tables génériques, mais la routine RtlLookupFirstMatchingElementGenericTableAvlfonctionne uniquement avec les arborescences Adelson-Velsky/Landis (AVL). Dans certaines circonstances, les opérations sur un arbre de jeu rendent l’arbre profond et étroit et peuvent même le transformer en ligne droite. Des arbres très profonds dégradent les performances des recherches. Vous pouvez garantir une implémentation d’arborescence plus équilibrée et moins profonde des tables génériques à l’aide d’arborescences Adelson-Velsky/Landis (AVL). Si vous souhaitez 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.
Les appelants de RtlLookupFirstMatchingElementGenericTableAvl doivent être en cours d’exécution à <= APC_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 Vista. |
Plateforme cible | Universal |
En-tête | ntddk.h (incluez FltKernel.h, Ntifs.h, Ntddk.h) |
Bibliothèque | NtosKrnl.lib |
DLL | NtosKrnl.exe |
IRQL | <= APC_LEVEL (voir la section Notes) |