A estrutura NET_ROOT

Uma estrutura raiz líquida, NET_ROOT, contém informações para cada conexão de servidor de rede/compartilhamento específica mantida por um minidiretório de rede.

Um NET_ROOT é o que o RDBSS e um driver de minidiretório de rede desejam lidar, não um servidor. Assim, o RDBSS normalmente cria e abre uma estrutura NET_ROOT e chama o driver de minidiretório de rede responsável por abrir o servidor. Espera-se que o driver de minidiretório de rede preencha os campos apropriados na estrutura de NET_ROOT passada.

Uma lista das estruturas de NET_ROOT é mantida pelo RDBSS para cada SRV_CALL. Cada estrutura NET_ROOT tem alguns elementos comuns com outras estruturas RDBSS, juntamente com elementos que são exclusivos de uma estrutura NET_ROOT. As rotinas rdbss que gerenciam estruturas de NET_ROOT modificam apenas os seguintes elementos:

  • Contagem de assinaturas e referências

  • Um nome e informações de tabela associadas

  • Um ponteiro para trás para a estrutura de SRV_CALL associada

  • Informações de tamanho para as várias subestruturas

  • Uma tabela de pesquisa de estruturas FCB associadas

  • Qualquer armazenamento adicional é solicitado pelo minidiretório de rede (ou pelo criador da estrutura de dados NET_ROOT)

Uma estrutura NET_ROOT também contém uma lista de estruturas de RX_CONTEXT que estão aguardando a conclusão da transição de NET_ROOT antes da retomada do processamento do IRP. Isso normalmente acontece quando solicitações simultâneas são direcionadas a um servidor. Uma dessas solicitações é iniciada enquanto as outras solicitações são enfileiradas. O espaço extra reservado para uso pelo minidiretório de rede começa no final da estrutura de dados NET_ROOT conhecida para que um minidiretório de rede possa simplesmente se referir a esse espaço extra usando campos de contexto de um arquivo de inclusão.

A finalização de uma estrutura de NET_ROOT consiste em duas partes:

  1. Destruindo a associação com todos os V_NET_ROOTS

  2. Liberando a memória

Pode haver um atraso entre essas duas ações e um campo na estrutura NET_ROOT impede que a primeira etapa seja duplicada.