Partilhar via


RegistrySecurity.AddAccessRule(RegistryAccessRule) Método

Definição

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

public:
 void AddAccessRule(System::Security::AccessControl::RegistryAccessRule ^ rule);
public void AddAccessRule (System.Security.AccessControl.RegistryAccessRule rule);
override this.AddAccessRule : System.Security.AccessControl.RegistryAccessRule -> unit
Public Sub AddAccessRule (rule As RegistryAccessRule)

Parâmetros

rule
RegistryAccessRule

A regra de controle de acesso a ser adicionada.

Exceções

rule é null.

Exemplos

O exemplo de código a seguir cria regras de acesso ao Registro e as adiciona a um RegistrySecurity objeto, mostrando como as regras que permitem e negam direitos permanecem separadas, enquanto as regras compatíveis do mesmo tipo são mescladas.

Observação

Este exemplo não anexa o objeto de segurança a um RegistryKey objeto. Exemplos que anexam objetos de segurança podem ser encontrados em RegistryKey.GetAccessControl e RegistryKey.SetAccessControl.

Um exemplo de código que demonstra a herança e os sinalizadores de propagação podem ser encontrados na RegistryAccessRule classe.

using System;
using Microsoft.Win32;
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.
        RegistrySecurity mSec = new RegistrySecurity();

        // Add a rule that grants the current user the 
        // right to read the key.
        RegistryAccessRule rule = new RegistryAccessRule(user, 
            RegistryRights.ReadKey, 
            AccessControlType.Allow);
        mSec.AddAccessRule(rule);

        // Add a rule that denies the current user the 
        // right to change permissions on the Registry.
        rule = new RegistryAccessRule(user, 
            RegistryRights.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 Registry. This 
        // rule is merged with the existing Allow rule.
        rule = new RegistryAccessRule(user, 
            RegistryRights.WriteKey, 
            AccessControlType.Allow);
        mSec.AddAccessRule(rule);

        ShowSecurity(mSec);
    }

    private static void ShowSecurity(RegistrySecurity security)
    {
        Console.WriteLine("\r\nCurrent access rules:\r\n");

        foreach( RegistryAccessRule 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.RegistryRights);
            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: ReadKey


Current access rules:

        User: TestDomain\TestUser
        Type: Deny
      Rights: ChangePermissions

        User: TestDomain\TestUser
        Type: Allow
      Rights: SetValue, CreateSubKey, ReadKey
 */
Imports Microsoft.Win32
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 RegistrySecurity()

        ' Add a rule that grants the current user the 
        ' right to read the key.
        Dim rule As New RegistryAccessRule(user, _
            RegistryRights.ReadKey, _
            AccessControlType.Allow)
        mSec.AddAccessRule(rule)

        ' Add a rule that denies the current user the 
        ' right to change permissions on the Registry.
        rule = New RegistryAccessRule(user, _
            RegistryRights.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 Registry. This 
        ' rule is merged with the existing Allow rule.
        rule = New RegistryAccessRule(user, _
            RegistryRights.WriteKey, _
            AccessControlType.Allow)
        mSec.AddAccessRule(rule)

        ShowSecurity(mSec)

    End Sub 

    Private Shared Sub ShowSecurity(ByVal security As RegistrySecurity)
        Console.WriteLine(vbCrLf & "Current access rules:" & vbCrLf)

        For Each ar As RegistryAccessRule In _
            security.GetAccessRules(True, True, GetType(NTAccount))

            Console.WriteLine("        User: {0}", ar.IdentityReference)
            Console.WriteLine("        Type: {0}", ar.AccessControlType)
            Console.WriteLine("      Rights: {0}", ar.RegistryRights)
            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: ReadKey
'
'
'Current access rules:
'
'        User: TestDomain\TestUser
'        Type: Deny
'      Rights: ChangePermissions
'
'        User: TestDomain\TestUser
'        Type: Allow
'      Rights: SetValue, CreateSubKey, ReadKey

Comentários

O AddAccessRule método pesquisa regras com o mesmo usuário ou grupo e o mesmo AccessControlType que rule. Se nenhum for encontrado, rule será adicionado. Se uma regra correspondente for encontrada, os direitos serão rule mesclados com a regra existente.

As regras não poderão ser mescladas se tiverem sinalizadores de herança diferentes. Por exemplo, se um usuário tiver permissão para acesso de leitura sem sinalizadores de herança e AddAccessRule for usado para adicionar uma regra que dê ao usuário acesso de gravação com herança para subchaves (InheritanceFlags.ContainerInherit), as duas regras não poderão ser mescladas.

Regras com valores diferentes AccessControlType nunca são mescladas.

As regras expressam direitos da maneira mais econômica. Por exemplo, se um usuário tiver QueryValuesNotify direitos e ReadPermissions direitos e você adicionar uma regra permitindo EnumerateSubKeys direitos, o usuário terá todas as partes constituintes dos ReadKey direitos. Se você consultar os direitos do usuário, verá uma regra que ReadKey contém direitos. Da mesma forma, se você remover EnumerateSubKeys direitos, os outros constituintes de ReadKey direitos reaparecerão.

Aplica-se a