Verificando a elevação do UAC do processo em execução no prompt de comando

2

Como posso usar o prompt de comando (cmd.exe) para verificar se um processo está sendo executado com elevação / privilégios elevados do UAC?

Se eu fosse usar o Gerenciador de Tarefas (taskmgr.exe), poderia verificar adicionando a "Virtualização UAC" ou, no Windows 8, a coluna "Elevado". ( Este artigo explica muito bem.)

Mas posso obter essas informações por meio do prompt de comando, por exemplo, com lista de tarefas ou wmic? Existe alguma outra ferramenta de linha de comando embutida no Windows que me permita verificar o status da elevação?

Minha pergunta se aplica a todos os sistemas operacionais Windows com o UAC.

    
por kazhtaco 30.06.2015 / 05:09

3 respostas

1

Eu não acho que haja nada embutido no Windows que possa mostrar essas informações na linha de comando. Mesmo o PowerShell parece não ajudar sem chamar as funções do Win32.

O SysInternals AccessChk pode funcionar para você:

.\accesschk.exe -p powershell.exe -e

correu elevado, mostra:

[3256] powershell.exe
  Medium Mandatory Level [No-Write-Up, No-Read-Up]
  RW superUserPC2\peter
  RW NT AUTHORITY\SYSTEM
[3660] powershell.exe
  High Mandatory Level [No-Write-Up, No-Read-Up]
  RW BUILTIN\Administrators
  RW NT AUTHORITY\SYSTEM

Você pode ver que o segundo PowerShell (3660) está sendo executado porque possui o High Mandatory Level

mas se você executar este comando como usuário padrão, você verá:

[3256] powershell.exe
  Medium Mandatory Level [No-Write-Up, No-Read-Up]
  RW superUserPC2\peter
  RW NT AUTHORITY\SYSTEM
Error opening [3660] powershell.exe:
Access is denied.

você ainda sabe que o segundo PowerShell é executado porque você tem um Access denied para ele.

.\accesschk.exe -p -f powershell -e

fornece ainda mais informações

    
por 30.06.2015 / 18:05
1

A maneira mais limpa de verificar privilégios de administrador usando um script CMD, que eu encontrei, é algo assim:

@echo off

REM  Calling verify with no args just checks the verify flag,
REM   we use this for its side effect of setting errorlevel to zero
verify >nul

REM  Attempt to read a particular system directory - the DIR
REM   command will fail with a nonzero errorlevel if the directory is
REM   unreadable by the current process.  The DACL on the
REM   c:\windows\system32\config\systemprofile directory, by default,
REM   only permits SYSTEM and Administrators.
dir %windir%\system32\config\systemprofile >nul 2>nul

REM  Use IF ERRORLEVEL or %errorlevel% to check the result
if not errorlevel 1 echo has Admin privs
if     errorlevel 1 echo has only User privs

Este método usa apenas builtins CMD.exe, por isso deve ser muito rápido. Ele também verifica as capacidades reais do processo, em vez de verificar se há SIDs ou membros de grupos, portanto, a permissão eficaz é testada. E isso funciona desde o Windows 2003 e XP. Processos de usuário normais ou processos não elevados falham no probe de diretório, onde processos Admin ou elevados são bem-sucedidos.

    
por 07.09.2016 / 21:29
0

Você pode verificar com o comando tasklist

Experimente tasklist /v , que lhe dará o processo cujo processo possui direitos

Sintaxe :

tasklist /v

Uso de amostra :

tasklist.exe /FI "username eq system" /v

, que listará os processos executados pelo usuário do sistema.

    
por 30.06.2015 / 07:40