Struttura FCB

La struttura del blocco di controllo file (FCB) è puntata dal campo FsContext nell'oggetto file. Tutte le operazioni che condividono un fcB fanno riferimento allo stesso file. Sfortunatamente, i server SMB vengono implementati oggi in modo che un nome possa essere un alias, in modo che due nomi diversi possano essere lo stesso file. FcB è il punto focale delle operazioni di file. Poiché le operazioni sullo stesso FCB si trovano effettivamente nello stesso file, la sincronizzazione si basa sull'oggetto FCB anziché su un oggetto di livello superiore.

Ogni volta che viene creata una struttura FCB, viene creata anche una struttura SRV_OPEN e FOBX corrispondente. Più di una struttura SRV_OPEN può essere associata a una determinata struttura FCB e più di una struttura FOBX è associata a una determinata struttura SRV_OPEN. Nella maggior parte dei casi, la struttura SRV_OPEN è associata a un FCB e il numero di strutture FOBX associate a una determinata struttura SRV_OPEN è 1. Per migliorare la localizzazione spaziale e il comportamento di paging in tali casi, l'allocazione per una struttura FCB comporta anche un'allocazione per una struttura SRV_OPEN e FOBX associata.

RDBSS tenta di allocare le strutture FCB, SRV_OPEN e FOBX associate in memoria per migliorare il comportamento di paging. RDBSS non alloca le strutture FCB e NET_ROOT insieme perché le strutture NET_ROOT non vengono impaginate, ma le strutture FCB in genere vengono impaginate (a meno che non siano file di paging).

La struttura FCB corrisponde a ogni file e directory aperta. La struttura FCB viene suddivisa in due parti seguenti:

  • Una parte non a pagina allocata nel pool non a pagina

  • Parte in pagina

Il precedente è il NON_PAGED_FCB e il secondo è denominato FCB.

Il fcB contiene un puntatore alla parte NON_PAGED_FCB corrispondente. Un backpointer viene mantenuto dal NON_PAGED_FCB al fcB per scopi di debug nelle compilazioni archiviate.

La NON_PAGED_FCB contiene una struttura di puntatori speciali usati da Gestione memoria e Gestione cache per modificare gli oggetti sezione. Si noti che i valori per questi puntatori sono normalmente impostati all'esterno del file system.

Una struttura FCB contiene quanto segue:

  • Struttura FSRTL_COMMON_HEADER

  • Un conteggio di firme e riferimenti

  • Informazioni relative a un nome e a una tabella associata

  • Un backpointer alla struttura di NET_ROOT associata

  • Elenco di strutture di SRV_OPEN associate

  • Oggetto dispositivo

  • Qualsiasi risorsa di archiviazione aggiuntiva richiesta dal mini-reindirizzamento di rete o dall'autore della struttura FCB