Выполнение привилегированных операций

Для привилегированных операций требуются привилегии безопасности, такие как SeLoadDriverPrivilege (wbemPrivilegeLoadDriver в константах API сценариев), которые должны быть включены для учетной записи, загружающей драйвер устройства. Вы не можете добавить привилегии для администратора или пользователя с помощью инструментария WMI. Вы можете включить только те привилегии, которые уже есть у учетной записи. Список привилегий см. в разделе Privilege_Constants.

По умолчанию локальный пользователь на компьютере может считывать статические данные из репозитория WMI, записывать данные в экземпляры, предоставляемые поставщиками, и выполнять методы поставщика, если поставщик не применяет особые требования к безопасности. Только администраторы могут подключаться к удаленному компьютеру, изменять дескрипторы безопасности или изменять данные статического репозитория WMI, например определение класса WMI. Для удаленного подключения включены все привилегии. Дополнительные сведения см. в статье Защита удаленного подключения WMI.

Константы привилегий для C++ отличаются от тех, которые используются языками автоматизации, такими как Visual Basic. Скрипты должны использовать значение константы, а не имя. Дополнительные сведения см. в разделах Выполнение привилегированных операций с помощью C++ или Выполнение привилегированных операций с помощью VBScript.

Распространенной причиной ошибок отказа в доступе при использовании WMI является отсутствие включенных привилегий для операций, таких как получение всех экземпляров Win32_NTEventlogFile. Без включения привилегии SeSecurity вы не сможете получить доступ к файлу журнала безопасности.

В следующем примере кода VBScript показано, как задать привилегию SeSecurity в строке моникера. При использовании в моникере имя привилегии в круглых скобках удаляет начальное "Se". Дополнительные сведения см. в разделе Создание строки моникера.

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

Константы привилегий