Compartilhar via


MutexSecurity Classe

Definição

Representa a segurança do controle de acesso do Windows de um mutex nomeado. Essa classe não pode ser herdada.

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
Herança
Atributos

Exemplos

O exemplo de código a seguir demonstra a separação entre Allow regras e Deny regras e mostra a combinação de direitos em regras compatíveis. O exemplo cria um MutexSecurity objeto, adiciona regras que permitem e negam vários direitos para o usuário atual e exibe o par de regras resultante. Em seguida, o exemplo permite novos direitos para o usuário atual e exibe o resultado, mostrando que os novos direitos são mesclados com a regra existente Allow .

Observação

Este exemplo não anexa o objeto de segurança a um Mutex objeto. Exemplos que anexam objetos de segurança podem ser encontrados e Mutex.GetAccessControl 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

Comentários

Um MutexSecurity objeto especifica os direitos de acesso para um mutex do sistema nomeado e também especifica como as tentativas de acesso são auditadas. Os direitos de acesso ao mutex são expressos como regras, com cada regra de acesso representada por um MutexAccessRule objeto. Cada regra de auditoria é representada por um MutexAuditRule objeto.

Isso espelha o sistema de segurança Windows subjacente, no qual cada objeto protegível tem no máximo uma DACL (lista de controle de acesso discricionário) que controla o acesso ao objeto protegido e, no máximo, uma SACL (lista de controle de acesso do sistema) que especifica quais tentativas de acesso são auditadas. O DACL e o SACL são listas ordenadas de ACE (entradas de controle de acesso) que especificam acesso e auditoria para usuários e grupos. Um MutexAccessRule ou MutexAuditRule objeto pode representar mais de um ACE.

Observação

Um Mutex objeto pode representar um mutex local ou um mutex do sistema nomeado. Windows segurança do controle de acesso é significativa apenas para mutexes de sistema nomeados.

As MutexSecurityclasses , MutexAccessRulee MutexAuditRule ocultam os detalhes de implementação de ACLs e ACEs. Eles permitem que você ignore os dezessete tipos de ACE diferentes e a complexidade de manter corretamente a herança e a propagação dos direitos de acesso. Esses objetos também são projetados para evitar os seguintes erros comuns de controle de acesso:

  • Criando um descritor de segurança com um DACL nulo. Uma referência nula a um DACL permite que qualquer usuário adicione regras de acesso a um objeto, potencialmente criando um ataque de negação de serviço. Um novo MutexSecurity objeto sempre começa com uma DACL vazia, que nega todo o acesso para todos os usuários.

  • Violando a ordenação canônica de ACEs. Se a lista ACE na DACL não for mantida na ordem canônica, os usuários poderão ter acesso inadvertidamente ao objeto protegido. Por exemplo, os direitos de acesso negados sempre devem aparecer antes dos direitos de acesso permitidos. MutexSecurity os objetos mantêm a ordem correta internamente.

  • Manipulando sinalizadores de descritor de segurança, que devem estar sob controle do gerenciador de recursos apenas.

  • Criando combinações inválidas de sinalizadores ACE.

  • Manipulando ACEs herdadas. A herança e a propagação são tratadas pelo gerenciador de recursos, em resposta às alterações feitas às regras de acesso e auditoria.

  • Inserindo ACEs sem sentido em ACLs.

Os únicos recursos não compatíveis com os objetos de segurança do .NET são atividades perigosas que devem ser evitadas pela maioria dos desenvolvedores de aplicativos, como o seguinte:

  • Tarefas de baixo nível normalmente executadas pelo gerenciador de recursos.

  • Adicionando ou removendo entradas de controle de acesso de maneiras que não mantêm a ordenação canônica.

Para modificar Windows segurança de controle de acesso para um mutex nomeado, use o Mutex.GetAccessControl método para obter o MutexSecurity objeto. Modifique o objeto de segurança adicionando e removendo regras e, em seguida, use o Mutex.SetAccessControl método para reanexá-lo.

Importante

As alterações feitas em um MutexSecurity objeto não afetam os níveis de acesso do mutex nomeado até que você chame o Mutex.SetAccessControl método para atribuir o objeto de segurança alterado ao mutex nomeado.

