Compartilhar via


Método SetSecurityDescriptor da classe Win32_Printer

O método SetSecurityDescriptor grava uma versão atualizada do descritor de segurança que controla o acesso à impressora. O descritor de segurança é uma instância da classe Win32_SecurityDescriptor . Para obter mais informações, consulte Alterando a segurança de acesso em objetos protegíveis.

Este tópico usa a sintaxe MOF (Managed Object Format). Para obter mais informações sobre como usar esse método, consulte Chamando um método.

Sintaxe

uint32 SetSecurityDescriptor(
  [in] Win32_SecurityDescriptor Descriptor
);

Parâmetros

Descritor [in]

O descritor de segurança associado à impressora.

Valor retornado

Retorna um dos valores listados na lista a seguir ou um valor diferente para indicar um erro. Para obter códigos de erro adicionais, consulte Constantes de erro WMI ou WbemErrorEnum. Para obter valores gerais de HRESULT , consulte Códigos de erro do sistema.

0

Conclusão bem-sucedida.

2

O usuário não tem acesso às informações solicitadas.

8

Falha desconhecida.

9

O usuário não tem privilégios adequados para executar o método.

21

Um parâmetro especificado na chamada de método não é válido.

Comentários

A instância Win32_SecurityDescriptor representa um tipo de dados SECURITY_DESCRIPTOR_CONTROL e contém uma DACL ( lista de controle de acesso discricionário ) e uma SACL ( lista de controle de acesso do sistema ). Para obter mais informações, consulte Listas de Controle de Acesso.

Se o SeSecurityPrivilege não for concedido ou habilitado ao obter um descritor de segurança, somente a DACL será retornada no descritor de segurança retornado. Para obter mais informações, consulte Constantes de privilégios e Execução de operações privilegiadas.

Você pode atualizar o DACL e o SACL na instância Win32_SecurityDescriptor ao chamar esse método, mas também pode atualizar apenas a DACL ou apenas o SACL.

Os valores a seguir em SECURITY_DESCRIPTOR_CONTROL determinar se o DACL, o SACL ou ambos são atualizados.

  • SE_DACL_PRESENT

    Indica que a DACL deve ser atualizada. Se isso não estiver definido, o WMI preservará o valor original da DACL.

  • SE_SACL_PRESENT

    Indica que o SACL deve ser atualizado. Se isso não estiver definido, o WMI preservará o valor original do SACL. Para atualizar o SACL, a conta deve ter o privilégio SeSecurityPrivilege habilitado. Para scripts, o nome do privilégio é SeSecurityPrivilege. Para obter mais informações, consulte Constantes de privilégios.

Se o administrador do grupo e as propriedades de administrador proprietário não forem NULL, eles serão atualizados. Caso contrário, o WMI preservará os valores originais. Para obter mais informações, consulte Objetos do Descritor de Segurança do WMI.

Quando um novo SACL é NULL em uma chamada para esse método, o SACL do descritor de segurança no objeto protegível de destino é deixado inalterado.

Exemplos

O exemplo do PowerShell Copy-ACLToPrinter Substitua as permissões (ACL) de uma impressora para outra.

O exemplo de código do PowerShell a seguir descreve como definir o descritor de segurança para uma impressora.

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

Requisitos

Requisito Valor
Cliente mínimo com suporte
Windows Vista
Servidor mínimo com suporte
Windows Server 2008
Namespace
Root\CIMV2
MOF
Win32_Printer.mof
DLL
CIMWin32.dll

Confira também

Win32_Printer

Constantes de privilégio

Objetos de descritor de segurança WMI

Alterando a segurança de acesso em objetos protegíveis