Выполнение привилегированных операций
Для привилегированных операций требуются привилегии безопасности, такие как 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
Связанные темы