MKLINK vs. JUNCTION: A mecânica por trás dos Reparse Points no NTFS e qual escolher.

Para um administrador de sistemas, entender como o Windows gerencia a hierarquia de diretórios é fundamental. Frequentemente, a necessidade de mapear pastas em locais distintos do sistema de arquivos é suprida por duas ferramentas que parecem fazer a mesma coisa: mklink e o utilitário junction. No entanto, sob o capô do NTFS, as implementações possuem distinções importantes.

O Mecanismo: Reparse Points

Tanto mklink /J quanto junction.exe manipulam o atributo FILE_ATTRIBUTE_REPARSE_POINT na MFT. Eles criam um redirecionamento no nível do sistema de arquivos que é interpretado pelo I/O Manager antes de qualquer acesso ao arquivo ser efetivado.

1. MKLINK (O nativo do Windows)

Introduzido a partir do Windows Vista, o mklink é um comando interno (cmd.exe).

  • Implementação: Ele é um invólucro para a API CreateSymbolicLink (para Symlinks) e para a manipulação direta de junções.
  • Comportamento: Como comando nativo, ele não requer dependências. No entanto, por ser parte do shell, o uso de mklink em ambientes com restrições de execução (como GPOs rígidas ou AppLocker) pode ser bloqueado devido à necessidade de privilégios específicos (SeCreateSymbolicLinkPrivilege).
  • Uso: Recomendado para scripts de automação que precisam ser executados de forma nativa sem dependência de binários externos.

2. JUNCTION.EXE (O clássico da Sysinternals)

O utilitário junction.exe de Mark Russinovich é uma ferramenta de terceiros (agora mantida pela Microsoft) que precedeu a padronização das funções no Windows.

  • Implementação: Utiliza chamadas diretas via DeviceIoControl para configurar o buffer de reparse (FSCTL_SET_REPARSE_POINT).
  • Diferenciais:
    • Recursividade: Oferece parâmetros como -s para listar e gerenciar junções de forma recursiva, algo que o comando dir /al nativo não faz com a mesma eficiência.
    • Compatibilidade: Funciona em versões legadas e é uma ferramenta de diagnóstico superior para identificar dangling junctions (links que apontam para locais que não existem mais).

Comparativo Técnico

CaracterísticaMKLINKJUNCTION.EXE
OrigemNativo (CMD)Sysinternals (Binário)
DependênciaNenhumaDownload do executável
EscopoSymlinks, Hard Links, JunçõesApenas Junções
AuditoriaBásica (dir /al)Avançada e recursiva (-s)
APIAPI de alto nívelDeviceIoControl direto

Qual escolher?

A escolha entre ambos deve ser ditada pela necessidade de auditoria e automação:

  1. Deploy e Automação Simples: O mklink /J é a escolha padrão. Ele não exige a distribuição de binários adicionais e é consistente em qualquer instalação do Windows (Server ou Workstation).
  2. Auditoria e Gestão de Servidores: O junction.exe é a ferramenta de escolha. Para administradores que precisam mapear, verificar integridade e limpar estruturas complexas de diretórios em servidores de arquivos, a capacidade recursiva e o controle de erros do utilitário Sysinternals superam a implementação nativa.

Nota: Ambos criam objetos que são resolvidos localmente pelo Kernel. Portanto, qualquer tentativa de apontar esses links para caminhos de rede (UNC) está sujeita a timeouts de rede e políticas de segurança de SMB, independentemente da ferramenta utilizada para a criação.

Rolar para cima