Partilhar via


Executando operações privilegiadas

As operações privilegiadas exigem privilégios de segurança, como SeLoadDriverPrivilege (wbemPrivilegeLoadDriver no Scripting API Constants), um privilégio que deve ser habilitado para uma conta que está carregando um driver de dispositivo. Você não pode adicionar privilégios a um administrador ou usuário por meio do WMI, você só pode habilitar privilégios que a conta já tem. Para obter uma lista de privilégios, consulte Privilege_Constants.

Por padrão, um usuário local em um computador pode ler dados estáticos do repositório WMI , gravar em instâncias fornecidas por provedores e executar métodos de provedor, a menos que o provedor imponha requisitos de segurança especiais próprios. Somente os administradores podem se conectar a um computador remoto, alterar descritores de segurança ou alterar dados estáticos do repositório WMI, como uma definição de classe WMI. Todos os privilégios estão habilitados para uma conexão remota. Para obter mais informações, consulte Protegendo uma conexão WMI remota.

As constantes de privilégio para C++ diferem daquelas que são usadas por linguagens de automação, como Visual Basic. Os scripts devem usar o valor da constante em vez do nome. Para obter mais informações, consulte Executando operações privilegiadas usando C++ ou Executando operações privilegiadas usando VBScript.

Uma causa comum de erros de acesso negado ao usar o WMI é a falta de privilégios ativados para executar operações, como obter todas as instâncias do Win32_NTEventlogFile. Sem habilitar o SeSecurity privilégio, você não pode acessar o arquivo de log de segurança.

O exemplo de código VBScript a seguir mostra como definir o SeSecurity privilégio na cadeia de caracteres de moniker. Quando usado no apelido, o nome do privilégio entre parênteses remove o "Se" inicial. Para obter mais informações, consulte Construindo uma cadeia de caracteres de moniker.

strComputer = "."
Set objWMIService = GetObject("winmgmts:" _
    & "{impersonationLevel=impersonate,(Security)}!\\" _
    & strComputer & "\root\cimv2")
Set colFiles = objWMIService.ExecQuery _
    ("Select * from Win32_NTEventLogFile " _
    & "Where LogFileName='Security'")
For Each LogFile in colFiles
Wscript.Echo LogFile.NumberOfRecords
Next

Constantes de privilégio