RegistrySecurity.RemoveAccessRule(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 toegangsbeheerregel met dezelfde gebruiker en AccessControlType (toestaan of weigeren) als de opgegeven toegangsregel en met compatibele overname- en doorgiftevlagmen. Als een dergelijke regel wordt gevonden, worden de rechten in de opgegeven toegangsregel verwijderd.
public:
bool RemoveAccessRule(System::Security::AccessControl::RegistryAccessRule ^ rule);
public bool RemoveAccessRule(System.Security.AccessControl.RegistryAccessRule rule);
override this.RemoveAccessRule : System.Security.AccessControl.RegistryAccessRule -> bool
Public Function RemoveAccessRule (rule As RegistryAccessRule) As Boolean
Parameters
- rule
- RegistryAccessRule
Een RegistryAccessRule die de gebruiker opgeeft en AccessControlType waarnaar moet worden gezocht, en een set overname- en doorgiftevlagmen waarmee een overeenkomende regel, indien gevonden, compatibel moet zijn met. Hiermee geeft u de rechten op om te verwijderen uit de compatibele regel, indien gevonden.
Retouren
true als er een compatibele regel wordt gevonden; anders false.
Uitzonderingen
rule is null.
Voorbeelden
In het volgende codevoorbeeld ziet u hoe de RemoveAccessRule methode rechten verwijdert uit een compatibele regel en hoe de AddAccessRule methode rechten met compatibele regels samenvoegt.
In het voorbeeld wordt een RegistrySecurity object gemaakt en wordt een regel toegevoegd waarmee de huidige gebruikersrechten RegistryRights.ReadKey worden toegestaan. In het voorbeeld wordt vervolgens een regel gemaakt die de gebruiker RegistryRights.SetValueverleent, met dezelfde overname- en doorgifterechten als de eerste regel, en de RemoveAccessRule methode gebruikt om deze nieuwe regel uit het RegistrySecurity object te verwijderen. SetValue is een onderdeel van ReadKey, dus het wordt verwijderd uit de compatibele regel. De regels in het RegistrySecurity object worden weergegeven, met de resterende onderdelen van ReadKey.
Met de voorbeeldcode wordt vervolgens de methode aangeroepen om de RemoveAccessRuleSetValue rechterback-up samen te voegen in de regel in het RegistrySecurity object.
Note
In dit voorbeeld wordt het beveiligingsobject niet gekoppeld aan een RegistryKey object. In het tweede voorbeeld in deze sectie wordt een beveiligingsobject gekoppeld en worden ook de voorbeelden in RegistryKey.GetAccessControlRegistryKey.SetAccessControl.
using System;
using System.Security.AccessControl;
using System.Security.Principal;
using System.Security;
using Microsoft.Win32;
public class Example
{
public static void Main()
{
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 ReadKey
// rights. ReadKey is a combination of four other
// rights. The rule is inherited by all
// contained subkeys.
RegistryAccessRule rule = new RegistryAccessRule(user,
RegistryRights.ReadKey,
InheritanceFlags.ContainerInherit,
PropagationFlags.None,
AccessControlType.Allow);
mSec.AddAccessRule(rule);
// Create a rule that allows the current user only the
// right to query the key/value pairs of a key, using
// the same inheritance and propagation flags as the
// first rule. QueryValues is a constituent of
// ReadKey, so when this rule is removed, using the
// RemoveAccessRule method, ReadKey is broken into
// its constituent parts.
rule = new RegistryAccessRule(user,
RegistryRights.QueryValues,
InheritanceFlags.ContainerInherit,
PropagationFlags.None,
AccessControlType.Allow);
mSec.RemoveAccessRule(rule);
// Display the rules in the security object.
ShowSecurity(mSec);
// Add the second rule back. It merges with the
// existing rule, so that the rule is now displayed
// as ReadKey.
mSec.AddAccessRule(rule);
// Display the rules in the security object.
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(" Inheritance: {0}", ar.InheritanceFlags);
Console.WriteLine(" Propagation: {0}", ar.PropagationFlags);
Console.WriteLine(" Inherited? {0}", ar.IsInherited);
Console.WriteLine();
}
}
}
/* This code example produces output similar to following:
Current access rules:
User: TestDomain\TestUser
Type: Allow
Rights: EnumerateSubKeys, Notify, ReadPermissions
Inheritance: ContainerInherit
Propagation: None
Inherited? False
Current access rules:
User: TestDomain\TestUser
Type: Allow
Rights: ReadKey
Inheritance: ContainerInherit
Propagation: None
Inherited? False
*/
Option Explicit
Imports System.Security.AccessControl
Imports System.Security.Principal
Imports System.Security
Imports Microsoft.Win32
Public Class Example
Public Shared Sub Main()
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 ReadKey
' rights. ReadKey is a combination of four other
' rights. The rule is inherited by all
' contained subkeys.
Dim rule As New RegistryAccessRule(user, _
RegistryRights.ReadKey, _
InheritanceFlags.ContainerInherit, _
PropagationFlags.None, _
AccessControlType.Allow)
mSec.AddAccessRule(rule)
' Create a rule that allows the current user only the
' right to query the key/value pairs of a key, using
' the same inheritance and propagation flags as the
' first rule. QueryValues is a constituent of
' ReadKey, so when this rule is removed, using the
' RemoveAccessRule method, ReadKey is broken into
' its constituent parts.
rule = New RegistryAccessRule(user, _
RegistryRights.QueryValues, _
InheritanceFlags.ContainerInherit, _
PropagationFlags.None, _
AccessControlType.Allow)
mSec.RemoveAccessRule(rule)
' Display the rules in the security object.
ShowSecurity(mSec)
' Add the second rule back. It merges with the
' existing rule, so that the rule is now displayed
' as ReadKey.
mSec.AddAccessRule(rule)
' Display the rules in the security object.
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(" Inheritance: {0}", ar.InheritanceFlags)
Console.WriteLine(" Propagation: {0}", ar.PropagationFlags)
Console.WriteLine(" Inherited? {0}", ar.IsInherited)
Console.WriteLine()
Next
End Sub
End Class
'This code example produces output similar to following:
'
'Current access rules:
'
' User: TestDomain\TestUser
' Type: Allow
' Rights: EnumerateSubKeys, Notify, ReadPermissions
' Inheritance: ContainerInherit
' Propagation: None
' Inherited? False
'
'
'Current access rules:
'
' User: TestDomain\TestUser
' Type: Allow
' Rights: ReadKey
' Inheritance: ContainerInherit
' Propagation: None
' Inherited? False
'
Opmerkingen
De huidige RegistrySecurity wordt gezocht naar een regel met dezelfde gebruiker en dezelfde AccessControlType waarde als rule. Als er geen dergelijke regel wordt gevonden, wordt er geen actie ondernomen en wordt de methode geretourneerd false. Als overeenkomende regels worden gevonden, worden de overname- en compatibiliteitsvlagmen gecontroleerd op compatibiliteit met de vlaggen die zijn opgegeven in rule. Als er geen compatibele regel wordt gevonden, wordt er geen actie ondernomen en wordt de methode geretourneerd false. Als er een regel met compatibele vlaggen wordt gevonden, worden de opgegeven rule rechten verwijderd uit de compatibele regel en retourneert truede methode. Als rule hiermee rechten worden opgegeven die niet in de compatibele regel zijn opgenomen, wordt er geen actie ondernomen met betrekking tot deze rechten. Als alle rechten uit de compatibele regel worden verwijderd, wordt de hele regel verwijderd uit het huidige RegistrySecurity object.