Partager via


Gestion de la structure des connexions et des fichiers

Il existe six structures de données fondamentales utilisées par RDBSS pour la gestion des connexions et des structures de fichiers. Ces structures de données sont utilisées en interne par RDBSS et par les différents mini-redirecteurs réseau. Il existe deux versions de ces structures de données. La version du mini-redirecteur réseau contient des champs qui peuvent être manipulés par un pilote de mini-redirecteur réseau. La version du mini-redirecteur réseau de ces structures de données commence par le préfixe MRX_. La version RDBSS contient des champs supplémentaires qui peuvent uniquement être manipulés par RDBSS.

Ces six structures de données fondamentales sont les suivantes :

  • SRV_CALL-contexte d’appel du serveur. Cette structure fournit l’abstraction pour un serveur distant.

  • NET_ROOT-net root. Cette structure extrait une connexion à un partage.

  • V_NET_ROOT-vue des racines du réseau (également appelées netroots virtuels).

  • FCB : bloc de contrôle de fichier. Cette structure représente un fichier ouvert sur un partage.

  • SRV_OPEN contexte ouvert côté serveur. Cette structure encapsule un handle ouvert sur le serveur.

  • FOBX --extension d’objet de fichier. Cette structure est une extension RDBSS de la structure FILE_OBJECT .

Ces structures de données sont organisées dans la hiérarchie suivante :

                SRV_CALL 
     FCB   <------> NET_ROOT
        SRV_OPEN  <---> V_NET_ROOT
            FOBX
                FILE_OBJECT

En réponse aux appels du système de fichiers noyau, RDBSS crée et finalise normalement pour un pilote de mini-redirecteur réseau toutes les structures mentionnées précédemment, à l’exception de la structure FOBX. Ainsi, un pilote de mini-redirecteur réseau n’appelle normalement que quelques-unes des routines RDBSS utilisées pour la gestion des connexions et de la structure de fichiers. La plupart de ces routines sont appelées en interne par RDBSS.

Toutes ces structures de données sont comptabilisées en référence. Les nombres de références sur une structure de données sont les suivants :

Structure des données Description du nombre de références

SRV_CALL

Nombre d’entrées NET_ROOT qui pointent vers SRV_CALL, plus une valeur dynamique.

NET_ROOT

Nombre d’entrées FCB et d’entrées V_NET_ROOT qui pointent vers NET_ROOT, plus une valeur dynamique.

V_NET_ROOT

Nombre d’entrées SRV_OPEN qui pointent vers V_NET_ROOT, plus une valeur dynamique.

FCB

Nombre d’entrées SRV_OPEN qui pointent vers FCB, plus une valeur dynamique.

SRV_OPEN

Nombre d’entrées FOBX qui pointent vers SRV_OPEN, plus une valeur dynamique.

FOBX

Une valeur dynamique.

Dans chaque cas, la valeur dynamique fait référence au nombre d’appelants qui ont référencé la structure sans la déréférencer. La partie statique du nombre de références est gérée par les routines elles-mêmes. Par exemple, RxCreateNetRoot incrémente le nombre de références pour la structure SRV_CALL associée.

Les appels de référence et les recherches réussies incrémentent le nombre de références ; la déréférence appelle décrémente le nombre. Créez des appels de routine allouez une structure et définissez le nombre de références sur 1.

Le nombre de références associées à une structure de données est d’au moins 1 plus le nombre d’instances de la structure de données au niveau inférieur suivant qui lui est associé. Par exemple, le nombre de références associées à une SRV_CALL, qui a deux NET_ROOTs associées, est d’au moins 3. Outre les références détenues par les structures NameTable internes rdBSS et la structure de données au niveau inférieur suivant, d’autres références peuvent avoir été acquises.

Ces restrictions garantissent qu’une structure de données à un niveau donné ne peut pas être finalisée (libéré et le bloc de mémoire associé libéré) tant que toutes les structures de données au niveau suivant n’ont pas été finalisées ou n’ont pas publié leurs références. Par exemple, si une référence à un fcb est conservée, il est sûr d’accéder aux structures V_NET_ROOT, NET_ROOT et SRV_CALL qui lui sont associées.

Les deux abstractions importantes utilisées dans l’interface entre les mini-redirecteurs réseau et RDBSS sont SRV_CALL et NET_ROOT structures. Une structure de SRV_CALL correspond au contexte associé à un serveur avec lequel une connexion a été établie, et la structure NET_ROOT correspond à un partage sur un serveur (cela peut également être vu comme une partie de l’espace de noms, qui a été revendiqué par un mini-redirecteur réseau).

La création de structures SRV_CALL et NET_ROOT implique généralement au moins un aller-retour réseau. Pour assurer la poursuite des opérations asynchrones, ces opérations sont modélisées comme une activité en deux phases. Chaque appel à un mini-redirecteur réseau pour créer un SRV_CALL et une structure de NET_ROOT est accompagné d’un appel du mini-redirecteur réseau vers le RDBSS pour notifier l’achèvement status de la demande. Actuellement, ils sont synchrones.

La création d’une structure de SRV_CALL est encore compliquée par le fait que le RDBSS doit choisir parmi un certain nombre de mini-redirecteurs réseau pour établir une connexion avec un serveur. Pour offrir au RDBSS une flexibilité maximale dans le choix du mini-redirecteur réseau qu’il souhaite déployer, la création d’une structure de SRV_CALL implique une troisième phase au cours de laquelle le RDBSS avertit le mini-redirecteur réseau d’un gagnant. Tous les mini-redirecteurs réseau perdus détruisent le contexte associé.

Cette section contient les rubriques suivantes :

The SRV_CALL Structure

The NET_ROOT Structure

The V_NET_ROOT Structure

The FCB Structure

The SRV_OPEN Structure

The FOBX Structure

Connexions et verrouillage de la structure de fichiers

Routines de gestion des blocs de contrôle de connexion et de fichiers