Para copiar a segurança do controle de acesso de um mutex para outro, use o Mutex.GetAccessControl método para obter um MutexSecurity objeto que representa as regras de acesso e auditoria do primeiro mutex e, em seguida, use o Mutex.SetAccessControl método, ou um construtor que aceita um MutexSecurity objeto, para atribuir essas regras ao segundo mutex.

Os usuários com um investimento na linguagem de definição de descritor de segurança (SDDL) podem usar o SetSecurityDescriptorSddlForm método para definir regras de acesso para um mutex nomeado e o GetSecurityDescriptorSddlForm método para obter uma cadeia de caracteres que representa as regras de acesso no formato SDDL. Isso não é recomendado para um novo desenvolvimento.

Construtores

MutexSecurity()

Inicializa uma nova instância da classe MutexSecurity com valores padrão.

MutexSecurity(String, AccessControlSections)

Inicializa uma nova instância da classe MutexSecurity com as seções especificadas das regras de segurança de controle de acesso do mutex do sistema com o nome especificado.

Propriedades

AccessRightType

Obtém a enumeração que a classe MutexSecurity usa para representar os direitos de acesso.

AccessRulesModified

Obtém ou define um valor booliano que especifica se as regras de acesso associadas a este objeto ObjectSecurity foram modificadas.

(Herdado de ObjectSecurity)
AccessRuleType

Obtém o tipo que a classe MutexSecurity usa para representar as regras de acesso.

AreAccessRulesCanonical

Obtém um valor booliano que especifica se as regras de acesso associadas a este objeto ObjectSecurity estão na ordem canônica.

(Herdado de ObjectSecurity)
AreAccessRulesProtected

Obtém um valor booliano que especifica se a DACL (Lista de Controle de Acesso Discricionário) associada a esse objeto ObjectSecurity está protegida.

(Herdado de ObjectSecurity)
AreAuditRulesCanonical

Obtém um valor booliano que especifica se as regras de auditoria associadas a este objeto ObjectSecurity estão na ordem canônica.

(Herdado de ObjectSecurity)
AreAuditRulesProtected

Obtém um valor booliano que especifica se a SACL (Lista de Controle de Acesso do Sistema) associada a esse objeto ObjectSecurity está protegida.

(Herdado de ObjectSecurity)
AuditRulesModified

Obtém ou define um valor booliano que especifica se as regras de auditoria associadas a este objeto ObjectSecurity foram modificadas.

(Herdado de ObjectSecurity)
AuditRuleType

Obtém o tipo que a classe MutexSecurity usa para representar as regras de auditoria.

GroupModified

Obtém ou define um valor booliano que especifica se o grupo associado ao objeto protegível foi modificado.

(Herdado de ObjectSecurity)
IsContainer

Obtém um valor booliano que especifica se este ObjectSecurity é um objeto contêiner.

(Herdado de ObjectSecurity)
IsDS

Obtém um valor booliano que especifica se este ObjectSecurity é um objeto de diretório.

(Herdado de ObjectSecurity)
OwnerModified

Obtém ou define um valor booliano que especifica se o proprietário do objeto protegível foi modificado.

(Herdado de ObjectSecurity)
SecurityDescriptor

Obtém o descritor de segurança para esta instância.

(Herdado de ObjectSecurity)

Métodos

AccessRuleFactory(IdentityReference, Int32, Boolean, InheritanceFlags, PropagationFlags, AccessControlType)

Cria uma nova regra de controle de acesso para o usuário especificado, com os direitos de acesso, o controle de acesso e os sinalizadores especificados.

AddAccessRule(AccessRule)

Aplica a regra de acesso especificada à DACL (Lista de Controle de Acesso Discricionário) associada a esse objeto CommonObjectSecurity.

(Herdado de CommonObjectSecurity)
AddAccessRule(MutexAccessRule)

Pesquisa por uma regra de controle de acesso correspondente com a qual a nova regra pode ser mesclada. Se nenhum erro for encontrado, adiciona a nova regra.

