MutexSecurity Clase
Definición
Importante
Parte de la información hace referencia a la versión preliminar del producto, que puede haberse modificado sustancialmente antes de lanzar la versión definitiva. Microsoft no otorga ninguna garantía, explícita o implícita, con respecto a la información proporcionada aquí.
Representa la seguridad de control de acceso de Windows para una exclusión mutua con nombre. Esta clase no puede heredarse.
public ref class MutexSecurity sealed : System::Security::AccessControl::NativeObjectSecurity
public sealed class MutexSecurity : System.Security.AccessControl.NativeObjectSecurity
[System.Security.SecurityCritical]
public sealed class MutexSecurity : System.Security.AccessControl.NativeObjectSecurity
type MutexSecurity = class
inherit NativeObjectSecurity
[<System.Security.SecurityCritical>]
type MutexSecurity = class
inherit NativeObjectSecurity
Public NotInheritable Class MutexSecurity
Inherits NativeObjectSecurity
- Herencia
- Atributos
Ejemplos
En el ejemplo de código siguiente se muestra la separación entre Allow reglas y Deny reglas y se muestra la combinación de derechos en reglas compatibles. En el ejemplo se crea un MutexSecurity objeto , se agregan reglas que permiten y deniegan varios derechos para el usuario actual y se muestra el par resultante de reglas. A continuación, el ejemplo permite nuevos derechos para el usuario actual y muestra el resultado, lo que muestra que los nuevos derechos se combinan con la regla existente Allow .
Nota
En este ejemplo no se adjunta el objeto de seguridad a un Mutex objeto . Ejemplos que adjuntan objetos de seguridad se pueden encontrar en Mutex.GetAccessControl y Mutex.SetAccessControl.
using System;
using System.Threading;
using System.Security.AccessControl;
using System.Security.Principal;
public class Example
{
public static void Main()
{
// Create a string representing the current user.
string user = Environment.UserDomainName + "\\" +
Environment.UserName;
// Create a security object that grants no access.
MutexSecurity mSec = new MutexSecurity();
// Add a rule that grants the current user the
// right to enter or release the mutex.
MutexAccessRule rule = new MutexAccessRule(user,
MutexRights.Synchronize | MutexRights.Modify,
AccessControlType.Allow);
mSec.AddAccessRule(rule);
// Add a rule that denies the current user the
// right to change permissions on the mutex.
rule = new MutexAccessRule(user,
MutexRights.ChangePermissions,
AccessControlType.Deny);
mSec.AddAccessRule(rule);
// Display the rules in the security object.
ShowSecurity(mSec);
// Add a rule that allows the current user the
// right to read permissions on the mutex. This rule
// is merged with the existing Allow rule.
rule = new MutexAccessRule(user,
MutexRights.ReadPermissions,
AccessControlType.Allow);
mSec.AddAccessRule(rule);
ShowSecurity(mSec);
}
private static void ShowSecurity(MutexSecurity security)
{
Console.WriteLine("\r\nCurrent access rules:\r\n");
foreach(MutexAccessRule ar in
security.GetAccessRules(true, true, typeof(NTAccount)))
{
Console.WriteLine(" User: {0}", ar.IdentityReference);
Console.WriteLine(" Type: {0}", ar.AccessControlType);
Console.WriteLine(" Rights: {0}", ar.MutexRights);
Console.WriteLine();
}
}
}
/*This code example produces output similar to following:
Current access rules:
User: TestDomain\TestUser
Type: Deny
Rights: ChangePermissions
User: TestDomain\TestUser
Type: Allow
Rights: Modify, Synchronize
Current access rules:
User: TestDomain\TestUser
Type: Deny
Rights: ChangePermissions
User: TestDomain\TestUser
Type: Allow
Rights: Modify, ReadPermissions, Synchronize
*/
Imports System.Threading
Imports System.Security.AccessControl
Imports System.Security.Principal
Public Class Example
Public Shared Sub Main()
' Create a string representing the current user.
Dim user As String = Environment.UserDomainName _
& "\" & Environment.UserName
' Create a security object that grants no access.
Dim mSec As New MutexSecurity()
' Add a rule that grants the current user the
' right to enter or release the mutex.
Dim rule As New MutexAccessRule(user, _
MutexRights.Synchronize _
Or MutexRights.Modify, _
AccessControlType.Allow)
mSec.AddAccessRule(rule)
' Add a rule that denies the current user the
' right to change permissions on the mutex.
rule = New MutexAccessRule(user, _
MutexRights.ChangePermissions, _
AccessControlType.Deny)
mSec.AddAccessRule(rule)
' Display the rules in the security object.
ShowSecurity(mSec)
' Add a rule that allows the current user the
' right to read permissions on the mutex. This rule
' is merged with the existing Allow rule.
rule = New MutexAccessRule(user, _
MutexRights.ReadPermissions, _
AccessControlType.Allow)
mSec.AddAccessRule(rule)
ShowSecurity(mSec)
End Sub
Private Shared Sub ShowSecurity(ByVal security As MutexSecurity)
Console.WriteLine(vbCrLf & "Current access rules:" & vbCrLf)
For Each ar As MutexAccessRule In _
security.GetAccessRules(True, True, GetType(NTAccount))
Console.WriteLine(" User: {0}", ar.IdentityReference)
Console.WriteLine(" Type: {0}", ar.AccessControlType)
Console.WriteLine(" Rights: {0}", ar.MutexRights)
Console.WriteLine()
Next
End Sub
End Class
'This code example produces output similar to following:
'
'Current access rules:
'
' User: TestDomain\TestUser
' Type: Deny
' Rights: ChangePermissions
'
' User: TestDomain\TestUser
' Type: Allow
' Rights: Modify, Synchronize
'
'
'Current access rules:
'
' User: TestDomain\TestUser
' Type: Deny
' Rights: ChangePermissions
'
' User: TestDomain\TestUser
' Type: Allow
' Rights: Modify, ReadPermissions, Synchronize
Comentarios
Un MutexSecurity objeto especifica los derechos de acceso de una exclusión mutua del sistema con nombre y también especifica cómo se auditan los intentos de acceso. Los derechos de acceso a la exclusión mutua se expresan como reglas, con cada regla de acceso representada por un MutexAccessRule objeto . Cada regla de auditoría se representa mediante un MutexAuditRule objeto .
Esto refleja el sistema de seguridad subyacente de Windows, en el que cada objeto protegible tiene como máximo una lista de control de acceso discrecional (DACL) que controla el acceso al objeto protegido y, como máximo, una lista de control de acceso del sistema (SACL) que especifica qué intentos de acceso se auditan. DaCL y SACL son listas ordenadas de entradas de control de acceso (ACE) que especifican el acceso y la auditoría de usuarios y grupos. Un MutexAccessRule objeto o MutexAuditRule podría representar más de una ACE.
Nota
Un Mutex objeto puede representar una exclusión mutua local o una exclusión mutua del sistema con nombre. La seguridad del control de acceso de Windows solo es significativa para las exclusión mutuas del sistema con nombre.
Las MutexSecurityclases , MutexAccessRuley MutexAuditRule ocultan los detalles de implementación de las ACL y los ACL. Permiten omitir los diecisiete tipos ace diferentes y la complejidad de mantener correctamente la herencia y propagación de los derechos de acceso. Estos objetos también están diseñados para evitar los siguientes errores comunes de control de acceso:
Creación de un descriptor de seguridad con una DACL nula. Una referencia nula a una DACL permite a cualquier usuario agregar reglas de acceso a un objeto, lo que podría crear un ataque por denegación de servicio. Un nuevo MutexSecurity objeto siempre comienza con una DACL vacía, que deniega todo el acceso a todos los usuarios.
Infringir la ordenación canónica de los ASE. Si la lista ACE de la DACL no se mantiene en el orden canónico, es posible que a los usuarios se les conceda acceso accidentalmente al objeto protegido. Por ejemplo, los derechos de acceso denegados siempre deben aparecer antes de los derechos de acceso permitidos. MutexSecurity los objetos mantienen el orden correcto internamente.
Manipular marcas de descriptor de seguridad, que solo deben estar bajo el control de Resource Manager.
Crear combinaciones no válidas de marcas ACE.
Manipular ASE heredados. El administrador de recursos controla la herencia y la propagación, en respuesta a los cambios realizados en las reglas de acceso y auditoría.
Insertar ACL sin significado en ACL.
Las únicas funcionalidades no admitidas por los objetos de seguridad de .NET son actividades peligrosas que deben evitar la mayoría de los desarrolladores de aplicaciones, como las siguientes:
Tareas de bajo nivel que normalmente realizan el administrador de recursos.
Agregar o quitar entradas de control de acceso de maneras que no mantienen el orden canónico.
Para modificar la seguridad del control de acceso de Windows para una exclusión mutua con nombre, use el Mutex.GetAccessControl método para obtener el MutexSecurity objeto . Modifique el objeto de seguridad agregando y quitando reglas y, a continuación, use el Mutex.SetAccessControl método para volver a adjuntarlo.
Importante
Los cambios realizados en un MutexSecurity objeto no afectan a los niveles de acceso de la exclusión mutua con nombre hasta que llame al Mutex.SetAccessControl método para asignar el objeto de seguridad modificado a la exclusión mutua con nombre.
Para copiar la seguridad del control de acceso de una exclusión mutua a otra, use el Mutex.GetAccessControl método para obtener un MutexSecurity objeto que represente las reglas de acceso y auditoría de la primera exclusión mutua y, a continuación, use el Mutex.SetAccessControl método o un constructor que acepte un MutexSecurity objeto para asignar esas reglas a la segunda exclusión mutua.
Los usuarios con una inversión en el lenguaje de definición de descriptor de seguridad (SDDL) pueden usar el SetSecurityDescriptorSddlForm método para establecer reglas de acceso para una exclusión mutua con nombre y el GetSecurityDescriptorSddlForm método para obtener una cadena que represente las reglas de acceso en formato SDDL. Esto no se recomienda para el nuevo desarrollo.
Constructores
MutexSecurity() |
Inicializa una nueva instancia de la clase MutexSecurity con valores predeterminados. |
MutexSecurity(String, AccessControlSections) |
Inicializa una nueva instancia de la clase MutexSecurity con las secciones especificadas de las reglas de seguridad de control de acceso de la exclusión mutua de sistema con el nombre especificado. |
Propiedades
AccessRightType |
Obtiene la enumeración que la clase MutexSecurity utiliza para representar los derechos de acceso. |
AccessRulesModified |
Obtiene o establece un valor booleano que especifica si se han modificado las reglas de acceso asociadas a este objeto ObjectSecurity. (Heredado de ObjectSecurity) |
AccessRuleType |
Obtiene el tipo que utiliza la clase MutexSecurity para representar las reglas de acceso. |
AreAccessRulesCanonical |
Obtiene un valor booleano que especifica si las reglas de acceso asociadas con este objeto ObjectSecurity están en orden canónico. (Heredado de ObjectSecurity) |
AreAccessRulesProtected |
Obtiene un valor booleano que especifica si la lista de control de acceso discrecional (DACL) asociada a este objeto ObjectSecurity está protegida. (Heredado de ObjectSecurity) |
AreAuditRulesCanonical |
Obtiene un valor booleano que especifica si las reglas de auditoría asociadas a este objeto ObjectSecurity están en orden canónico. (Heredado de ObjectSecurity) |
AreAuditRulesProtected |
Obtiene un valor booleano que especifica si la lista de control de acceso del sistema (SACL) asociada a este objeto ObjectSecurity está protegida. (Heredado de ObjectSecurity) |
AuditRulesModified |
Obtiene un valor booleano que especifica si las reglas de auditoría asociadas a este objeto ObjectSecurity se han modificado. (Heredado de ObjectSecurity) |
AuditRuleType |
Obtiene el tipo que utiliza la clase MutexSecurity para representar las reglas de auditoría. |
GroupModified |
Obtiene o establece un valor booleano que especifica si se ha modificado el grupo asociado al objeto protegible. (Heredado de ObjectSecurity) |
IsContainer |
Obtiene un valor booleano que especifica si este objeto ObjectSecurity es un objeto de contenedor. (Heredado de ObjectSecurity) |
IsDS |
Obtiene un valor booleano que especifica si este objeto ObjectSecurity es un objeto de directorio. (Heredado de ObjectSecurity) |
OwnerModified |
Obtiene o establece un valor booleano que especifica si se ha modificado el propietario del objeto que se puede proteger. (Heredado de ObjectSecurity) |
SecurityDescriptor |
Obtiene el descriptor de seguridad de esta instancia. (Heredado de ObjectSecurity) |
Métodos
AccessRuleFactory(IdentityReference, Int32, Boolean, InheritanceFlags, PropagationFlags, AccessControlType) |
Crea una nueva regla de control de acceso para el usuario indicado con los derechos de acceso, el control de acceso y los marcadores especificados. |
AddAccessRule(AccessRule) |
Agrega la regla de acceso especificada a la lista de control de acceso discrecional (DACL) asociada al objeto CommonObjectSecurity. (Heredado de CommonObjectSecurity) |
AddAccessRule(MutexAccessRule) |
Busca una regla de control de acceso coincidente con la que se pueda combinar la nueva regla. Si no se encuentra ninguna, agrega la nueva regla. |
AddAuditRule(AuditRule) |
Agrega la regla de auditoría especificada a la lista de control de acceso de sistema (SACL) asociada al objeto CommonObjectSecurity. (Heredado de CommonObjectSecurity) |
AddAuditRule(MutexAuditRule) |
Busca una regla de auditoría con la que se pueda combinar la nueva regla. Si no se encuentra ninguna, agrega la nueva regla. |
AuditRuleFactory(IdentityReference, Int32, Boolean, InheritanceFlags, PropagationFlags, AuditFlags) |
Crea una nueva regla de auditoría, que especifica el usuario al que se aplica la regla, los derechos de acceso que se van a auditar y el resultado que desencadena la regla de auditoría. |
Equals(Object) |
Determina si el objeto especificado es igual que el objeto actual. (Heredado de Object) |
GetAccessRules(Boolean, Boolean, Type) |
Obtiene una colección de las reglas de acceso asociadas al identificador de seguridad especificado. (Heredado de CommonObjectSecurity) |
GetAuditRules(Boolean, Boolean, Type) |
Obtiene una colección de las reglas de auditoría asociadas al identificador de seguridad especificado. (Heredado de CommonObjectSecurity) |
GetGroup(Type) |
Obtiene el grupo primario asociado al propietario especificado. (Heredado de ObjectSecurity) |
GetHashCode() |
Sirve como la función hash predeterminada. (Heredado de Object) |
GetOwner(Type) |
Obtiene el propietario asociado al grupo primario especificado. (Heredado de ObjectSecurity) |
GetSecurityDescriptorBinaryForm() |
Devuelve una matriz de valores de byte que representa la información del descriptor de seguridad para este objeto ObjectSecurity. (Heredado de ObjectSecurity) |
GetSecurityDescriptorSddlForm(AccessControlSections) |
Devuelve la representación del Lenguaje de definición de descriptores de seguridad (SDDL) de las secciones especificadas del descriptor de seguridad asociado a este objeto ObjectSecurity. (Heredado de ObjectSecurity) |
GetType() |
Obtiene el Type de la instancia actual. (Heredado de Object) |
MemberwiseClone() |
Crea una copia superficial del Object actual. (Heredado de Object) |
ModifyAccess(AccessControlModification, AccessRule, Boolean) |
Aplica la modificación especificada a la lista de control de acceso discrecional (DACL) (DACL) asociada a este objeto CommonObjectSecurity. (Heredado de CommonObjectSecurity) |
ModifyAccessRule(AccessControlModification, AccessRule, Boolean) |
Aplica la modificación especificada a la lista de control de acceso discrecional (DACL) (DACL) asociada a este objeto ObjectSecurity. (Heredado de ObjectSecurity) |
ModifyAudit(AccessControlModification, AuditRule, Boolean) |
Aplica la modificación especificada a la lista de control de acceso del sistema (SACL) asociada a este objeto CommonObjectSecurity. (Heredado de CommonObjectSecurity) |
ModifyAuditRule(AccessControlModification, AuditRule, Boolean) |
Aplica la modificación especificada a la lista de control de acceso del sistema (SACL) asociada a este objeto ObjectSecurity. (Heredado de ObjectSecurity) |
Persist(Boolean, String, AccessControlSections) |
Guarda las secciones especificadas del descriptor de seguridad asociado a este objeto ObjectSecurity en el almacenamiento permanente. Se recomienda que los valores de los parámetros |
Persist(SafeHandle, AccessControlSections) |
Guarda las secciones especificadas del descriptor de seguridad asociado a este objeto NativeObjectSecurity en el almacenamiento permanente. Se recomienda que los valores de los parámetros |
Persist(SafeHandle, AccessControlSections, Object) |
Guarda las secciones especificadas del descriptor de seguridad asociado a este objeto NativeObjectSecurity en el almacenamiento permanente. Se recomienda que los valores de los parámetros |
Persist(String, AccessControlSections) |
Guarda las secciones especificadas del descriptor de seguridad asociado a este objeto NativeObjectSecurity en el almacenamiento permanente. Se recomienda que los valores de los parámetros |
Persist(String, AccessControlSections, Object) |
Guarda las secciones especificadas del descriptor de seguridad asociado a este objeto NativeObjectSecurity en el almacenamiento permanente. Se recomienda que los valores de los parámetros |
PurgeAccessRules(IdentityReference) |
Quita todas las reglas de acceso asociadas al objeto IdentityReference especificado. (Heredado de ObjectSecurity) |
PurgeAuditRules(IdentityReference) |
Quita todas las reglas de auditoría asociadas con el IdentityReference especificado. (Heredado de ObjectSecurity) |
ReadLock() |
Bloquea este objeto ObjectSecurity para acceso de lectura. (Heredado de ObjectSecurity) |
ReadUnlock() |
Desbloquea este objeto ObjectSecurity para acceso de lectura. (Heredado de ObjectSecurity) |
RemoveAccessRule(AccessRule) |
Quita las reglas de acceso que contienen el mismo identificador de seguridad y máscara de acceso que la regla de acceso especificada de la lista de control de acceso discrecional (DACL) asociada al objeto CommonObjectSecurity. (Heredado de CommonObjectSecurity) |
RemoveAccessRule(MutexAccessRule) |
Busca una regla de control de acceso con el mismo usuario y AccessControlType (conceder o denegar) que la regla especificada y con marcadores de herencia y propagación compatibles; si encuentra este tipo de regla, quita de ésta los derechos contenidos en la regla de acceso especificada. |
RemoveAccessRuleAll(AccessRule) |
Quita todas las reglas de acceso que tienen el mismo identificador de seguridad que la regla de acceso especificada de la lista de control de acceso discrecional (DACL) asociada al objeto CommonObjectSecurity. (Heredado de CommonObjectSecurity) |
RemoveAccessRuleAll(MutexAccessRule) |
Busca todas las reglas de control de acceso con el mismo usuario y AccessControlType (conceder o denegar) que la regla especificada y, si las encuentra, las quita. |
RemoveAccessRuleSpecific(AccessRule) |
Quita todas las reglas de acceso que coinciden exactamente con la regla de acceso especificada de la lista de control de acceso discrecional (DACL) asociada al objeto CommonObjectSecurity. (Heredado de CommonObjectSecurity) |
RemoveAccessRuleSpecific(MutexAccessRule) |
Busca una regla de control de acceso que coincida exactamente con la regla especificada y, si la encuentra, la quita. |
RemoveAuditRule(AuditRule) |
Quita las reglas de auditoría que contienen el mismo identificador de seguridad y máscara de acceso que la regla de auditoría especificada de la lista de control de acceso de sistema (SACL) asociada al objeto CommonObjectSecurity. (Heredado de CommonObjectSecurity) |
RemoveAuditRule(MutexAuditRule) |
Busca una regla de control de auditoría con el mismo usuario que la regla especificada y con marcadores de herencia y propagación compatibles; si encuentra una regla compatible, quita de ésta los derechos contenidos en la regla especificada. |
RemoveAuditRuleAll(AuditRule) |
Quita todas las reglas de auditoría que tienen el mismo identificador de seguridad que la regla de auditoría especificada de la lista de control de acceso de sistema (SACL) asociada al objeto CommonObjectSecurity. (Heredado de CommonObjectSecurity) |
RemoveAuditRuleAll(MutexAuditRule) |
Busca todas las reglas de auditoría con el mismo usuario que la regla especificada y, si las encuentra, las quita. |
RemoveAuditRuleSpecific(AuditRule) |
Quita todas las reglas de auditoría que coinciden exactamente con la regla de auditoría especificada de la lista de control de acceso de sistema (SACL) asociada al objeto CommonObjectSecurity. (Heredado de CommonObjectSecurity) |
RemoveAuditRuleSpecific(MutexAuditRule) |
Busca una regla de auditoría que coincida exactamente con la regla especificada y, si la encuentra, la quita. |
ResetAccessRule(AccessRule) |
Quita todas las reglas de acceso de la lista de control de acceso discrecional (DACL) asociada al objeto CommonObjectSecurity y, a continuación, agrega la regla de acceso especificada. (Heredado de CommonObjectSecurity) |
ResetAccessRule(MutexAccessRule) |
Quita todas las reglas de control de acceso con el mismo usuario que la regla especificada, independientemente de AccessControlType, y, a continuación, agrega la regla especificada. |
SetAccessRule(AccessRule) |
Quita todas las reglas de acceso que contienen el mismo identificador de seguridad y calificador que la regla de acceso especificada en la lista de control de acceso discrecional (DACL) asociada al objeto CommonObjectSecurity y, a continuación, agrega la regla de acceso especificada. (Heredado de CommonObjectSecurity) |
SetAccessRule(MutexAccessRule) |
Quita todas las reglas de control de acceso con el mismo usuario y AccessControlType (conceder o denegar) que la regla especificada y, a continuación, agrega la regla especificada. |
SetAccessRuleProtection(Boolean, Boolean) |
Establece o quita la protección de las reglas de acceso asociadas a este objeto ObjectSecurity. Los objetos primarios no pueden modificar las reglas de acceso protegido a través de la herencia. (Heredado de ObjectSecurity) |
SetAuditRule(AuditRule) |
Quita todas las reglas de auditoría que contienen el mismo identificador de seguridad y calificador que la regla de auditoría especificada en la lista de control de acceso de sistema (SACL) asociada al objeto CommonObjectSecurity y, a continuación, agrega la regla de auditoría especificada. (Heredado de CommonObjectSecurity) |
SetAuditRule(MutexAuditRule) |
Quita todas las reglas de auditoría con el mismo usuario que la regla especificada, sin tener en cuenta el valor de AuditFlags, y, a continuación, agrega la regla especificada. |
SetAuditRuleProtection(Boolean, Boolean) |
Establece o quita la protección de las reglas de auditoría asociadas a este objeto ObjectSecurity. Los objetos primarios no pueden modificar las reglas de auditoría protegidas a través de la herencia. (Heredado de ObjectSecurity) |
SetGroup(IdentityReference) |
Establece el grupo primario del descriptor de seguridad asociado a este objeto ObjectSecurity. (Heredado de ObjectSecurity) |
SetOwner(IdentityReference) |
Establece el propietario del descriptor de seguridad asociado a este objeto ObjectSecurity. (Heredado de ObjectSecurity) |
SetSecurityDescriptorBinaryForm(Byte[]) |
Establece el descriptor de seguridad para este objeto ObjectSecurity de la matriz especificada de valores de bytes. (Heredado de ObjectSecurity) |
SetSecurityDescriptorBinaryForm(Byte[], AccessControlSections) |
Establece las secciones especificadas del descriptor de seguridad para este objeto ObjectSecurity de la matriz especificada de valores de bytes. (Heredado de ObjectSecurity) |
SetSecurityDescriptorSddlForm(String) |
Establece el descriptor de seguridad para este objeto ObjectSecurity de la cadena de Lenguaje de definición de descriptores de seguridad (SDDL) especificada. (Heredado de ObjectSecurity) |
SetSecurityDescriptorSddlForm(String, AccessControlSections) |
Establece las secciones especificadas del descriptor de seguridad para este objeto ObjectSecurity de la cadena de Lenguaje de definición de descriptores de seguridad (SDDL) especificada. (Heredado de ObjectSecurity) |
ToString() |
Devuelve una cadena que representa el objeto actual. (Heredado de Object) |
WriteLock() |
Bloquea este objeto ObjectSecurity para el acceso de escritura. (Heredado de ObjectSecurity) |
WriteUnlock() |
Desbloquea este objeto ObjectSecurity para el acceso de escritura. (Heredado de ObjectSecurity) |