RegistrySecurity.AddAccessRule(RegistryAccessRule) Método
Definição
Importante
Algumas informações dizem respeito a um produto pré-lançado que pode ser substancialmente modificado antes de ser lançado. A Microsoft não faz garantias, de forma expressa ou implícita, em relação à informação aqui apresentada.
Procura um controlo de acesso correspondente com o qual a nova regra possa ser fundida. Se não for encontrada nenhuma, 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 controlo de acesso a acrescentar.
Exceções
rule é null.
Exemplos
O exemplo de código seguinte cria regras de acesso ao registo e adiciona-as a um RegistrySecurity objeto, mostrando como as regras que permitem e negam direitos permanecem separadas, enquanto regras compatíveis do mesmo tipo são fundidas.
Note
Este exemplo não associa 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 flags de herança e propagação pode ser encontrado 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
Observações
O AddAccessRule método procura regras com o mesmo utilizador ou grupo e as mesmas AccessControlType que rule. Se não for encontrado, rule é adicionado. Se for encontrada uma regra correspondente, os direitos em rule são fundidos com a regra existente.
As regras não podem ser fundidas se tiverem flags de herança diferentes. Por exemplo, se um utilizador tiver acesso à leitura sem flags de herança, e AddAccessRule for usado para adicionar uma regra que dá ao utilizador acesso de escrita com herança para subchaves (InheritanceFlags.ContainerInherit), as duas regras não podem ser fundidas.
Regras com valores diferentes AccessControlType nunca são fundidas.
As regras expressam direitos da forma mais económica. Por exemplo, se um utilizador tem QueryValues, Notify e ReadPermissions direitos, e adiciona uma regra que permite EnumerateSubKeys direitos, o utilizador tem todas as partes constituintes dos ReadKey direitos. Se questionar os direitos do utilizador, verá uma regra contendo ReadKey direitos. Da mesma forma, se retirares EnumerateSubKeys direitos, os outros constituintes dos ReadKey direitos reaparecerão.