Rastreamento de Link Distribuído e Identificadores de Objeto

Armazenar uma referência a um arquivo ou diretório usando seu caminho e nome de arquivo não é confiável. Se um usuário renomear um arquivo, ele quebrará os links para o arquivo. Se um usuário renomear o diretório, ele quebrará os links para o arquivo e todos os arquivos e subdiretórios na árvore de diretórios.

O serviço de acompanhamento de link distribuído permite que os aplicativos cliente acompanhem as fontes de link que foram movidas. Os clientes que assinam o serviço de acompanhamento de link podem manter a integridade de suas referências e os objetos podem ser rastreados de forma transparente para o usuário.

Identificadores de objeto

O serviço de acompanhamento de link mantém seu link para um objeto usando um identificador de objeto (ID). Uma ID de objeto é um atributo opcional que identifica exclusivamente um arquivo ou diretório em um volume.

Um índice de todas as IDs de objeto é armazenado no volume. As operações renomear, fazer backup e restaurar preservam IDs de objeto. No entanto, as operações de cópia não preservam IDs de objeto, pois isso violaria sua exclusividade.

Você pode executar 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 acompanhamento de link. Por outro lado, quando você exclui uma ID de objeto, o serviço de acompanhamento de link para de manter links para o arquivo. Para obter uma lista dos códigos de controle do sistema de arquivos que executam operações em IDs de objeto, consulte Códigos de controle de gerenciamento de arquivos.

O serviço de acompanhamento de link distribuído rastreia fontes de link para atalhos de shell e links OLE em volumes do sistema de arquivos NTFS. O cliente de link pode corrigir um link quebrado com informações atualizadas sobre o novo local da origem do link.

Os atalhos de shell incluem o rastreamento de link heurístico que usa um algoritmo de pesquisa de árvore para encontrar uma correspondência para uma fonte de link movida. O algoritmo de pesquisa baseia-se no último caminho conhecido das informações de arquivo e arquivo que inclui a data de criação, o tamanho do arquivo e o nome e a extensão do arquivo.

A vinculação OLE inclui o mesmo acompanhamento de vínculo heurístico. O Windows também inclui o mesmo acompanhamento de vínculo heurístico com algumas melhorias adicionais para pesquisar espaços de nome para gerar resultados em alguns cenários comuns. As melhorias incluem o procedimento a seguir que depende dos limites de tempo impostos por um aplicativo cliente.

Para pesquisar espaços de nome

  1. Pesquise quatro níveis de diretório abaixo do último diretório.
  2. Mova para cima um diretório e repita as etapas 1 e 2 outras três vezes, o que pode gerar resultados se o objeto tiver se movido para perto.
  3. Pesquise quatro níveis abaixo da raiz da área de trabalho, o que poderá gerar resultados se o objeto tiver sido movido para um local na mesma área de trabalho.
  4. Pesquise quatro níveis abaixo da raiz em cada unidade fixa local.
  5. Repita as etapas 1 a 3 sem o limite de quatro diretórios.

Observação

Esses esquemas de acompanhamento de link são transparentes para o usuário final. No entanto, nem sempre geram 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 feito 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 do administrador e execute o seguinte comando:

fsutil fsinfo ntfsinfoX:

em que X é a letra da unidade do volume.

Quando um link é criado para um arquivo, o arquivo de destino é considerado a origem do link e o criador do link é o cliente de link. Por exemplo, se um atalho de shell for criado para vincular a um documento de texto, o documento de texto será a origem do link e o atalho do shell será o cliente de link.

O serviço de acompanhamento de link distribuído mantém links de arquivo para as seguintes situações que ocorrem em um domínio:

  • O arquivo de origem 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 origem do link são alterados.
  • O volume que contém o arquivo de origem do link é movido para outro computador dentro do mesmo domínio.

O serviço de acompanhamento de link distribuído também tenta manter links nas situações anteriores mesmo quando eles não ocorrem dentro de um domínio, ou seja, eles sã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 origem do link é alterado. Eles também podem ser mantidos quando uma fonte de link é movida dentro de um computador. Os links geralmente podem ser mantidos quando a origem do link é movida para outro computador, mas essa forma de rastreamento é menos confiável ao longo do tempo.

A funcionalidade de acompanhamento de link é implementada principalmente na forma dos dois serviços do sistema a seguir:

  • Cliente de Rastreamento de Link Distribuído
  • Servidor de Acompanhamento de Link Distribuído

Cliente de Acompanhamento de Link Distribuído

O cliente de acompanhamento de link distribuído é executado em todos os computadores e gerencia as atividades de acompanhamento de link para esse computador. Essas atividades incluem a pesquisa de fontes de link e o processamento de movimentações de fonte de link. Quando uma fonte de link é movida, o serviço passa informações para o servidor de rastreamento de link distribuído executado em controladores de domínio.

Servidor de Acompanhamento de Link Distribuído

O servidor de acompanhamento de link distribuído é executado em 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 rastreamento em um computador e permite que o cliente de rastreamento de 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 movimentações não podem aumentar além de um tamanho específico e serão removidas automaticamente se elas se tornarem desnecessárias.

Os serviços de acompanhamento de link são expostos pelas interfaces IShellLink e IOleLink . Portanto, eles são usados por atalhos de shell. Quando o método IShellLink::Resolve é chamado e o arquivo referenciante não pode ser encontrado, por exemplo, quando o usuário ativa um atalho de shell, o serviço de rastreamento é chamado automaticamente para localizar o arquivo. Da mesma forma, quando a implementação do IOleLink não consegue encontrar um arquivo, por exemplo, em seu método BindToSource , ele chama automaticamente no serviço de rastreamento.

Os serviços de acompanhamento de link distribuído estão disponíveis apenas no sistema de arquivos NTFS e só estão disponíveis para fontes de link no NTFS 3.0 ou posterior. Portanto, 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 está executando a movimentação estiver executando uma versão anterior do Windows, as informações de rastreamento de link serão perdidas. Quando as informações de rastreamento de link são perdidas, nenhum dano é feito ao próprio arquivo de origem do link, ele simplesmente não é rastreável pelos serviços de rastreamento de link distribuído.

Para obter a versão NTFS de um volume, abra um prompt de comando com direitos de acesso do administrador e execute o seguinte comando:

fsutil fsinfo ntfsinfoX:

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 acompanhamento não reconhece um novo volume do sistema de arquivos NTFS até que o sistema seja inicializado novamente. Um novo volume pode ficar disponível devido ao repartição, à reformatação de um volume do sistema de arquivos FAT ao sistema de arquivos NTFS ou à conexão de uma nova unidade externa.