AddAuditRule(AuditRule)

Adiciona a regra de auditoria especificada à SACL (Lista de Controle de Acesso do Sistema) associada ao objeto CommonObjectSecurity atual.

(Herdado de CommonObjectSecurity)
AddAuditRule(MutexAuditRule)

Pesquisa uma regra de auditoria com a qual a nova regra pode ser mesclada. Se nenhum erro for encontrado, adiciona a nova regra.

AuditRuleFactory(IdentityReference, Int32, Boolean, InheritanceFlags, PropagationFlags, AuditFlags)

Cria uma nova regra de auditoria, especificando o usuário ao qual a regra se aplica, os direitos de acesso para auditoria e o resultado que dispara a regra de auditoria.

Equals(Object)

Determina se o objeto especificado é igual ao objeto atual.

(Herdado de Object)
GetAccessRules(Boolean, Boolean, Type)

Obtém uma coleção das regras de acesso associadas ao identificador de segurança especificado.

(Herdado de CommonObjectSecurity)
GetAuditRules(Boolean, Boolean, Type)

Obtém uma coleção das regras de auditoria associadas ao identificador de segurança especificado.

(Herdado de CommonObjectSecurity)
GetGroup(Type)

Obtém o grupo primário associado ao proprietário especificado.

(Herdado de ObjectSecurity)
GetHashCode()

Serve como a função de hash padrão.

(Herdado de Object)
GetOwner(Type)

Obtém o proprietário associado ao grupo primário especificado.

(Herdado de ObjectSecurity)
GetSecurityDescriptorBinaryForm()

Retorna uma matriz de valores de byte que representa as informações do descritor de segurança para este objeto ObjectSecurity.

(Herdado de ObjectSecurity)
GetSecurityDescriptorSddlForm(AccessControlSections)

Retorna a representação em SDDL (Linguagem de Definição do Descritor de Segurança) das seções especificadas do descritor de segurança associado a este objeto ObjectSecurity.

(Herdado de ObjectSecurity)
GetType()

Obtém o Type da instância atual.

(Herdado de Object)
MemberwiseClone()

Cria uma cópia superficial do Object atual.

(Herdado de Object)
ModifyAccess(AccessControlModification, AccessRule, Boolean)

Aplica a modificação especificada à DACL (Lista de controle de acesso discricionário) associada a esse objeto CommonObjectSecurity.

(Herdado de CommonObjectSecurity)
ModifyAccessRule(AccessControlModification, AccessRule, Boolean)

Aplica a modificação especificada à DACL (Lista de controle de acesso discricionário) associada a esse objeto ObjectSecurity.

(Herdado de ObjectSecurity)
ModifyAudit(AccessControlModification, AuditRule, Boolean)

Aplica a modificação especificada à SACL (Lista de Controle de Acesso do Sistema) associada a este objeto CommonObjectSecurity.

(Herdado de CommonObjectSecurity)
ModifyAuditRule(AccessControlModification, AuditRule, Boolean)

Aplica a modificação especificada à SACL (Lista de Controle de Acesso do Sistema) associada a este objeto ObjectSecurity.

(Herdado de ObjectSecurity)
Persist(Boolean, String, AccessControlSections)

Salva as seções especificadas do descritor de segurança associado a este objeto ObjectSecurity no armazenamento permanente. É recomendável que os valores dos parâmetros includeSections passados para o construtor e os métodos persist sejam idênticos.

(Herdado de ObjectSecurity)
Persist(SafeHandle, AccessControlSections)

Salva as seções especificadas do descritor de segurança associado a este objeto NativeObjectSecurity no armazenamento permanente. É recomendável que os valores dos parâmetros includeSections passados para o construtor e os métodos persist sejam idênticos.

(Herdado de NativeObjectSecurity)
Persist(SafeHandle, AccessControlSections, Object)

Salva as seções especificadas do descritor de segurança associado a este objeto NativeObjectSecurity no armazenamento permanente. É recomendável que os valores dos parâmetros includeSections passados para o construtor e os métodos persist sejam idênticos.

(Herdado de NativeObjectSecurity)
Persist(String, AccessControlSections)

