Win32_Printer クラスの SetSecurityDescriptor メソッド
SetSecurityDescriptor メソッドは、プリンターへのアクセスを制御するセキュリティ記述子の更新バージョンを書き込みます。 セキュリティ記述子は、 Win32_SecurityDescriptor クラスのインスタンスです。 詳細については、「 セキュリティ保護可能なオブジェクトのアクセス セキュリティの変更」を参照してください。
このトピックでは、マネージド オブジェクト形式 (MOF) 構文を使用します。 このメソッドの使用方法の詳細については、「メソッドの 呼び出し」を参照してください。
構文
uint32 SetSecurityDescriptor(
[in] Win32_SecurityDescriptor Descriptor
);
パラメーター
-
記述子 [in]
-
プリンターに関連付けられているセキュリティ記述子。
戻り値
次の一覧に記載されている値の 1 つ、またはエラーを示す別の値を返します。 その他のエラー コードについては、「 WMI エラー定数」 または 「WbemErrorEnum」を参照してください。 一般的な HRESULT 値については、「 システム エラー コード」を参照してください。
-
0
-
正常に完了しました。
-
2
-
ユーザーは、要求された情報にアクセスできません。
-
8
-
不明なエラー。
-
9
-
ユーザーには、 メソッドを実行するための適切な特権がありません。
-
21
-
メソッド呼び出しで指定されたパラメーターが無効です。
注釈
Win32_SecurityDescriptor インスタンスは、SECURITY_DESCRIPTOR_CONTROLデータ型を表し、随意アクセス制御リスト (DACL) とシステム アクセス制御リスト (SACL) を含みます。 詳細については、「Access Control リスト」を参照してください。
セキュリティ記述子を取得するときに 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 は変更されません。
例
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] |
|