Fonction RtlEnumerateGenericTableWithoutSplaying (ntddk.h)

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

Syntaxe

NTSYSAPI PVOID RtlEnumerateGenericTableWithoutSplaying(
  [in]      PRTL_GENERIC_TABLE Table,
  [in, out] PVOID              *RestartKey
);

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

Adresse de l’élément retourné par l’appel précédent à RtlEnumerateGenericTableWithoutSplaying. 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 RtlEnumerateGenericTableWithoutSplaying comme suit :

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

Valeur retournée

RtlEnumerateGenericTableWithoutSplaying retourne un pointeur vers la structure définie par l’appelant associée à l’élément . Elle retourne NULL si RestartKey a la valeur NULL et que la table ne contient aucun élément ou si RestartKey est un pointeur retourné et qu’il n’y a pas d’élément suivant.

Remarques

Contrairement à RtlEnumerateGenericTable, RtlEnumerateGenericTableWithoutSplaying n’aplatit pas la table générique en la convertissant d’une arborescence de lecture en liste liée triée. RtlEnumerateGenericTableWithoutSplaying est plus efficace et multiprocesseur-safe que RtlEnumerateGenericTable.

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

Les appelants du Rtl.. Les routines GenericTable 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. Dans certaines circonstances, les opérations sur un arbre de jeu rendent l’arbre profond et étroit et peuvent 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 moins profonde des tables génériques à l’aide d’arborescences Adelson-Velsky/Landis (AVL). Si vous souhaitez 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 RtlEnumerateGenericTableWithoutSplaying au lieu de RtlEnumerateGenericTableWithoutSplayingAvl. Dans l’appel à RtlEnumerateGenericTableWithoutSplayingAvl, l’appelant doit passer une structure de table RTL_AVL_TABLE plutôt qu’RTL_GENERIC_TABLE.

Les appelants de RtlEnumerateGenericTableWithoutSplaying 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)
Bibliothèque NtosKrnl.lib
DLL NtosKrnl.exe
IRQL Consultez la section Notes.

Voir aussi

RtlEnumerateGenericTable

RtlInitializeGenericTable

RtlIsGenericTableEmpty

RtlNumberGenericTableElements