Partager via


RtlEnumerateGenericTableAvl, fonction (ntddk.h)

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

Syntaxe

NTSYSAPI PVOID RtlEnumerateGenericTableAvl(
  [in] PRTL_AVL_TABLE Table,
  [in] BOOLEAN        Restart
);

Paramètres

[in] Table

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

[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 RtlEnumerateGenericTableAvl comme suit :

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

Valeur de retour

RtlEnumerateGenericTableAvl 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, RtlEnumerateGenericTableAvl retourne NULL.

Remarques

Appelants du Rtl.. GenericTableAvl 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 jeu pour implémenter des tables génériques, mais la RtlEnumerateGenericTableAvl routine fonctionne uniquement avec les arbres Adelson-Velsky/Landis (AVL). Pour configurer les routines de table génériques afin d’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é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 RtlEnumerateGenericTableAvl 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

RtlEnumerateGenericTableWithoutSplayingAvl

RtlInitializeGenericTableAvl

RtlIsGenericTableEmptyAvl

RtlNumberGenericTableElementsAvl