Fonction RtlGetElementGenericTableAvl (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 l’élément Idoit ê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 étant de base zéro, l’index du dernier élément inséré actuellement dans Table est toujours inférieur à la valeur retournée par RtlNumberGenericTableElementsAvl.

Valeur retournée

RtlGetElementGenericTableAvl retourne un pointeur vers les données fournies par l’appelant pour l’élément Ide la table AVL générique. Elle retourne NULL si le I donné est trop grand ou si la table AVL générique n’a actuellement aucun élément.

Remarques

RtlGetElementGenericTableAvl retourne l’élément Iinséré dans la table AVL générique. Pour récupérer le premier élément, définissez I 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 l’élément supprimé sont décrémentés. 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, appeler RtlGetElementGenericTableAvl à plusieurs reprises pour tester un tel élément est moins efficace que d’appeler RtlLookupElementGenericTableAvl pour le localiser.

Les appelants du Rtl.. Les routines GenericTable 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.

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 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. 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 qu’RTL_GENERIC_TABLE.

Les appelants de RtlGetElementGenericTableAvl doivent être en cours d’exécution sur IRQL < DISPATCH_LEVEL si la mémoire allouée à l’appelant pour la table générique est paginable.

Configuration requise

Condition requise Valeur
Client minimal pris en charge Disponible avec Windows XP.
Plateforme cible Universal
En-tête ntddk.h (inclure Ntddk.h, Ntifs.h)
Bibliothèque NtosKrnl.lib
DLL NtosKrnl.exe
IRQL N’importe quel niveau (voir les remarques)

Voir aussi

RtlDeleteElementGenericTableAvl

RtlEnumerateGenericTableWithoutSplayingAvl

RtlInitializeGenericTableAvl

RtlInsertElementGenericTableAvl

RtlLookupElementGenericTableAvl

RtlNumberGenericTableElementsAvl