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 |
---|---|
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. |
|
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. |
|
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. |
|
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. |