Gerenciamento de Tabela de Prefixo

O RDBSS define estruturas de dados que permitem o uso de tabelas de prefixo para catalogar nomes de SRV_CALL, NET_ROOT e V_NET_ROOT.

A implementação atual do gerenciamento de nomes no RDBSS usa uma tabela que tem os seguintes componentes:

  • Uma fila de nomes inseridos

  • Um carimbo de versão

  • Um recurso de bloqueio de tabela que controla o acesso à tabela

  • Um valor que indica se as correspondências de nome não diferenciam maiúsculas de minúsculas

  • Um bucket de entradas de valor de hash para esta tabela de prefixo

O recurso de bloqueio de tabela é usado da maneira normal: compartilhado para operações de pesquisa, exclusivo para operações de alteração.

O carimbo de versão muda a cada alteração. O motivo da fila é que o pacote de tabela de prefixo permite que vários chamadores sejam enumerados por vez. A fila de nomes inseridos e o carimbo de versão permitem que vários chamadores sejam enumerados simultaneamente. A fila pode ser usada como uma pesquisa mais rápida para nomes de arquivo, mas a tabela de prefixo é definitivamente a abordagem correta para estruturas NET_ROOT.

Essas rotinas de gerenciamento de tabela de prefixo são usadas internamente pelo RDBSS em resposta a uma chamada do MUP para reivindicar um nome ou para formar o caminho de criação para uma estrutura de NET_ROOT. Essas rotinas de gerenciamento de tabela de prefixo RDBSS também podem ser usadas por minidiretórios de rede, desde que o bloqueio apropriado seja adquirido antes de acessar a tabela e o bloqueio seja liberado quando o trabalho for concluído. O uso normal por um driver seria o seguinte:

  • Adquira um bloqueio compartilhado chamando RxAcquirePrefixTableLockShared.

  • Pesquise um nome chamando RxPrefixTableLookupName.

  • Libere o bloqueio compartilhado chamando RxReleasePrefixTableLock.

Observe que determinadas rotinas são implementadas apenas no Windows XP e em versões anteriores do Windows. RxPrefixTableLookupName é a única rotina de gerenciamento de tabela de prefixo implementada em todas as versões do Windows

As rotinas de gerenciamento de tabela de prefixo RDBSS incluem o seguinte:

Rotina Descrição

RxpAcquirePrefixTableLockExclusive

Essa rotina adquire um bloqueio exclusivo em uma tabela de prefixo usada para catalogar nomes de SRV_CALL e NET_ROOT.

Essa rotina só está disponível no Windows XP e no Windows 2000. Essa rotina é usada internamente pelo RDBSS e não deve ser usada por minidiretórios de rede.

RxpAcquirePrefixTableLockShared

Essa rotina adquire um bloqueio compartilhado em uma tabela de prefixo usada para catalogar nomes SRV_CALL e NET_ROOT.

Essa rotina só está disponível no Windows XP e no Windows 2000. Essa rotina é usada internamente pelo RDBSS e não deve ser usada por minidiretórios de rede.

RxPrefixTableLookupName

A rotina procura um nome em uma tabela de prefixo usada para catalogar SRV_CALL e NET_ROOT nomes e converte do ponteiro subjacente para a estrutura que o contém.

RxpReleasePrefixTableLock

Essa rotina libera um bloqueio em uma tabela de prefixo usada para catalogar nomes de SRV_CALL e NET_ROOT.

Essa rotina só está disponível no Windows XP e no Windows 2000. Essa rotina é usada internamente pelo RDBSS e não deve ser usada por minidiretórios de rede.

A partir do Windows Server 2003, as rotinas mencionadas na tabela anterior, exceto RxPrefixTableLookupName, são substituídas por macros. As macros a seguir são definidas que chamam as rotinas da tabela de prefixo com menos parâmetros.

Macro Descrição

RxAcquirePrefixTableLockExclusive (TABLE, WAIT)

Essa macro adquire o bloqueio de tabela de prefixo no modo exclusivo para operações de alteração.

RxAcquirePrefixTableLockShared (TABLE, WAIT)

Essa macro adquire o bloqueio de tabela de prefixo no modo compartilhado para operações de pesquisa.

RxIsPrefixTableLockAcquired (TABLE)

Essa macro indica se o bloqueio de tabela de prefixo foi adquirido no modo exclusivo ou compartilhado.

RxIsPrefixTableLockExclusive (TABLE)

Essa macro indica se o bloqueio de tabela de prefixo foi adquirido no modo exclusivo.

RxReleasePrefixTableLock (TABLE)

Essa macro libera o bloqueio de tabela de prefixo.