Como posso criar links simbólicos no Windows 8.1 sem um prompt de comando do administrador?

8

Espero que alguém possa me corrigir onde estou errando ao tentar criar um link simbólico no Windows 8.1 sem precisar executar o cmd.exe como administrador.

Sempre que tento criar um link simbólico a partir de um prompt de comando regular, recebo a resposta de permissões usual ...

C:\Users\MyUser>mklink symlink.txt mytextfile.txt
You do not have sufficient privilege to perform this operation.

... e funciona em um prompt de comando do administrador (conforme o esperado) ...

C:\Users\MyUser>mklink symlink.txt mytextfile.txt
symbolic link created for symlink.txt <<===>> mytextfile.txt

No entanto, não parece que nenhuma das correções usuais esteja funcionando no Windows 8.1 (pelo menos, as correções que eu pude encontrar).

Eu tentei seguir a resposta para Como criar um link no Windows 7 home premium como um usuário comum? , mas parece não ter efeito.

Eu também tenho o UAC definido no seu nível mais baixo.

Falta mais alguma coisa?

Karl Nicoll
fonte
2
A culpa é do UAC. Veja a resposta de "Paul Betts" aqui: stackoverflow.com/questions/15320550/…
StackzOfZtuff
@StackzOfZtuff - Bem, isso é chato. Obrigado pelo link, parece que vou ter que escolher entre UAC e nenhum aplicativo Metro. Acho que nunca vou entender o que a Microsoft estava tentando fazer com o UAC.
13134 Karl Nicoll

Respostas:

9

Privilégio ausente no token "filtrado"

Desative o UAC. Ou com o UAC ativado: após ativar, SECreateSymbolicLinkPrivilegetente com uma conta que não seja de administrador .

Explicação
É pegadinha 17. De como eu li a documentação do MS.

Se você tiver um grupo de administradores conhecido na lista negra na sua conta de usuário, um segundo token não elevado será criado.

O relevante SeCreateSymbolicLinkPrivilegeé filtrado quando o token não elevado é gerado a partir do token elevado.

No MSDN: Isolamento de privilégios da interface do usuário (UIPI) :

O Windows criará dois tokens de acesso para o usuário, se uma das seguintes situações for verdadeira: A conta do usuário contém qualquer um dos seguintes RIDs.
DOMAIN_GROUP_RID_ADMINS
[...]
que privilégios contêm o token filtrado se o token original continha algum dos RIDS restritos listados acima. Se algum dos RIDs restritos estiver no token, todos os privilégios serão removidos, exceto:
SeChangeNotifyPrivilege
SeShutdownPrivilege
SeUndockPrivilege
SeReserveProcessorPrivilege
SeTimeZonePrivilege

Portanto, a solução é desativar completamente a segunda geração de token. Removendo todos os grupos mencionados da sua conta ou desativando completamente o UAC.

(Isenção de responsabilidade: Paul Betts fez o trabalho. Acabei de adicionar alguns detalhes. Veja sua resposta aqui: /programming/15320550/secreatesymboliclinkprivilege-ignored-on-windows-8 )

StackzOfZtuff
fonte