Condividi tramite


RegistrySecurity.AddAccessRule(RegistryAccessRule) Metodo

Definizione

Cerca un controllo di accesso corrispondente al quale è possibile unire la nuova regola. Se non viene trovata alcuna regola, viene aggiunta la nuova regola.

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)

Parametri

rule
RegistryAccessRule

Regola di controllo di accesso da aggiungere.

Eccezioni

rule è null.

Esempio

Nell'esempio di codice seguente vengono create regole di accesso al Registro di sistema e vengono aggiunte a un RegistrySecurity oggetto , che illustra come le regole che consentono e negano i diritti rimangono separate, mentre le regole compatibili dello stesso tipo vengono unite.

Nota

In questo esempio l'oggetto di sicurezza non viene associato a un RegistryKey oggetto . Esempi che collegano oggetti di sicurezza sono disponibili in RegistryKey.GetAccessControl e RegistryKey.SetAccessControl.

Un esempio di codice che illustra i flag di ereditarietà e propagazione è disponibile nella 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

Commenti

Il AddAccessRule metodo cerca regole con lo stesso utente o gruppo e uguale AccessControlType a rule. Se non viene trovato alcun elemento, rule viene aggiunto . Se viene trovata una regola corrispondente, i diritti in rule vengono uniti alla regola esistente.

Le regole non possono essere unite se hanno flag di ereditarietà diversi. Ad esempio, se un utente è autorizzato ad accedere in lettura senza flag di ereditarietà e AddAccessRule viene usato per aggiungere una regola che concede all'utente l'accesso in scrittura con ereditarietà per le sottochiavi (InheritanceFlags.ContainerInherit), le due regole non possono essere unite.

Le regole con valori diversi AccessControlType non vengono mai unite.

Le regole esprimono i diritti nel modo più economico. Ad esempio, se un utente dispone QueryValuesdi diritti e Notify ReadPermissions e si aggiunge una regola che consente EnumerateSubKeys i diritti, l'utente dispone di tutte le parti costitutive dei ReadKey diritti. Se si eseguono query sui diritti dell'utente, verrà visualizzata una regola contenente ReadKey i diritti. Analogamente, se si rimuovono EnumerateSubKeys i diritti, gli altri costituenti dei ReadKey diritti verranno nuovamente visualizzati.

Si applica a