Метод SetSecurityDescriptor класса Win32_Printer
Метод SetSecurityDescriptor записывает обновленную версию дескриптора безопасности, который управляет доступом к принтеру. Дескриптор безопасности — это экземпляр класса Win32_SecurityDescriptor . Дополнительные сведения см. в разделе Изменение безопасности доступа для защищаемых объектов.
В этом разделе используется синтаксис MOF. Дополнительные сведения об использовании этого метода см. в разделе Вызов метода .
Синтаксис
uint32 SetSecurityDescriptor(
[in] Win32_SecurityDescriptor Descriptor
);
Параметры
-
Дескриптор [in]
-
Дескриптор безопасности, связанный с принтером.
Возвращаемое значение
Возвращает одно из значений, перечисленных в следующем списке, или другое значение, указывающее на ошибку. Дополнительные коды ошибок см. в разделе Константы ошибок WMI или WbemErrorEnum. Общие значения HRESULT см. в разделе Системные коды ошибок.
-
0
-
Успешное завершение.
-
2
-
Пользователь не имеет доступа к запрошенной информации.
-
8
-
Неизвестный сбой.
-
9
-
Пользователь не имеет достаточных привилегий для выполнения метода .
-
21
-
Недопустимый параметр, указанный в вызове метода.
Комментарии
Экземпляр Win32_SecurityDescriptor представляет тип данных SECURITY_DESCRIPTOR_CONTROL и содержит список управления доступом на уровне пользователей (DACL) и список управления доступом системы (SACL). Дополнительные сведения см. в разделе Списки контроль доступа.
Если параметр SeSecurityPrivilege не предоставляется или не включен при получении дескриптора безопасности, то в возвращенном дескрипторе безопасности возвращается только DACL. Дополнительные сведения см. в разделах Константы привилегий и Выполнение привилегированных операций.
При вызове этого метода можно обновить как DACL, так и saCL в экземпляре Win32_SecurityDescriptor , но можно также обновить только DACL или только saCL.
Следующие значения в SECURITY_DESCRIPTOR_CONTROL определяют, обновляются ли daCL, SACL или и то, и другое.
SE_DACL_PRESENT
Указывает, что необходимо обновить список DACL. Если этот параметр не задан, WMI сохраняет исходное значение DACL.
SE_SACL_PRESENT
Указывает, что необходимо обновить список SACL. Если этот параметр не задан, WMI сохраняет исходное значение saCL. Чтобы обновить saCL, у учетной записи должна быть включена привилегия SeSecurityPrivilege . Для создания скриптов имя привилегии — SeSecurityPrivilege. Дополнительные сведения см. в разделе Константы привилегий.
Если свойства доверенного лица группы и владельца не имеют значения NULL, они обновляются. В противном случае WMI сохраняет исходные значения. Дополнительные сведения см. в разделе Объекты дескриптора безопасности WMI.
Если в вызове этого метода новый список SACL имеет значение NULL , то список SACL дескриптора безопасности в целевом защищаемом объекте остается без изменений.
Примеры
Пример Copy-ACLToPrinter PowerShell. Замена разрешений (ACL) с одного принтера на другой.
В следующем примере кода PowerShell описывается, как задать дескриптор безопасности для принтера.
# Specify the user or group
$user = "everyone"
# create instances of necessary classes
$SD = ([WMIClass] "Win32_SecurityDescriptor").CreateInstance()
$ace = ([WMIClass] "Win32_Ace").CreateInstance()
$Trustee = ([WMIClass] "Win32_Trustee").CreateInstance()
# Translate a name of user or group to SID
$SID = (new-object security.principal.ntaccount $user).translate([security.principal.securityidentifier])
# Get binary form from SID and byte Array
[byte[]] $SIDArray = ,0 * $SID.BinaryLength
$SID.GetBinaryForm($SIDArray,0)
# Fill Trustee object parameters
$Trustee.Name = $user
$Trustee.SID = $SIDArray
# Set AccessMask which can contain following values:
# Takeownership - 524288
# ReadPermissions - 131072
# ChangePermissions - 262144
# ManageDocuments - 983088
# ManagePrinters - 983052
# Print + ReadPermissions - 131080
$ace.AccessMask = 983052
# Set AceType. Can be 0 (Allow), or 1 (Deny), or 2 (System Audit)
$ace.AceType = 0
$ace.AceFlags = 0
# Write Win32_Trustee object to Win32_Ace Trustee property
$ace.Trustee = $Trustee
# Write Win32_Ace and Win32_Trustee objects to SecurityDescriptor object
$SD.DACL = $ace
# Set SE_DACL_PRESENT control flag
$SD.ControlFlags = 0x0004
# Get printer object. For example 'CutePDF Writer' printer object
$Printer = gwmi win32_printer -filter "name = 'CutePDF Writer'"
# Enable SeSecurityPrivilege privilegies
$Printer.psbase.Scope.Options.EnablePrivileges = $true
# Invoke SetSecurityDescriptor method and write new ACE to specified
# printer ACL.
$Printer.SetSecurityDescriptor($SD)
Требования
Требование | Значение |
---|---|
Минимальная версия клиента |
Windows Vista |
Минимальная версия сервера |
Windows Server 2008 |
Пространство имен |
Root\CIMV2 |
MOF |
|
DLL |
|