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
mklinkem 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
DeviceIoControlpara configurar o buffer de reparse (FSCTL_SET_REPARSE_POINT). - Diferenciais:
- Recursividade: Oferece parâmetros como
-spara listar e gerenciar junções de forma recursiva, algo que o comandodir /alnativo 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).
- Recursividade: Oferece parâmetros como
Comparativo Técnico
| Característica | MKLINK | JUNCTION.EXE |
| Origem | Nativo (CMD) | Sysinternals (Binário) |
| Dependência | Nenhuma | Download do executável |
| Escopo | Symlinks, Hard Links, Junções | Apenas Junções |
| Auditoria | Básica (dir /al) | Avançada e recursiva (-s) |
| API | API de alto nível | DeviceIoControl direto |
Qual escolher?
A escolha entre ambos deve ser ditada pela necessidade de auditoria e automação:
- 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). - 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.