Salva as seções especificadas do descritor de segurança associado a este objeto NativeObjectSecurity no armazenamento permanente. É recomendável que os valores dos parâmetros includeSections passados para o construtor e os métodos persist sejam idênticos.

(Herdado de NativeObjectSecurity)
Persist(String, AccessControlSections, Object)

Salva as seções especificadas do descritor de segurança associado a este objeto NativeObjectSecurity no armazenamento permanente. É recomendável que os valores dos parâmetros includeSections passados para o construtor e os métodos persist sejam idênticos.

(Herdado de NativeObjectSecurity)
PurgeAccessRules(IdentityReference)

Remove todas as regras de acesso associadas à IdentityReference especificada.

(Herdado de ObjectSecurity)
PurgeAuditRules(IdentityReference)

Remove todas as regras de auditoria associadas ao IdentityReference especificado.

(Herdado de ObjectSecurity)
ReadLock()

Bloqueia este objeto ObjectSecurity para acesso de leitura.

(Herdado de ObjectSecurity)
ReadUnlock()

Desbloqueia este objeto ObjectSecurity para acesso de leitura.

(Herdado de ObjectSecurity)
RemoveAccessRule(AccessRule)

Remove as regras de acesso que contêm a mesma máscara de acesso e o identificador de segurança, como a regra de acesso especificada da DACL (lista de controle de acesso discricionário) associada a esse objeto CommonObjectSecurity.

(Herdado de CommonObjectSecurity)
RemoveAccessRule(MutexAccessRule)

Procura uma regra de controle de acesso com o mesmo usuário e AccessControlType (permitir ou negar) como a regra especificada e com herança compatível e sinalizadores de propagação; se uma regra com essas características for encontrada, os direitos contidos na regra de acesso especificada serão removidos dela.

RemoveAccessRuleAll(AccessRule)

Remove todas as regras de acesso que correspondem ao mesmo identificador de segurança que a regra de acesso especificada da DACL (Lista de Controle de Acesso Discricionário) associada a este objeto CommonObjectSecurity.

(Herdado de CommonObjectSecurity)
RemoveAccessRuleAll(MutexAccessRule)

Pesquisa por todas as regras de controle de acesso com o mesmo usuário e AccessControlType (permitir ou negar) como a regra especificada e, se encontradas, remove-as.

RemoveAccessRuleSpecific(AccessRule)

Remove todas as regras de acesso que correspondem com exatidão à regra de acesso especificada da DACL (Lista de Controle de Acesso Discricionário) associada a este objeto CommonObjectSecurity.

(Herdado de CommonObjectSecurity)
RemoveAccessRuleSpecific(MutexAccessRule)

Pesquisa por uma regra de controle de acesso que corresponda exatamente à regra especificada e, se encontrada, remove-a.

RemoveAuditRule(AuditRule)

Remove todas as regras de auditoria que contêm o mesmo identificador de segurança e máscara de acesso que a regra de auditoria especificada na SACL (Lista de Controle de Acesso do Sistema) associada a este objeto CommonObjectSecurity.

(Herdado de CommonObjectSecurity)
RemoveAuditRule(MutexAuditRule)

Pesquisa uma regra de controle de auditoria com o mesmo usuário que a regra especificada e com sinalizadores de herança e de propagação compatíveis; se uma regra compatível for encontrada, os direitos contidos na regra especificada serão removidos dela.

RemoveAuditRuleAll(AuditRule)

Remove todas as regras de auditoria que têm o mesmo identificador de segurança que a regra de auditoria especificada da SACL (Lista de Controle de Acesso do Sistema) associada a este objeto CommonObjectSecurity.

(Herdado de CommonObjectSecurity)
RemoveAuditRuleAll(MutexAuditRule)

Pesquisa todas as regras de auditoria com o mesmo usuário que a regra especificada e, se encontradas, remove-as.

RemoveAuditRuleSpecific(AuditRule)

Remove todas as regras de auditoria que correspondem com exatidão à regra de auditoria especificada na SACL (Lista de Controle de Acesso do Sistema) associada a este objeto CommonObjectSecurity.

