Freigeben über


SetSecurityDescriptor-Methode der Win32_Printer-Klasse

Die SetSecurityDescriptor-Methode schreibt eine aktualisierte Version des Sicherheitsdeskriptors, der den Zugriff auf den Drucker steuert. Der Sicherheitsdeskriptor ist ein instance der Win32_SecurityDescriptor-Klasse. Weitere Informationen finden Sie unter Ändern der Zugriffssicherheit für sicherungsfähige Objekte.

In diesem Thema wird MOF-Syntax (Managed Object Format) verwendet. Weitere Informationen zur Verwendung dieser Methode finden Sie unter Aufrufen einer Methode.

Syntax

uint32 SetSecurityDescriptor(
  [in] Win32_SecurityDescriptor Descriptor
);

Parameter

Deskriptor [in]

Der Sicherheitsdeskriptor, der dem Drucker zugeordnet ist.

Rückgabewert

Gibt einen der in der folgenden Liste aufgeführten Werte oder einen anderen Wert zurück, um einen Fehler anzuzeigen. Weitere Fehlercodes finden Sie unter WMI-Fehlerkonstanten oder WbemErrorEnum. Allgemeine HRESULT-Werte finden Sie unter Systemfehlercodes.

0

Erfolgreicher Abschluss.

2

Der Benutzer hat keinen Zugriff auf die angeforderten Informationen.

8

Unbekannter Fehler.

9

Der Benutzer verfügt nicht über ausreichende Berechtigungen zum Ausführen der Methode.

21

Ein parameter, der im Methodenaufruf angegeben ist, ist ungültig.

Bemerkungen

Die Win32_SecurityDescriptor instance stellt einen SECURITY_DESCRIPTOR_CONTROL Datentyp dar und enthält eine daCL (Discretionary Access Control List) und eine Systemzugriffssteuerungsliste (SACL). Weitere Informationen finden Sie unter Access Control Listen.

Wenn das SeSecurityPrivilege beim Abrufen eines Sicherheitsdeskriptors nicht gewährt oder aktiviert wird, wird nur die DACL im zurückgegebenen Sicherheitsdeskriptor zurückgegeben. Weitere Informationen finden Sie unter Berechtigungskonstanten und Ausführen von privilegierten Vorgängen.

Sie können sowohl die DACL als auch die SACL im Win32_SecurityDescriptor instance aktualisieren, wenn Sie diese Methode aufrufen, aber Sie können auch nur die DACL oder nur die SACL aktualisieren.

Die folgenden Werte in SECURITY_DESCRIPTOR_CONTROL bestimmen, ob die DACL, die SACL oder beide aktualisiert werden.

  • SE_DACL_PRESENT

    Gibt an, dass die DACL aktualisiert werden soll. Wenn dies nicht festgelegt ist, behält WMI den ursprünglichen Wert der DACL bei.

  • SE_SACL_PRESENT

    Gibt an, dass die SACL aktualisiert werden soll. Wenn dies nicht festgelegt ist, behält WMI den ursprünglichen Wert der SACL bei. Zum Aktualisieren der SACL muss für das Konto die SeSecurityPrivilege-Berechtigung aktiviert sein. Für Skripts lautet der Berechtigungsname SeSecurityPrivilege. Weitere Informationen finden Sie unter Berechtigungskonstanten.

Wenn der Gruppen-Trustee und die Besitzer-Trustee-Eigenschaft nicht NULL sind, werden sie aktualisiert. Andernfalls behält WMI die ursprünglichen Werte bei. Weitere Informationen finden Sie unter WMI-Sicherheitsbeschreibungsobjekte.

Wenn eine neue SACL in einem Aufruf dieser Methode NULL ist, bleibt der Sicherheitsdeskriptor SACL für das sicherungsfähige Zielobjekt unverändert.

Beispiele

Das PowerShell-Beispiel Copy-ACLToPrinter Ersetzen sie die Berechtigungen (ACL) von einem Drucker in einen anderen.

Im folgenden PowerShell-Codebeispiel wird beschrieben, wie Sie den Sicherheitsdeskriptor für einen Drucker festlegen.

# 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)

Anforderungen

Anforderung Wert
Unterstützte Mindestversion (Client)
Windows Vista
Unterstützte Mindestversion (Server)
WindowsServer 2008
Namespace
Root\CIMV2
MOF
Win32_Printer.mof
DLL
CIMWin32.dll

Siehe auch

Win32_Printer

Berechtigungskonstanten

WMI-Sicherheitsbeschreibungsobjekte

Ändern der Zugriffssicherheit für sicherungsfähige Objekte