Share via


MutexAccessRule Classe

Definição

Representa um conjunto de direitos de acesso permitidos ou negados para um usuário ou grupo. Essa classe não pode ser herdada.

public ref class MutexAccessRule sealed : System::Security::AccessControl::AccessRule
public sealed class MutexAccessRule : System.Security.AccessControl.AccessRule
[System.Security.SecurityCritical]
public sealed class MutexAccessRule : System.Security.AccessControl.AccessRule
type MutexAccessRule = class
    inherit AccessRule
[<System.Security.SecurityCritical>]
type MutexAccessRule = class
    inherit AccessRule
Public NotInheritable Class MutexAccessRule
Inherits AccessRule
Herança
Atributos

Exemplos

O exemplo de código a seguir demonstra a criação e o uso de MutexAccessRule objetos . 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 em Mutex.GetAccessControl e 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

A MutexAccessRule classe é uma de um conjunto de classes que o .NET Framework fornece para gerenciar a segurança de controle de acesso do Windows em mutexes de sistema nomeados. Para obter uma visão geral dessas classes e sua relação com as estruturas de controle de acesso subjacentes do Windows, consulte MutexSecurity.

Observação

A segurança do controle de acesso do Windows é significativa apenas para mutexes de sistema nomeados. Se um Mutex objeto representar um mutex local, o controle de acesso será irrelevante.

Para obter uma lista das regras atualmente aplicadas a um mutex nomeado, use o Mutex.GetAccessControl método para obter um MutexSecurity objeto e, em seguida, use seu GetAccessRules método para obter uma coleção de MutexAccessRule objetos.

MutexAccessRule Os objetos não mapeiam um para um com entradas de controle de acesso na DACL (lista de controle de acesso discricionário) subjacente. Quando você obtém o conjunto de todas as regras de acesso para um mutex, o conjunto contém o número mínimo de regras atualmente necessárias para expressar todas as entradas de controle de acesso.

Observação

As entradas de controle de acesso subjacentes mudam conforme você aplica e remove regras. As informações nas regras são mescladas, se possível, para manter o menor número de entradas de controle de acesso. Portanto, quando você lê a lista atual de regras, ela pode não se parecer exatamente com a lista de todas as regras que você adicionou.

Use MutexAccessRule objetos para especificar direitos de acesso para permitir ou negar a um usuário ou grupo. Um MutexAccessRule objeto sempre representa acesso permitido ou acesso negado, nunca ambos.

Para aplicar uma regra a um mutex do sistema nomeado, use o Mutex.GetAccessControl método para obter o MutexSecurity objeto . Modifique o MutexSecurity objeto usando seus métodos para adicionar a regra e, em seguida, use o Mutex.SetAccessControl método para reanexar o objeto de segurança.

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.

MutexAccessRule os objetos são imutáveis. A segurança de um mutex é modificada usando os métodos da MutexSecurity classe para adicionar ou remover regras; conforme você faz isso, as entradas de controle de acesso subjacentes são modificadas.

Construtores

MutexAccessRule(IdentityReference, MutexRights, AccessControlType)

Inicializa uma nova instância da classe MutexAccessRule, especificando o usuário ou grupo ao qual a regra se aplica, os direitos de acesso e se estes são permitidos ou negados.

MutexAccessRule(String, MutexRights, AccessControlType)

Inicializa uma nova instância da classe MutexAccessRule, especificando o nome do usuário ou do grupo ao qual a regra se aplica, os direitos de acesso e se eles são permitidos ou negados.

Propriedades

AccessControlType

Obtém o valor de AccessControlType associado a esse objeto AccessRule.

(Herdado de AccessRule)
AccessMask

Obtém a máscara de acesso para essa regra.

(Herdado de AuthorizationRule)
IdentityReference

Obtém o IdentityReference ao qual essa regra se aplica.

(Herdado de AuthorizationRule)
InheritanceFlags

Obtém o valor de sinalizadores que determinam como a essa regra é herdada por objetos filhos.

(Herdado de AuthorizationRule)
IsInherited

Obtém um valor que indica se esta regra é definida explicitamente ou é herdada de um objeto de contêiner pai.

(Herdado de AuthorizationRule)
MutexRights

Obtém os direitos permitidos ou negados pela regra de acesso.

PropagationFlags

Obtém o valor dos sinalizadores de propagação, que determinam como a herança dessa regra é propagada a objetos filho. Esta propriedade é significativa somente quando o valor de enumeração InheritanceFlags não é None.

(Herdado de AuthorizationRule)

Métodos

Equals(Object)

Determina se o objeto especificado é igual ao objeto atual.

(Herdado de Object)
GetHashCode()

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

(Herdado de Object)
GetType()

Obtém o Type da instância atual.

(Herdado de Object)
MemberwiseClone()

Cria uma cópia superficial do Object atual.

(Herdado de Object)
ToString()

Retorna uma cadeia de caracteres que representa o objeto atual.

(Herdado de Object)

Aplica-se a

Confira também