Fonction RtlEnumerateGenericTableAvl (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éfinissez sur TRUE si l’énumération doit commencer au premier élément de la table. Définissez sur 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 retournée
RtlEnumerateGenericTableAvl retourne un pointeur vers l’élément suivant, le cas échéant. S’il n’y a plus d’éléments dans la table, RtlEnumerateGenericTableAvl retourne NULL.
Remarques
Les appelants du Rtl.. Les routines GenericTableAvl 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, mais la routine RtlEnumerateGenericTableAvl fonctionne uniquement avec les arborescences Adelson-Velsky/Landis (AVL). Pour 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 RtlEnumerateGenericTableAvl au lieu de RtlEnumerateGenericTable. Dans l’appel à RtlEnumerateGenericTableAvl, l’appelant doit passer une structure de table RTL_AVL_TABLE plutôt qu’RTL_GENERIC_TABLE.
Les appelants de RtlEnumerateGenericTableAvl 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, Fltkernel.h) |
Bibliothèque | NtosKrnl.lib |
DLL | NtosKrnl.exe |
IRQL | DISPATCH_LEVEL IRQL < (voir la section Notes) |