Partager via


Fonction RtlLookupElementGenericTable (ntddk.h)

La routine RtlLookupElementGenericTable recherche un élément qui correspond aux données spécifiées dans une table générique.

Syntaxe

NTSYSAPI PVOID RtlLookupElementGenericTable(
  PRTL_GENERIC_TABLE Table,
  PVOID              Buffer
);

Paramètres

Table

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

Buffer

Mémoire tampon de données de recherche à transmettre à CompareRoutine qui a été inscrit lorsque RtlInitializeGenericTable a initialisé la table générique. Pour plus d’informations, consultez la description de RtlInitializeGenericTable.

Valeur retournée

RtlLookupElementGenericTable retourne un pointeur vers les données fournies par l’appelant pour l’élément souhaité dans la table générique. Elle retourne la valeur NULL si la table générique n’a actuellement aucun élément ou si aucun élément correspondant n’est trouvé.

Remarques

Si un élément correspondant est trouvé, RtlLookupElementGenericTable rééquilibre l’arborescence de lecture de la table générique.

Appelants du Rtl.. Les routines GenericTable 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 une ligne droite. Les 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 des arborescences Adelson-Velsky/Landis (AVL). Si vous souhaitez configurer les routines de table génériques pour utiliser des arborescences AVL au lieu d’afficher des arborescences 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 vous ne définissez pas RTL_USE_AVL_TABLES comme indiqué ci-dessus, vous devez utiliser la forme AVL des routines de table génériques. Par exemple, utilisez la routine RtlLookupElementGenericTableAvl au lieu de RtlLookupElementGenericTable. Dans l’appel à RtlLookupElementGenericTableAvl, l’appelant doit passer une structure de table RTL_AVL_TABLE plutôt que RTL_GENERIC_TABLE.

Les appelants de RtlLookupElementGenericTable doivent s’exécuter sur IRQL < DISPATCH_LEVEL si l’une des conditions suivantes est remplie :

  • La mémoire allouée à l’appelant au niveau de la table ou de la mémoire tampon est paginable.

  • CompareRoutine fourni par l’appelant contient du code paginable.

Sinon, les appelants de RtlLookupElementGenericTable peuvent s’exécuter à IRQL <= DISPATCH_LEVEL lors de l’utilisation de la mémoire ou du code non paginé.

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

RTL_AVL_TABLE

RTL_GENERIC_TABLE

RtlInitializeGenericTable

RtlIsGenericTableEmpty

RtlNumberGenericTableElements