Partager via


RtlEnumerateGenericTableWithoutSplayingAvl, fonction (ntddk.h)

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

Syntaxe

NTSYSAPI PVOID RtlEnumerateGenericTableWithoutSplayingAvl(
  [in]      PRTL_AVL_TABLE Table,
  [in, out] PVOID          *RestartKey
);

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, out] RestartKey

Adresse de l’élément retourné par l’appel précédent à RtlEnumerateGenericTableWithoutSplayingAvl. Doit être défini sur NULL si l’énumération doit commencer au premier élément de la table.

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

RestartKey = NULL;
for (ptr = RtlEnumerateGenericTableWithoutSplayingAvl(Table, &RestartKey);
     ptr != NULL;
     ptr = RtlEnumerateGenericTableWithoutSplayingAvl(Table, &RestartKey)) {
        // Process the element pointed to by ptr
}

Valeur de retour

RtlEnumerateGenericTableWithoutSplayingAvl retourne un pointeur vers la structure définie par l’appelant associée à l’élément. Elle retourne NULL si RestartKey est NULL et si la table n’a aucun élément ou si RestartKey est un pointeur retourné et qu’aucun élément suivant n’est présent.

Remarques

RtlEnumerateGenericTableWithoutSplayingAvl peut être appelée à plusieurs reprises pour traiter les données de l’appelant dans chaque élément d’une table générique.

Les éléments sont retournés dans l’ordre retourné est défini par le paramètre PRTL_AVL_COMPARE_ROUTINE fourni à RtlInitializeGenericTableAvl.

Par défaut, le système d’exploitation utilise des arborescences de lecture pour implémenter des tables génériques, mais la RtlLookupElementGenericTableFullAvl routine fonctionne uniquement avec les arborescences 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 RtlEnumerateGenericTableWithoutSplayingAvl au lieu de RtlEnumerateGenericTableWithoutSplaying. Dans l’appel à RtlEnumerateGenericTableWithoutSplayingAvl, l’appelant doit passer une structure de table RTL_AVL_TABLE plutôt que RTL_GENERIC_TABLE.

Appelants du * Rtl.. Les routines GenericTableAvl* 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.

Les appelants de RtlEnumerateGenericTableWithoutSplayingAvl 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)
bibliothèque NtosKrnl.lib
DLL NtosKrnl.exe
IRQL Voir la section Remarques.

Voir aussi

RtlEnumerateGenericTableAvl

RtlInitializeGenericTableAvl

RtlIsGenericTableEmptyAvl

RtlNumberGenericTableElementsAvl