RegistrySecurity.RemoveAccessRuleSpecific メソッド
アセンブリ: mscorlib (mscorlib.dll 内)

Dim instance As RegistrySecurity Dim rule As RegistryAccessRule instance.RemoveAccessRuleSpecific(rule)


規則は、rule と完全に一致した場合にのみ削除されます。フラグも含め、すべての詳細情報が一致していることが必要です。同じユーザーと同じ AccessControlType が指定された他の規則は影響を受けません。
![]() |
---|
1 つの規則は、基礎となる 1 つ以上のアクセス制御エントリ (ACE) を表します。これらのエントリは、ユーザーのアクセス セキュリティ規則を変更するときに、必要に応じて分割または結合されます。そのため、規則の形式が、その規則の追加時の形式から変更されていることがあります。その場合は、RemoveAccessRuleSpecific メソッドでその規則を削除することはできません。 |

RemoveAccessRuleSpecific メソッドを使用して正確に一致する規則だけを削除するコード例を次に示します。
この例では、異なる権限を許可する 2 つの規則を作成します。この規則には、互換性のある継承フラグと反映フラグが設定されており、2 つ目の規則が追加されると、最初の規則とマージされます。この例では、最初の規則を指定して、RemoveAccessRuleSpecific メソッドを呼び出します。ただし、規則がマージされているので、一致する規則はありません。この例では、次に RemoveAccessRule メソッドを呼び出してマージされた規則から 2 つ目の規則を削除し、最後に RemoveAccessRuleSpecific メソッドを呼び出して最初の規則を削除します。
![]() |
---|
この例では、セキュリティ オブジェクトが RegistryKey オブジェクトに割り当てられません。Microsoft.Win32.RegistryKey.GetAccessControl メソッドおよび RegistryKey.SetAccessControl メソッドのトピックを参照してください。 |
Option Explicit Imports System 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: '
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: */

Windows 98, Windows 2000 SP4, Windows Millennium Edition, Windows Server 2003, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP SP2, Windows XP Starter Edition
開発プラットフォームの中には、.NET Framework によってサポートされていないバージョンがあります。サポートされているバージョンについては、「システム要件」を参照してください。


Weblioに収録されているすべての辞書からRegistrySecurity.RemoveAccessRuleSpecific メソッドを検索する場合は、下記のリンクをクリックしてください。

- RegistrySecurity.RemoveAccessRuleSpecific メソッドのページへのリンク