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)

Voir aussi

RtlEnumerateGenericTableWithoutSplayingAvl