Метод 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
Win32_Printer.mof
DLL
CIMWin32.dll

См. также раздел

Win32_Printer

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

Объекты дескриптора безопасности WMI

Изменение безопасности доступа для защищаемых объектов