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