(Herdado de CommonObjectSecurity)
RemoveAuditRuleSpecific(MutexAuditRule)

Pesquisa por uma regra de auditoria que corresponda exatamente à regra especificada e, se encontrada, remove-a.

ResetAccessRule(AccessRule)

Remove todas as regras de acesso na DACL (Lista de Controle de Acesso Discricionário) associada a este objeto CommonObjectSecurity e, em seguida, adiciona a regra de acesso especificada.

(Herdado de CommonObjectSecurity)
ResetAccessRule(MutexAccessRule)

Remove todas as regras de controle de acesso com o mesmo usuário que a regra especificada, independentemente de AccessControlType e, em seguida, adiciona a regra especificada.

SetAccessRule(AccessRule)

Remove todas as regras de acesso que contêm o mesmo identificador de segurança e qualificador que a regra de acesso especificada na DACL (Lista de Controle de Acesso Discricionário) associada a esse objeto CommonObjectSecurity e, em seguida, adiciona a regra de acesso indicada.

(Herdado de CommonObjectSecurity)
SetAccessRule(MutexAccessRule)

Remove todas as regras de controle de acesso com o mesmo usuário e AccessControlType (permitir ou negar) que a regra especificada e, em seguida, adiciona a regra especificada.

SetAccessRuleProtection(Boolean, Boolean)

Define ou remove a proteção das regras de acesso associada a este objeto ObjectSecurity. As regras de acesso protegidas não podem ser modificadas por objetos pai por meio da herança.

(Herdado de ObjectSecurity)
SetAuditRule(AuditRule)

Remove todas as regras de auditoria que contêm o mesmo identificador de segurança e qualificador que a regra de auditoria especificada na SACL (Lista de Controle de Acesso do Sistema) associada a este objeto CommonObjectSecurity e, em seguida, adiciona a regra de auditoria indicada.

(Herdado de CommonObjectSecurity)
SetAuditRule(MutexAuditRule)

Remove todas as regras de auditoria com o mesmo usuário que a regra especificada, independentemente do valor de AuditFlags e, em seguida, adiciona a regra especificada.

SetAuditRuleProtection(Boolean, Boolean)

Define ou remove a proteção das regras de auditoria associadas a este objeto ObjectSecurity. As regras de auditoria protegidas não podem ser modificadas por objetos pai por meio da herança.

(Herdado de ObjectSecurity)
SetGroup(IdentityReference)

Define o grupo primário para o descritor de segurança associado a esse objeto ObjectSecurity.

(Herdado de ObjectSecurity)
SetOwner(IdentityReference)

Define o proprietário para o descritor de segurança associado a esse objeto ObjectSecurity.

(Herdado de ObjectSecurity)
SetSecurityDescriptorBinaryForm(Byte[])

Define o descritor de segurança para este objeto ObjectSecurity da matriz especificada de valores de byte.

(Herdado de ObjectSecurity)
SetSecurityDescriptorBinaryForm(Byte[], AccessControlSections)

Define as seções especificadas do descritor de segurança para este objeto ObjectSecurity da matriz especificada de valores de byte.

(Herdado de ObjectSecurity)
SetSecurityDescriptorSddlForm(String)

Define o descritor de segurança para este objeto ObjectSecurity da cadeia de caracteres SDDL (Linguagem de Definição do Descritor de Segurança) especificada.

(Herdado de ObjectSecurity)
SetSecurityDescriptorSddlForm(String, AccessControlSections)

Define as seções especificadas do descritor de segurança para este objeto ObjectSecurity da cadeia de caracteres SDDL (Linguagem de Definição do Descritor de Segurança) especificada.

(Herdado de ObjectSecurity)
ToString()

Retorna uma cadeia de caracteres que representa o objeto atual.

(Herdado de Object)
WriteLock()

Bloqueia este objeto ObjectSecurity para acesso de gravação.

(Herdado de ObjectSecurity)
WriteUnlock()

Desbloqueia este objeto ObjectSecurity para acesso de gravação.

(Herdado de ObjectSecurity)

Aplica-se a

Confira também