Fonction RtlGetElementGenericTable (ntddk.h)

La routine RtlGetElementGenericTable retourne un pointeur vers les données fournies par l’appelant pour un élément de table générique particulier.

Syntaxe

NTSYSAPI PVOID RtlGetElementGenericTable(
  [in] PRTL_GENERIC_TABLE Table,
  [in] ULONG              I
);

Paramètres

[in] Table

Pointeur vers la table générique (RTL_GENERIC_TABLE) à partir de laquelle l’élément Idoit être récupéré. La table doit avoir été initialisée en appelant RtlInitializeGenericTable.

[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 RtlNumberGenericTableElements.

Valeur retournée

RtlGetElementGenericTable retourne un pointeur vers les données fournies par l’appelant pour l’élément Iième dans la table générique. Elle retourne la valeur NULL si le I donné est trop grand ou si la table générique n’a actuellement aucun élément.

Remarques

RtlGetElementGenericTable retourne l’élément Iième inséré dans la table 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 (RtlNumberGenericTableElements(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 suppression de l’élément sont décrémentés. Ainsi, l’index d’un élément peut changer au fil du temps.

RtlGetElementGenericTable est plus efficace que RtlLookupElementGenericTable 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, il est moins efficace d’appeler RtlGetElementGenericTable à plusieurs reprises pour tester un tel élément que d’appeler RtlLookupElementGenericTable 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 une ligne droite. Les 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 des arborescences Adelson-Velsky/Landis (AVL). Si vous souhaitez configurer les routines de table génériques 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ériques. Par exemple, utilisez la routine RtlGetElementGenericTableAvl au lieu de RtlGetElementGenericTable. Dans l’appel à RtlGetElementGenericTableAvl, l’appelant doit passer une RTL_AVL_TABLE structure de table plutôt que RTL_GENERIC_TABLE.

Les appelants de RtlGetElementGenericTable 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
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 remarques)

Voir aussi

RtlDeleteElementGenericTable

RtlEnumerateGenericTableWithoutsplaying

RtlInitializeGenericTable

RtlInsertElementGenericTable

RtlLookupElementGenericTable

RtlNumberGenericTableElements