TL; DR - A única opção é gerar outro processo. (Uma nova cmd.exe
.) No caso do prompt de comando, iniciar uma nova instância com um token de acesso com permissões mais altas sempre resultará na criação de uma nova janela .
Não é possível conceder permissões adicionais a um processo já em execução .
Quando um usuário com direitos administrativos efetua login em uma máquina Windows com o Controle de Conta de Usuário (UAC) ativado, dois tokens de acesso separados são criados :
- Um com acesso total de administrador e
- Um segundo "token filtrado" com acesso padrão do usuário
No momento em que um processo (por exemplo CMD.EXE
) é criado, é atribuído um desses dois tokens de acesso . Se o processo for executado "elevado" como Administrador, o token de acesso não filtrado será usado. Se o processo não receber direitos de administrador, o token de usuário padrão filtrado será usado.
Após a criação de um processo, não é possível substituir seu token de acesso . 1 Neste segmento do MSDN Application Security para Windows Desktop , um pôster que se identifica como membro da Equipe do Kernel do Windows declara:
O kernel do NT nunca teve a intenção de permitir a troca de token depois que um processo começou a ser executado. Isso ocorre porque os identificadores etc. podem ter sido abertos em um contexto de segurança antigo, as operações a bordo podem usar contextos de segurança inconsistentes etc. Como tal, normalmente não faz sentido alternar o token de um processo após o início da execução. No entanto, isso não foi imposto até o Vista . [ênfase minha] (Fonte, graças a @Ben N )
Nota: O Controle de Conta de Usuário foi introduzido com o lançamento do Windows Vista .
Esta resposta do superusuário cita duas fontes adicionais que confirmam o mesmo:
Portanto, simplesmente não é possível elevar o prompt de comando ou qualquer outro processo no local. A única opção é gerar outro processo com um novo token de acesso (que pode ser outra instância do processo original, se desejado). No caso do prompt de comando, iniciar uma nova instância com um token de acesso com permissões mais altas sempre resultará na criação de uma nova janela e, se os prompts do UAC estiverem ativados no sistema, eles também serão acionados.
1 Você pode ajustar os privilégios em um token de acesso existente com a função AdjustTokenPrivileges , mas de acordo com o MSDN :
A função AdjustTokenPrivileges não pode adicionar novos privilégios ao token de acesso. Ele só pode ativar ou desativar os privilégios existentes do token.