RegistrySecurity.RemoveAccessRuleSpecific(RegistryAccessRule) Metoda
Definice
Důležité
Některé informace platí pro předběžně vydaný produkt, který se může zásadně změnit, než ho výrobce nebo autor vydá. Microsoft neposkytuje žádné záruky, výslovné ani předpokládané, týkající se zde uváděných informací.
Vyhledá pravidlo řízení přístupu, které přesně odpovídá zadanému pravidlu, a pokud ho najde, odebere ho.
public:
void RemoveAccessRuleSpecific(System::Security::AccessControl::RegistryAccessRule ^ rule);
public void RemoveAccessRuleSpecific (System.Security.AccessControl.RegistryAccessRule rule);
override this.RemoveAccessRuleSpecific : System.Security.AccessControl.RegistryAccessRule -> unit
Public Sub RemoveAccessRuleSpecific (rule As RegistryAccessRule)
Parametry
- rule
- RegistryAccessRule
Objekt, RegistryAccessRule který se má odebrat.
Výjimky
rule
je null
.
Příklady
Následující příklad kódu ukazuje, že metoda odebere pravidlo pouze v případě, že RemoveAccessRuleSpecific se přesně shoduje.
Příklad vytvoří dvě pravidla, která umožňují různá práva. Pravidla mají kompatibilní příznaky dědičnosti a šíření, takže při přidání druhého pravidla se sloučí s prvním. Příklad volá metodu RemoveAccessRuleSpecific a určuje první pravidlo, ale protože pravidla jsou sloučena, neexistuje žádné pravidlo, které by odpovídalo. Příklad pak zavolá metodu RemoveAccessRule pro odebrání druhého pravidla ze sloučeného pravidla a nakonec zavolá metodu RemoveAccessRuleSpecific pro odebrání prvního pravidla.
Poznámka
Tento příklad nepřipojí objekt zabezpečení k objektu RegistryKey . Podívejte se na metodu RegistryKey.GetAccessControl a metodu RegistryKey.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 the right
// to read and enumerate the name/value pairs in a key,
// to read its access and audit rules, to enumerate
// its subkeys, to create subkeys, and to delete the key.
// The rule is inherited by all contained subkeys.
//
RegistryAccessRule rule1 = new RegistryAccessRule(user,
RegistryRights.ReadKey | RegistryRights.WriteKey
| RegistryRights.Delete,
InheritanceFlags.ContainerInherit,
PropagationFlags.None,
AccessControlType.Allow);
mSec.AddAccessRule(rule1);
// Add a rule that allows the current user the right
// right to take ownership of a key, using the same
// inheritance and propagation flags. This rule
// merges with the first rule.
RegistryAccessRule rule2 = new RegistryAccessRule(user,
RegistryRights.ChangePermissions,
InheritanceFlags.ContainerInherit,
PropagationFlags.None,
AccessControlType.Allow);
mSec.AddAccessRule(rule2);
// Display the rules in the security object.
ShowSecurity(mSec);
// Attempt to use RemoveRuleSpecific to remove the
// first rule. The removal fails, because the rule
// in the RegistrySecurity object has been altered.
mSec.RemoveAccessRuleSpecific(rule1);
// Show that the rule was not removed.
ShowSecurity(mSec);
// Use the RemoveAccessRule method to remove rule2,
// and then use RemoveAccessRuleSpecific to remove
// rule1.
mSec.RemoveAccessRule(rule2);
mSec.RemoveAccessRuleSpecific(rule1);
// Show that the rules have been removed.
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: SetValue, CreateSubKey, Delete, ReadKey, ChangePermissions
Inheritance: ContainerInherit
Propagation: None
Inherited? False
Current access rules:
User: TestDomain\TestUser
Type: Allow
Rights: SetValue, CreateSubKey, Delete, ReadKey, ChangePermissions
Inheritance: ContainerInherit
Propagation: None
Inherited? False
Current access rules:
*/
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 the right
' to read and enumerate the name/value pairs in a key,
' to read its access and audit rules, to enumerate
' its subkeys, to create subkeys, and to delete the key.
' The rule is inherited by all contained subkeys.
'
Dim rule1 As New RegistryAccessRule(user, _
RegistryRights.ReadKey Or RegistryRights.WriteKey _
Or RegistryRights.Delete, _
InheritanceFlags.ContainerInherit, _
PropagationFlags.None, _
AccessControlType.Allow)
mSec.AddAccessRule(rule1)
' Add a rule that allows the current user the right
' right to take ownership of a key, using the same
' inheritance and propagation flags. This rule
' merges with the first rule.
Dim rule2 As New RegistryAccessRule(user, _
RegistryRights.ChangePermissions, _
InheritanceFlags.ContainerInherit, _
PropagationFlags.None, _
AccessControlType.Allow)
mSec.AddAccessRule(rule2)
' Display the rules in the security object.
ShowSecurity(mSec)
' Attempt to use RemoveRuleSpecific to remove the
' first rule. The removal fails, because the rule
' in the RegistrySecurity object has been altered.
mSec.RemoveAccessRuleSpecific(rule1)
' Show that the rule was not removed.
ShowSecurity(mSec)
' Use the RemoveAccessRule method to remove rule2,
' and then use RemoveAccessRuleSpecific to remove
' rule1.
mSec.RemoveAccessRule(rule2)
mSec.RemoveAccessRuleSpecific(rule1)
' Show that the rules have been removed.
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: SetValue, CreateSubKey, Delete, ReadKey, ChangePermissions
' Inheritance: ContainerInherit
' Propagation: None
' Inherited? False
'
'
'Current access rules:
'
' User: TestDomain\TestUser
' Type: Allow
' Rights: SetValue, CreateSubKey, Delete, ReadKey, ChangePermissions
' Inheritance: ContainerInherit
' Propagation: None
' Inherited? False
'
'
'Current access rules:
'
Poznámky
Pravidlo se odebere jenom v případě, že se přesně shoduje rule
se všemi podrobnostmi, včetně příznaků. Jiná pravidla se stejným uživatelem a AccessControlType nejsou ovlivněna.
Důležité
Pravidlo představuje jednu nebo více podkladových položek řízení přístupu (ACE) a tyto položky se rozdělí nebo zkombinují podle potřeby při úpravě pravidel zabezpečení přístupu pro uživatele. Proto pravidlo již nemusí existovat v konkrétní podobě, kterou mělo při přidání, a v takovém případě ho RemoveAccessRuleSpecific metoda nemůže odebrat.