Partager via


Fonction RtlEnumerateGenericTable (ntddk.h)

La routine RtlEnumerateGenericTable est utilisée pour énumérer les éléments d’une table générique.

Syntaxe

NTSYSAPI PVOID RtlEnumerateGenericTable(
  [in] PRTL_GENERIC_TABLE Table,
  [in] BOOLEAN            Restart
);

Paramètres

[in] Table

Pointeur vers la table générique (RTL_GENERIC_TABLE). La table doit avoir été initialisée en appelant RtlInitializeGenericTable.

[in] Restart

Défini sur TRUE si l’énumération doit commencer au premier élément de la table. Définissez la valeur FALSE si vous reprenez l’énumération à partir d’un appel précédent.

Pour énumérer tous les éléments de la table, utilisez RtlEnumerateGenericTable comme suit :

for (p = RtlEnumerateGenericTable ( Table, TRUE );
     p != NULL;
     p = RtlEnumerateGenericTable ( Table, FALSE )) {
        // Process the element pointed to by p
}

Valeur de retour

RtlEnumerateGenericTable retourne un pointeur vers l’élément suivant, s’il en existe un. S’il n’y a plus d’éléments dans la table, RtlEnumerateGenericTable retourne NULL.

Remarques

RtlEnumerateGenericTable aplatit la table générique en la convertissant d’une arborescence de lecture en liste liée triée. Pour énumérer la table sans l’aplatir, utilisez RtlEnumerateGenericTableWithoutSplaying.

Appelants du Rtl.. GenericTable routines 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 RtlEnumerateGenericTableAvl au lieu de RtlEnumerateGenericTable. Dans l’appel à RtlEnumerateGenericTableAvl, l’appelant doit passer une structure de table RTL_AVL_TABLE plutôt que RTL_GENERIC_TABLE.

Les appelants de RtlEnumerateGenericTable 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
plateforme cible Universel
d’en-tête ntddk.h (include Ntddk.h, Ntifs.h, Fltkernel.h)
bibliothèque NtosKrnl.lib
DLL NtosKrnl.exe
IRQL IRQL < DISPATCH_LEVEL (voir la section Remarques)

Voir aussi

ExInitializeFastMutex

RtlEnumerateGenericTableWithoutSplaying

RtlInitializeGenericTable

RtlIsGenericTableEmpty

RtlNumberGenericTableElements