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