Gestion des tables de préfixes
RDBSS définit des structures de données qui permettent d’utiliser des tables de préfixe pour cataloguer les noms SRV_CALL, NET_ROOT et V_NET_ROOT.
L’implémentation actuelle de la gestion des noms dans RDBSS utilise une table qui contient les composants suivants :
File d’attente de noms insérés
Empreinte de version
Ressource de verrou de table qui contrôle l’accès aux tables
Valeur qui indique si les correspondances de nom ne respectent pas la casse
Compartiment d’entrées de valeur de hachage pour cette table de préfixes
La ressource de verrou de table est utilisée normalement : partagée pour les opérations de recherche, exclusive pour les opérations de modification.
L’empreinte de version change à chaque modification. La raison de la file d’attente est que le package de table de préfixe permet à plusieurs appelants d’énumérer à la fois. La file d’attente des noms insérés et le tampon de version permettent à plusieurs appelants d’énumérer simultanément. La file d’attente peut être utilisée comme une recherche plus rapide pour les noms de fichiers, mais la table de préfixes est certainement l’approche appropriée pour les structures NET_ROOT.
Ces routines de gestion de table de préfixe sont utilisées en interne par RDBSS en réponse à un appel de MUP pour revendiquer un nom ou pour former le chemin de création d’une structure NET_ROOT. Ces routines de gestion de table de préfixe RDBSS peuvent également être utilisées par les mini-redirecteurs réseau, à condition que le verrou approprié soit acquis avant d’accéder à la table et que le verrou soit libéré une fois le travail terminé. L’utilisation normale par un pilote est la suivante :
Acquérir un verrou partagé en appelant RxAcquirePrefixTableLockShared.
Recherchez un nom en appelant RxPrefixTableLookupName.
Relâchez le verrou partagé en appelant RxReleasePrefixTableLock.
Notez que certaines routines sont implémentées uniquement sur Windows XP et les versions précédentes de Windows. RxPrefixTableLookupName est la seule routine de gestion des tables de préfixe implémentée sur toutes les versions de Windows
Les routines de gestion de table de préfixe RDBSS incluent les éléments suivants :
Routine | Description |
---|---|
Cette routine acquiert un verrou exclusif sur une table de préfixes utilisée pour cataloguer les noms SRV_CALL et NET_ROOT. Cette routine est disponible uniquement sur Windows XP et Windows 2000. Cette routine est utilisée en interne par RDBSS et ne doit pas être utilisée par les mini-redirecteurs réseau. |
|
Cette routine acquiert un verrou partagé sur une table de préfixes utilisée pour cataloguer les noms SRV_CALL et NET_ROOT. Cette routine est disponible uniquement sur Windows XP et Windows 2000. Cette routine est utilisée en interne par RDBSS et ne doit pas être utilisée par les mini-redirecteurs réseau. |
|
La routine recherche un nom dans une table de préfixe utilisée pour cataloguer les noms de SRV_CALL et NET_ROOT et les convertit à partir du pointeur sous-jacent vers la structure contenante. |
|
Cette routine libère un verrou sur une table de préfixes utilisée pour cataloguer les noms de SRV_CALL et de NET_ROOT. Cette routine est disponible uniquement sur Windows XP et Windows 2000. Cette routine est utilisée en interne par RDBSS et ne doit pas être utilisée par les mini-redirecteurs réseau. |
À compter de Windows Server 2003, les routines mentionnées dans le tableau précédent, à l’exception de RxPrefixTableLookupName, sont remplacées par des macros. Les macros suivantes sont définies qui appellent les routines de table de préfixe avec moins de paramètres.
Macro | Description |
---|---|
RxAcquirePrefixTableLockExclusive (TABLE, WAIT) |
Cette macro acquiert le verrou de table préfixe en mode exclusif pour les opérations de modification. |
RxAcquirePrefixTableLockShared (TABLE, WAIT) |
Cette macro acquiert le verrou de table de préfixe en mode partagé pour les opérations de recherche. |
RxIsPrefixTableLockAcquired (TABLE) |
Cette macro indique si le verrou de table de préfixe a été acquis en mode exclusif ou partagé. |
RxIsPrefixTableLockExclusive (TABLE) |
Cette macro indique si le verrou de table de préfixe a été acquis en mode exclusif. |
RxReleasePrefixTableLock (TABLE) |
Cette macro libère le verrou de table de préfixe. |