Método SetSecurityDescriptor de la clase Win32_Printer
El método SetSecurityDescriptor escribe una versión actualizada del descriptor de seguridad que controla el acceso a la impresora. El descriptor de seguridad es una instancia de la clase Win32_SecurityDescriptor . Para obtener más información, vea Cambiar la seguridad de acceso en objetos protegibles.
En este tema se usa la sintaxis de Managed Object Format (MOF). Para obtener más información sobre el uso de este método, vea Llamar a un método.
Sintaxis
uint32 SetSecurityDescriptor(
[in] Win32_SecurityDescriptor Descriptor
);
Parámetros
-
Descriptor [in]
-
Descriptor de seguridad asociado a la impresora.
Valor devuelto
Devuelve uno de los valores enumerados en la lista siguiente o un valor diferente para indicar un error. Para obtener códigos de error adicionales, consulte Constantes de error WMI o WbemErrorEnum. Para obtener valores HRESULT generales, consulte Códigos de error del sistema.
-
0
-
Se ha realizado correctamente.
-
2
-
El usuario no tiene acceso a la información solicitada.
-
8
-
Error desconocido.
-
9
-
El usuario no tiene privilegios adecuados para ejecutar el método .
-
21
-
Un parámetro especificado en la llamada al método no es válido.
Comentarios
La instancia de Win32_SecurityDescriptor representa un tipo de datos SECURITY_DESCRIPTOR_CONTROL y contiene una lista de control de acceso discrecional (DACL) y una lista de control de acceso del sistema (SACL). Para obtener más información, vea listas de Access Control.
Si no se concede o habilita SeSecurityPrivilege al obtener un descriptor de seguridad, solo se devuelve la DACL en el descriptor de seguridad devuelto. Para obtener más información, consulte Constantes de privilegios y Ejecución de operaciones con privilegios.
Puede actualizar tanto la DACL como la SACL en la instancia de Win32_SecurityDescriptor al llamar a este método, pero también puede actualizar solo la DACL o solo la SACL.
Los siguientes valores de SECURITY_DESCRIPTOR_CONTROL determinar si se actualizan la DACL, sacl o ambas.
SE_DACL_PRESENT
Indica que se debe actualizar la DACL. Si no se establece, WMI conserva el valor original de la DACL.
SE_SACL_PRESENT
Indica que se debe actualizar la SACL. Si no se establece, WMI conserva el valor original de sacl. Para actualizar sacl, la cuenta debe tener habilitado el privilegio SeSecurityPrivilege . En el caso del scripting, el nombre del privilegio es SeSecurityPrivilege. Para obtener más información, consulte Constantes de privilegios.
Si el administrador de confianza del grupo y las propiedades del administrador de propietarios no son NULL, se actualizan. De lo contrario, WMI conserva los valores originales. Para obtener más información, vea Objetos descriptores de seguridad de WMI.
Cuando una nueva SACL es NULL en una llamada a este método, el descriptor de seguridad SACL del objeto protegible de destino se deja sin cambios.
Ejemplos
El ejemplo de PowerShell Copy-ACLToPrinter Reemplaza los permisos (ACL) de una impresora a otra.
En el siguiente ejemplo de código de PowerShell se describe cómo establecer el descriptor de seguridad de una impresora.
# 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 | Value |
---|---|
Cliente mínimo compatible |
Windows Vista |
Servidor mínimo compatible |
Windows Server 2008 |
Espacio de nombres |
Root\CIMV2 |
MOF |
|
Archivo DLL |
|