Win32_Printer 类的 SetSecurityDescriptor 方法

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。 有关详细信息,请参阅特权常量和执行特权操作

调用此方法时,可以同时更新 Win32_SecurityDescriptor 实例中的 DACL 和 SACL,但也可以仅更新 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 安全描述符对象

更改安全对象上的访问安全性