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 -popção (processo) aceita o nome ou o PID de um processo em execução.
A -vopção (detalhada) imprime o nível de integridade do Windows
A -qopção (silencioso) impede que as informações da versão sejam impressas.
A -fopçã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 cmdprocessos 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 cmdprocessos 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 accesschke 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 Administratorsno grupo de segurança interno.