Partager via


Méthode SetSecurityDescriptor de la classe Win32_Printer

La méthode SetSecurityDescriptor écrit une version mise à jour du descripteur de sécurité qui contrôle l’accès à l’imprimante. Le descripteur de sécurité est un instance de la classe Win32_SecurityDescriptor. Pour plus d’informations, consultez Modification de la sécurité d’accès sur les objets sécurisables.

Cette rubrique utilise la syntaxe MOF (Managed Object Format). Pour plus d’informations sur l’utilisation de cette méthode, consultez Appel d’une méthode.

Syntaxe

uint32 SetSecurityDescriptor(
  [in] Win32_SecurityDescriptor Descriptor
);

Paramètres

Descripteur [in]

Descripteur de sécurité associé à l’imprimante.

Valeur retournée

Retourne l’une des valeurs répertoriées dans la liste suivante, ou une autre valeur pour indiquer une erreur. Pour obtenir des codes d’erreur supplémentaires, consultez Constantes d’erreur WMI ou WbemErrorEnum. Pour connaître les valeurs HRESULT générales, consultez Codes d’erreur système.

0

Opération terminée correctement.

2

L’utilisateur n’a pas accès aux informations demandées.

8

Échec inconnu.

9

L’utilisateur ne dispose pas des privilèges adéquats pour exécuter la méthode.

21

Un paramètre spécifié dans l’appel de méthode n’est pas valide.

Notes

Le Win32_SecurityDescriptor instance représente un type de données SECURITY_DESCRIPTOR_CONTROL et contient une liste de contrôle d’accès discrétionnaire (DACL) et une liste de contrôle d’accès système (SACL). Pour plus d’informations, consultez listes Access Control.

Si seSecurityPrivilege n’est pas accordé ou activé lors de l’obtention d’un descripteur de sécurité, seul le dacl est retourné dans le descripteur de sécurité retourné. Pour plus d’informations, consultez Constantes de privilèges et Exécution d’opérations privilégiées.

Vous pouvez mettre à jour la liste DACL et la SACL dans le instance Win32_SecurityDescriptor lors de l’appel de cette méthode, mais vous pouvez également mettre à jour uniquement la liste DACL ou uniquement la SACL.

Les valeurs suivantes dans SECURITY_DESCRIPTOR_CONTROL déterminent si la liste DACL, la SACL ou les deux sont mises à jour.

  • SE_DACL_PRESENT

    Indique que la liste DACL doit être mise à jour. Si ce n’est pas défini, WMI conserve la valeur d’origine de la liste DACL.

  • SE_SACL_PRESENT

    Indique que la liste SACL doit être mise à jour. Si cette valeur n’est pas définie, WMI conserve la valeur d’origine de la SACL. Pour mettre à jour la SACL, le privilège SeSecurityPrivilege doit être activé sur le compte. Pour les scripts, le nom du privilège est SeSecurityPrivilege. Pour plus d’informations, consultez Constantes de privilège.

Si les propriétés du fiduciaire du groupe et du fiduciaire propriétaire ne sont pas NULL, elles sont mises à jour. Sinon, WMI conserve les valeurs d’origine. Pour plus d’informations, consultez Objets de descripteur de sécurité WMI.

Quand une nouvelle SACL a la valeur NULL dans un appel à cette méthode, le sacl du descripteur de sécurité sur l’objet sécurisable cible reste inchangé.

Exemples

L’exemple PowerShell Copy-ACLToPrinter Remplacez les autorisations (ACL) d’une imprimante à une autre.

L’exemple de code PowerShell suivant décrit comment définir le descripteur de sécurité pour une imprimante.

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

Spécifications

Condition requise Valeur
Client minimal pris en charge
Windows Vista
Serveur minimal pris en charge
Windows Server 2008
Espace de noms
Racine\CIMV2
MOF
Win32_Printer.mof
DLL
CIMWin32.dll

Voir aussi

Win32_Printer

Constantes de privilèges

Objets de descripteur de sécurité WMI

Modification de la sécurité d’accès sur les objets sécurisables