RegistrySecurity.AddAccessRule(RegistryAccessRule) Método
Definición
Importante
Parte de la información hace referencia a la versión preliminar del producto, que puede haberse modificado sustancialmente antes de lanzar la versión definitiva. Microsoft no otorga ninguna garantía, explícita o implícita, con respecto a la información proporcionada aquí.
Busca un control de acceso coincidente con el que se pueda combinar la nueva regla. Si no se encuentra ninguna, agrega la nueva regla.
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
La regla de control de acceso que se va a agregar.
Excepciones
rule
es null
.
Ejemplos
En el ejemplo de código siguiente se crean reglas de acceso al Registro y se agregan a un RegistrySecurity objeto , en el que se muestra cómo las reglas que permiten y deniegan derechos permanecen independientes, mientras que las reglas compatibles del mismo tipo se combinan.
Nota:
En este ejemplo no se adjunta el objeto de seguridad a un RegistryKey objeto . Ejemplos que adjuntan objetos de seguridad se pueden encontrar en RegistryKey.GetAccessControl y RegistryKey.SetAccessControl.
En la RegistryAccessRule clase se puede encontrar un ejemplo de código que muestra las marcas de herencia y propagación.
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
Comentarios
El AddAccessRule método busca reglas con el mismo usuario o grupo y el mismo AccessControlType que rule
. Si no se encuentra ninguno, rule
se agrega. Si se encuentra una regla de coincidencia, los derechos de rule
se combinan con la regla existente.
Las reglas no se pueden combinar si tienen marcas de herencia diferentes. Por ejemplo, si se permite el acceso de lectura a un usuario sin marcas de herencia y AddAccessRule se usa para agregar una regla que proporciona al usuario acceso de escritura con herencia para subclaves (InheritanceFlags.ContainerInherit), las dos reglas no se pueden combinar.
Las reglas con valores diferentes AccessControlType nunca se combinan.
Las normas expresan los derechos de la manera más económica. Por ejemplo, si un usuario tiene QueryValuesderechos y ReadPermissionsNotify , y agrega una regla que permite EnumerateSubKeys derechos, el usuario tiene todas las partes constituyentes de ReadKey los derechos. Si consulta los derechos del usuario, verá una regla que contiene ReadKey derechos. Del mismo modo, si quita EnumerateSubKeys derechos, volverán a aparecer los demás constituyentes de ReadKey los derechos.