Rastreamento de links distribuídos e identificadores de objetos
O armazenamento de uma referência a um arquivo ou diretório usando o caminho e o nome de arquivo não é confiável. Se um usuário renomear um arquivo, isso vai desfazer os links para o arquivo. Se um usuário renomear o diretório, isso vai desfazer os links para o arquivo e todos os arquivos e subdiretórios na árvore de diretórios.
O serviço de rastreamento de link distribuído permite que aplicativos cliente rastreiem fontes de link que foram movidas. Os clientes que assinam o serviço de rastreamento de link podem manter a integridade das referências e os objetos podem ser rastreados de maneira transparente para o usuário.
Identificadores de objeto
O serviço de rastreamento de links mantém o link para um objeto usando um identificador de objeto (ID). Uma ID de objeto é um atributo opcional que identifica com exclusividade um arquivo ou um diretório em um volume.
Um índice de todas as IDs de objeto é armazenado no volume. As operações de renomeação, backup e restauração preservam IDs de objeto. No entanto, as operações de cópia não preservam IDs de objeto, pois isso violaria a exclusividade.
É possível realizar as seguintes operações em IDs de objeto:
- Criação
- Exclusão
- Consulta
Ao criar uma ID de objeto, você estabelece a identidade do arquivo para o serviço de rastreamento do link. Por outro lado, quando você exclui um ID de objeto, o serviço de rastreamento do link deixa de manter links para o arquivo. Para obter uma lista dos códigos de controle do sistema de arquivos que realizam operações em IDs de objeto, consulte Códigos de controle do gerenciamento de arquivos.
O serviço de rastreamento do link distribuído rastreia fontes de link para atalhos de shell e links OLE dentro dos volumes do sistema de arquivos NTFS. O cliente do link pode corrigir um link desfeito com informações atualizadas sobre o novo local da origem do link.
Recursos de rastreamento do link
Entre os atalhos de shell estão rastreamento de link heurístico que usa um algoritmo de pesquisa em árvore para encontrar uma correspondência para uma fonte de link movida. O algoritmo de pesquisa se baseia no último caminho conhecido do arquivo e nas informações do arquivo que incluem a data de criação, o tamanho do arquivo, o nome e a extensão do arquivo.
A vinculação OLE inclui o mesmo rastreamento de link heurístico. O Windows também inclui o mesmo rastreamento de link heurístico com algumas melhorias adicionais para pesquisar namespaces a fim de produzir resultados em alguns cenários comuns. Entre as melhorias estão o procedimento a seguir que depende dos limites de tempo impostos por um aplicativo cliente.
Para procurar namespaces
- Pesquise quatro níveis de diretório abaixo do último diretório.
- Mova um diretório para cima e repita as etapas 1 e 2 outras três vezes, o que poderá produzir resultados se o objeto tiver se movido para perto.
- Pesquise quatro níveis abaixo da raiz da área de trabalho, o que poderá produzir resultados se o objeto tiver sido movido para um local na mesma área de trabalho.
- Pesquise quatro níveis abaixo da raiz em cada unidade fixa local.
- Repita as etapas 1 a 3 sem o limite de quatro diretórios.
Observação
Esses esquemas de rastreamento de links são transparentes para o usuário final. No entanto, nem sempre eles produzem resultados positivos e podem ser demorados.
Para obter mais informações sobre atalhos de shell, consulte IShellLink.
Para obter mais informações sobre links OLE, consulte IOleLink.
Se um link for estabelecido para um arquivo no NTFS 3.0 ou posterior e o arquivo for movido para qualquer outro volume com NTFS 3.0 ou posterior no mesmo domínio, o arquivo poderá ser encontrado pelo serviço de rastreamento, sujeito a considerações de tempo. Além disso, se o arquivo for movido para fora do domínio ou dentro de um grupo de trabalho, ele será encontrado.
Para obter a versão NTFS de um volume, abra um prompt de comando com direitos de acesso de Administrador e execute o seguinte comando:
fsutil fsinfo ntfsinfo X:
em que X é a letra da unidade do volume.
Quando um link é criado para um arquivo, o arquivo de destino é considerado a fonte do link, e o criador do link é o cliente do link. Por exemplo, se um atalho de shell for criado para vincular a um documento de texto, o documento de texto será a fonte do link, e o atalho do shell será o cliente do link.
O serviço de rastreamento do link distribuído mantém links de arquivo para as seguintes situações que ocorrem em um domínio:
- O arquivo de fonte do link é movido de um volume do sistema de arquivos NTFS para outro dentro do mesmo domínio.
- O nome do computador que contém a origem do link é renomeado.
- Os compartilhamentos de rede no computador de fonte do link são alterados.
- O volume que contém o arquivo de fonte do link é movido para outro computador dentro do mesmo domínio.
O serviço de rastreamento do link distribuído também tenta manter links nas situações anteriores, mesmo quando eles não ocorrem em um domínio, ou seja, eles estão entre domínios ou dentro de um grupo de trabalho. Os links sempre podem ser mantidos nessas situações quando o compartilhamento de rede no computador de fonte do link é alterado. Eles também podem ser mantidos quando uma fonte do link é movida dentro de um computador. Os links normalmente podem ser mantidos quando a fonte do link é movida para outro computador, mas essa forma de rastreamento é menos confiável com o passar do tempo.
Funcionalidade de rastreamento do link
A funcionalidade de rastreamento do link é implementada principalmente na forma destes dois serviços de sistema:
- Cliente de Rastreamento de Link Distribuído
- Servidor de rastreamento de link distribuído
-
Cliente de Rastreamento de Link Distribuído
-
O cliente de rastreamento do link distribuído é executado em todos os computadores e gerencia as atividades de rastreamento do link para esse computador. Entre essas atividades estão a pesquisa das fontes de link e o processamento de movimentações de fonte do link. Quando uma fonte de link é movida, o serviço passa informações para o servidor de rastreamento de link distribuído que é executado em controladores de domínio.
-
Servidor de rastreamento de link distribuído
-
O servidor de rastreamento do link distribuído é executado cada controlador de domínio em um domínio. O serviço aceita notificações de movimentações de arquivo e volume do serviço de controle em um computador e permite que o cliente de rastreamento do link distribuído consulte o local atual de uma fonte de link.
Esse serviço de servidor mantém informações nos controladores de domínio sobre volumes e arquivos que foram movidos. As informações sobre movimentos não podem aumentar além de um tamanho específico e serão removidas automaticamente se forem desnecessárias.
Os serviços de rastreamento do link são expostos pelas interfaces IShellLink e IOleLink. Por isso, elas são usadas por atalhos de shell. Quando o método IShellLink::Resolve é chamado e o arquivo de referência não pode ser encontrado, por exemplo, quando o usuário ativa um atalho de shell, o serviço de rastreamento é chamado automaticamente para encontrar o arquivo. Da mesma forma, quando a implementação IOleLink não consegue encontrar um arquivo, por exemplo, no método BindToSource, ela chama automaticamente o serviço de rastreamento.
Limitações de rastreamento do link
Os serviços de rastreamento do link distribuído só estão disponíveis no sistema de arquivos NTFS e só estão disponíveis para fontes de link no NTFS 3.0 ou posterior. Por isso, se uma fonte de link for movida para um volume do sistema de arquivos FAT, as informações de rastreamento serão perdidas. Além disso, se uma fonte de link for movida entre o NTFS 3.0 ou posterior, mas o computador que estiver realizando a movimentação estiver executando uma versão anterior do Windows, as informações de rastreamento do link serão perdidas. Quando as informações de rastreamento do link são perdidas, nenhum dano é causado ao arquivo de fonte do link propriamente dito, ele simplesmente não é rastreável pelos serviços de rastreamento do link distribuído.
Para obter a versão NTFS de um volume, abra um prompt de comando com direitos de acesso de Administrador e execute o seguinte comando:
fsutil fsinfo ntfsinfo X:
em que X é a letra da unidade do volume.
Os links para arquivos em mídia removível não são mantidos. Além disso, o serviço de rastreamento não reconhece um novo volume do sistema de arquivos NTFS até que o sistema seja reinicializado. Um novo volume pode ficar disponível por causa de reparticionamento, reformatação de um volume do sistema de arquivos FAT para o sistema de arquivos NTFS ou conexão de uma nova unidade externa.