Nada embutido, desculpe. Você poderia dar ao usuário que está executando o processo (seja você mesmo ou outra conta) o privilégio SeSymbolicLink, que permitiria a criação de links simbólicos sem fornecer outro acesso em nível de administrador. Os links simbólicos ainda seriam criados em qualquer lugar onde a conta pudesse criar um arquivo, e verificações normais de acesso ainda se aplicariam (se o link simbólico apontasse para um arquivo que você pode ler mas não escrever, você poderia lê-lo através do symlink mas ainda não seria capaz de escrever para ele). Espero que isso seja seguro o suficiente; a única razão pela qual os links simbólicos exigem privilégios especiais no Windows é porque eles não estavam disponíveis até o Vista, então muitos programas legados não os manipulam adequadamente, especialmente para coisas como loops de diretórios ou outras idéias ruins.
Para permitir que um determinado usuário crie links simbólicos (dando ao usuário SeSymbolicLinkPrivilege), faça o seguinte:
- Execute o editor de diretiva de segurança local (
secpol.msc
). Isso exigirá acesso de administrador. - Procure em "Políticas locais" - > "Atribuição de direitos de usuário". Encontre a entrada "Criar links simbólicos".
- Clique duas vezes na entrada para abri-la e, em seguida, pressione
[Add User or Group...]
. - Na caixa exibida, digite seu nome de usuário do Windows e pressione
[Check Names]
. Ele deve mudar para um nome totalmente qualificado, com um sublinhado. Se isso não acontecer, você deve tentar outras formas de nome de usuário. Você também pode clicar em[Advanced]
para pesquisar uma lista de opções. - Quando o nome de usuário estiver sublinhado na caixa, clique em
[OK]
na janela "Selecionar usuários e grupos" e, em seguida, clique em[OK]
na janela "Criar propriedades do link simbólico". - Se o usuário em questão estiver conectado, efetue logout e login novamente. Esse usuário agora deve ser capaz de criar links simbólicos sem precisar de privilégios de administrador.
Outra opção é usar links físicos NTFS. Ao contrário dos links simbólicos, qualquer usuário pode criar um link físico (por padrão). No entanto, também ao contrário dos links simbólicos (e ao contrário dos hardlinks POSIX), você não pode criar um hardlink a menos que tenha uma permissão específica (Write Attributes? Something na categoria geral de "Write") no arquivo de destino. Assim, se você só precisa vincular arquivos (não diretórios), e você tem acesso de escrita aos arquivos em questão, você provavelmente pode usar hardlinks muito bem (eles operam como hardlinks POSIX, seguindo o nó do arquivo ao invés do nome do arquivo, e se você excluir o "arquivo original", mas não o link, os dados não serão excluídos até que você também exclua o link).
Se você precisar de links para diretórios também, você pode - como sugere o @WesSayeed - usar junções de NTFS. Eles são mais difíceis de criar programaticamente (embora sejam fáceis em um script), mas funcionam bem para a maioria das finalidades às quais você normalmente pode usar um link simbólico de diretório.