Partager via


RtlGetElementGenericTable, fonction (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 le Iélément doit ê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 est basée sur zéro, de sorte que l’index de l’élément inséré en dernier dans Table est toujours un inférieur à la valeur retournée par RtlNumberGenericTableElements.

Valeur de retour

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

Remarques

RtlGetElementGenericTable retourne le Iième élément inséré dans la table 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 (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 décrémentation de l’élément supprimé. 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, l’appel RtlGetElementGenericTable à plusieurs reprises pour tester un tel élément est moins efficace 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 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 RtlGetElementGenericTable doivent s’exécuter au < DISPATCH_LEVEL IRQL si la mémoire allouée par l’appelant pour la table générique est paginable.

Exigences

Exigence Valeur
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

RtlDeleteElementGenericTable

RtlEnumerateGenericTableWithoutSplaying

RtlInitializeGenericTable

RtlInsertElementGenericTable

RtlLookupElementGenericTable

RtlNumberGenericTableElements