RtlGetElementGenericTableAvl, fonction (ntddk.h)
La routine RtlGetElementGenericTableAvl retourne un pointeur vers les données fournies par l’appelant pour un élément de table Adelson-Velsky/Landis (AVL) générique particulier.
Syntaxe
NTSYSAPI PVOID RtlGetElementGenericTableAvl(
[in] PRTL_AVL_TABLE Table,
[in] ULONG I
);
Paramètres
[in] Table
Pointeur vers la table AVL générique (RTL_AVL_TABLE) à partir de laquelle le Iième élément doit être récupéré. La table doit avoir été initialisée en appelant RtlInitializeGenericTableAvl.
[in] I
Index de l’élément sélectionné. Cette valeur est de base zéro. Par conséquent, l’index de l’élément inséré en dernier dans Table est toujours un inférieur à la valeur retournée par RtlNumberGenericTableElementsAvl.
Valeur de retour
RtlGetElementGenericTableAvl retourne un pointeur vers les données fournies par l’appelant pour le Iième élément de la table AVL générique. Elle retourne NULL si le donné est trop volumineux ou si la table AVL générique n’a actuellement aucun élément.
Remarques
RtlGetElementGenericTableAvl retourne le Iième élément inséré dans la table AVL générique. Pour récupérer le premier élément, définissez je sur zéro. Pour récupérer le dernier élément, définissez I sur (RtlNumberGenericTableElementsAvl(Table)-1). Notez que si un élément est supprimé de la table générique, les index de tous les éléments insérés après la décrémentation de l’élément supprimé. Ainsi, l’index d’un élément peut changer au fil du temps.
RtlGetElementGenericTableAvl est plus efficace que RtlLookupElementGenericTableAvl si l’appelant peut fournir l’index d’un élément particulier pour lequel l’appelant a besoin d’accéder aux données associées. Toutefois, l’appel RtlGetElementGenericTableAvl à plusieurs reprises pour tester un tel élément est moins efficace que d’appeler RtlLookupElementGenericTableAvl pour le localiser.
Appelants du Rtl.. Les routines GenericTable sont responsables de la synchronisation exclusive de l’accès à la table générique. Un mutex rapide exclusif est le mécanisme de synchronisation le plus efficace à utiliser à cet effet.
Par défaut, le système d’exploitation utilise des arborescences de lecture pour implémenter des tables génériques. Dans certaines circonstances, les opérations sur un arbre de jeu rendent l’arbre profond et étroit et peut 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 plus superficielle des tables génériques à l’aide d’arbres Adelson-Velsky/Landis (AVL). Si vous souhaitez configurer les routines de table générique pour utiliser des arborescences AVL plutôt que des 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érique. Par exemple, utilisez la routine RtlGetElementGenericTableAvl au lieu de RtlGetElementGenericTable. Dans l’appel à RtlGetElementGenericTableAvl, l’appelant doit passer une structure de table RTL_AVL_TABLE plutôt que RTL_GENERIC_TABLE.
Les appelants de RtlGetElementGenericTableAvl doivent s’exécuter à l'< DISPATCH_LEVEL IRQL si la mémoire allouée par l’appelant pour la table générique est paginable.
Exigences
Exigence | Valeur |
---|---|
client minimum pris en charge | Disponible avec Windows XP. |
plateforme cible | Universel |
d’en-tête | ntddk.h (include Ntddk.h, Ntifs.h) |
bibliothèque | NtosKrnl.lib |
DLL | NtosKrnl.exe |
IRQL | N’importe quel niveau (voir remarques) |
Voir aussi
RtlDeleteElementGenericTableAvl
RtlEnumerateGenericTableWithoutSplayingAvl
RtlInsertElementGenericTableAvl