Win32_Printer 類別的 SetSecurityDescriptor 方法

SetSecurityDescriptor 方法會寫入可控制印表機存取權之安全性描述元的更新版本。 安全性描述元是 Win32_SecurityDescriptor 類別的實例。 如需詳細資訊,請參閱 變更安全性實體物件上的存取安全性。

本主題使用Managed物件格式 (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。 如需詳細資訊,請參閱 Privilege Constants

如果群組信任者和擁有者信任項屬性不是 NULL,則會更新它們。 否則,WMI 會保留原始值。 如需詳細資訊,請參閱 WMI 安全性描述元物件

當呼叫此方法時,新的 SACL 為 NULL 時,目標安全性實體物件上的安全性描述元 SACL 會保持不變。

範例

下列 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
Namespace
Root\CIMV2
MOF
Win32_Printer.mof
DLL
CIMWin32.dll

另請參閱

Win32_Printer

Privilege 常數

WMI 安全性描述元物件

變更安全性實體物件上的存取安全性