Ejecución de operaciones con privilegios

Las operaciones con privilegios requieren privilegios de seguridad como SeLoadDriverPrivilege (wbemPrivilegeLoadDriver en las constantes de la API de scripting), un privilegio que se debe habilitar para una cuenta que está cargando un controlador de dispositivo. No puede agregar privilegios a un administrador o usuario a través de WMI, solo puede habilitar los privilegios que la cuenta ya tiene. Para obtener una lista de privilegios, consulte Privilege_Constants.

De forma predeterminada, un usuario local de un equipo puede leer datos estáticos del repositorio WMI, escribir en instancias proporcionadas por proveedores y ejecutar métodos de proveedor, a menos que el proveedor aplique requisitos de seguridad especiales propios. Solo los administradores pueden conectarse a un equipo remoto, cambiar los descriptores de seguridad o cambiar los datos estáticos del repositorio WMI, como una definición de clase WMI. Todos los privilegios están habilitados para una conexión remota. Para obtener más información, consulte Protección de una conexión WMI remota.

Las constantes de privilegios para C++ difieren de las que usan los lenguajes de automatización, como Visual Basic. Los scripts deben usar el valor de la constante en lugar del nombre. Para obtener más información, vea Ejecución de operaciones con privilegios mediante C++ o Ejecución de operaciones con privilegios mediante VBScript.

Una causa común de errores de acceso denegado al usar WMI es la falta de un privilegio habilitado para las operaciones, como obtener todas las instancias de Win32_NTEventlogFile. Sin habilitar el privilegio SeSecurity, no puede acceder al archivo de registro de seguridad.

En el siguiente ejemplo de código de VBScript se muestra cómo establecer el privilegio SeSecurity en la cadena de moniker. Cuando se usa en el moniker, el nombre de privilegio entre paréntesis quita la inicial "Se". Para obtener más información, vea Construcción de una cadena 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 privilegios