RegistrySecurity.AddAccessRule(RegistryAccessRule) Methode
Definitie
Belangrijk
Bepaalde informatie heeft betrekking op een voorlopige productversie die aanzienlijk kan worden gewijzigd voordat deze wordt uitgebracht. Microsoft biedt geen enkele expliciete of impliciete garanties met betrekking tot de informatie die hier wordt verstrekt.
Zoekt naar een overeenkomend toegangsbeheer waarmee de nieuwe regel kan worden samengevoegd. Als er geen worden gevonden, voegt u de nieuwe regel toe.
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)
Parameters
- rule
- RegistryAccessRule
De regel voor toegangsbeheer die moet worden toegevoegd.
Uitzonderingen
rule is null.
Voorbeelden
In het volgende codevoorbeeld worden registertoegangsregels gemaakt en toegevoegd aan een RegistrySecurity object, waarin wordt getoond hoe regels die rechten toestaan en weigeren gescheiden blijven, terwijl compatibele regels van hetzelfde type worden samengevoegd.
Note
In dit voorbeeld wordt het beveiligingsobject niet gekoppeld aan een RegistryKey object. Voorbeelden waarin beveiligingsobjecten worden gekoppeld, zijn te vinden in RegistryKey.GetAccessControl en RegistryKey.SetAccessControl.
Een codevoorbeeld waarin overname- en doorgiftevlagmen worden gedemonstreerd, vindt u in de RegistryAccessRule klasse.
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
Opmerkingen
De AddAccessRule methode zoekt naar regels met dezelfde gebruiker of groep en dezelfde AccessControlType als rule. Als er geen gevonden zijn, rule wordt deze toegevoegd. Als er een overeenkomende regel wordt gevonden, worden de rechten samengevoegd rule met de bestaande regel.
Regels kunnen niet worden samengevoegd als ze verschillende overnamevlagmen hebben. Als een gebruiker bijvoorbeeld leestoegang zonder overnamevlagmen toestaat en AddAccessRule wordt gebruikt om een regel toe te voegen die de gebruiker schrijftoegang geeft met overname voor subsleutels (InheritanceFlags.ContainerInherit), kunnen de twee regels niet worden samengevoegd.
Regels met verschillende AccessControlType waarden worden nooit samengevoegd.
Regels drukken rechten uit op de meest economische manier. Als een gebruiker bijvoorbeeld en rechten heeft en ReadPermissions u een regel toevoegt die rechten toestaat EnumerateSubKeysQueryValuesNotify, heeft de gebruiker alle samenstellende onderdelen van ReadKey rechten. Als u een query uitvoert op de rechten van de gebruiker, ziet u een regel met ReadKey rechten. Als u rechten verwijdert EnumerateSubKeys , worden de andere onderdelen van ReadKey rechten ook opnieuw weergegeven.