The FCB Structure
La structure de bloc de contrôle de fichier (FCB) est pointée vers le champ FsContext dans l’objet fichier. Toutes les opérations qui partagent un fcb font référence au même fichier. Malheureusement, les serveurs SMB sont implémentés aujourd’hui de telle sorte qu’un nom peut être un alias, de sorte que deux noms différents peuvent être le même fichier. Le fcb est le point focal des opérations de fichier. Étant donné que les opérations sur le même fcb se trouvent en fait sur le même fichier, la synchronisation est basée sur le FCB plutôt que sur un objet de niveau supérieur.
Chaque fois qu’une structure FCB est créée, une structure SRV_OPEN et FOBX correspondante est également créée. Plusieurs structures SRV_OPEN peuvent être associées à une structure FCB donnée, et plusieurs structures FOBX sont associées à une structure SRV_OPEN donnée. Dans la plupart des cas, la structure SRV_OPEN est associée à un fcb et le nombre de structures FOBX associées à une structure SRV_OPEN donnée est 1. Pour améliorer la localisation spatiale et le comportement de pagination dans de tels cas, l’allocation d’une structure FCB implique également une allocation pour une structure SRV_OPEN et FOBX associée.
RDBSS tente d’allouer les structures FCB, SRV_OPEN et FOBX associées en mémoire pour améliorer le comportement de pagination. RDBSS n’alloue pas les structures FCB et NET_ROOT ensemble, car les structures NET_ROOT ne sont pas paginées, mais les structures FCB sont généralement paginées (sauf s’il s’agit de fichiers de pagination).
La structure FCB correspond à chaque fichier et répertoire ouverts. La structure FCB est divisée en deux parties :
Partie non paginée allouée dans un pool non paginé
Composant paginé
Le premier est le NON_PAGED_FCB et le dernier est appelé FCB.
Le fcb contient un pointeur vers la partie NON_PAGED_FCB correspondante. Un backpointer est géré à partir du NON_PAGED_FCB vers le fcb à des fins de débogage dans les builds vérifiées.
Le NON_PAGED_FCB contient une structure de pointeurs spéciaux utilisés par le Gestionnaire de mémoire et le Gestionnaire de cache pour manipuler des objets de section. Notez que les valeurs de ces pointeurs sont normalement définies en dehors du système de fichiers.
Une structure FCB contient les éléments suivants :
Structure FSRTL_COMMON_HEADER
Nombre de signatures et de références
Nom et informations de table associées
Backpointer vers la structure NET_ROOT associée
Liste des structures SRV_OPEN associées
Objet d’appareil
Tout stockage supplémentaire demandé par le mini-redirecteur réseau ou le créateur de la structure FCB