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 |
|
DLL |
|