Partager via


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

RtlInitializeGenericTableAvl

RtlInsertElementGenericTableAvl

RtlLookupElementGenericTableAvl

RtlNumberGenericTableElementsAvl