Se você preferir usar ferramentas de linha de comando, o utilitário Accesschk do pacote MS Sysinternals pode ser usado para verificar se um processo está sendo executado com permissões de administrador.
Os seguintes sinalizadores são úteis para esse fim:
A -p
opção (processo) aceita o nome ou o PID de um processo em execução.
A -v
opção (detalhada) imprime o nível de integridade do Windows
A -q
opção (silencioso) impede que as informações da versão sejam impressas.
A -f
opção (completa) também pode ser usada para fornecer ainda mais informações sobre os processos (detalhes do token de segurança de usuários, grupos e privilégios), mas esse nível de detalhes adicionais não é necessário para verificar se há privilégios elevados.
Exemplo
Liste os privilégios de todos os cmd
processos em execução :
> accesschk.exe -vqp cmd
[5576] cmd.exe
Medium Mandatory Level [No-Write-Up, No-Read-Up]
RW ICS\Anthony
PROCESS_ALL_ACCESS
RW NT AUTHORITY\SYSTEM
PROCESS_ALL_ACCESS
[8224] cmd.exe
Medium Mandatory Level [No-Write-Up, No-Read-Up]
RW ICS\Anthony
PROCESS_ALL_ACCESS
RW NT AUTHORITY\SYSTEM
PROCESS_ALL_ACCESS
Error opening [6636] cmd.exe:
Access is denied.
Aqui, podemos ver que existem três cmd
processos que iniciei. Os dois primeiros têm um nível obrigatório médio (integridade) e são mostrados como executando na minha conta de domínio, indicando que esses processos foram iniciados sem privilégios de administrador.
No entanto, o último processo (PID 6636) foi iniciado com permissões elevadas, para que meu comando não privilegiado não possa ler informações sobre esse processo. Executar com permissões elevadas accesschk
e especificar explicitamente seu PID imprime as seguintes informações:
> accesschk.exe -vqp 6636
[6636] cmd.exe
High Mandatory Level [No-Write-Up, No-Read-Up]
RW BUILTIN\Administrators
PROCESS_ALL_ACCESS
RW NT AUTHORITY\SYSTEM
PROCESS_ALL_ACCESS
Agora podemos ver que o nível de integridade é alto e que esse processo está sendo executado Administrators
no grupo de segurança interno.