A estrutura FCB
A estrutura fcb (bloco de controle de arquivo) é apontada pelo campo FsContext no objeto de arquivo. Todas as operações que compartilham um FCB referem-se ao mesmo arquivo. Infelizmente, os servidores SMB são implementados hoje de forma que um nome possa ser um alias, para que dois nomes diferentes possam ser o mesmo arquivo. O FCB é o ponto focal das operações de arquivo. Como as operações no mesmo FCB estão, na verdade, no mesmo arquivo, a sincronização é baseada no FCB, em vez de em algum objeto de nível mais alto.
Sempre que uma estrutura FCB é criada, uma estrutura SRV_OPEN e FOBX correspondentes também é criada. Mais de uma estrutura SRV_OPEN pode ser associada a uma determinada estrutura fcb e mais de uma estrutura FOBX está associada a uma determinada estrutura SRV_OPEN. Na maioria dos casos, a estrutura de SRV_OPEN está associada a uma FCB e o número de estruturas FOBX associadas a uma determinada estrutura de SRV_OPEN é 1. Para melhorar a localidade espacial e o comportamento de paginação nesses casos, a alocação para uma estrutura FCB também envolve uma alocação para uma estrutura de SRV_OPEN e FOBX associadas.
O RDBSS tenta alocar as estruturas FCB, SRV_OPEN e FOBX associadas na memória para melhorar o comportamento de paginação. O RDBSS não aloca as estruturas fcb e NET_ROOT juntas porque as estruturas de NET_ROOT não são paginadas, mas as estruturas fcb geralmente são paginadas (a menos que sejam arquivos de paginação).
A estrutura FCB corresponde a todos os arquivos e diretórios abertos. A estrutura FCB é dividida nas duas partes a seguir:
Uma parte não paginada alocada no pool não paginado
Uma parte paginada
O primeiro é o NON_PAGED_FCB e o posterior é conhecido como FCB.
O FCB contém um ponteiro para a parte NON_PAGED_FCB correspondente. Um backpointer é mantido do NON_PAGED_FCB para o FCB para fins de depuração em builds verificados.
O NON_PAGED_FCB contém uma estrutura de ponteiros especiais usados pelo Gerenciador de Memória e pelo Gerenciador de Cache para manipular objetos de seção. Observe que os valores desses ponteiros normalmente são definidos fora do sistema de arquivos.
Uma estrutura FCB contém o seguinte:
Uma estrutura FSRTL_COMMON_HEADER
Uma contagem de assinaturas e referências
Um nome e informações de tabela associadas
Um backpointer para a estrutura de NET_ROOT associada
Uma lista de estruturas de SRV_OPEN associadas
O objeto do dispositivo
Qualquer armazenamento adicional solicitado pelo minidiretório de rede ou pelo criador da estrutura FCB