レジストリ ユーザーのアクセス許可を設定する汎用関数を作成しようとしています。
問題は、コードを使用してキーのフルコントロールアクセスを拒否した場合、再度許可すると、次の行でキーを読み取ろうとすると例外がスローされることです。
Dim RK As RegistryKey = RootKey.OpenSubKey(KeyPath, RegistryKeyPermissionCheck.ReadWriteSubTree, RegistryRights.ChangePermissions Or RegistryRights.ReadKey)
私は次のようにプロシージャを呼び出します:
RegEdit.Set_UserAccess_Key("hkcu\appevents", RegistryRights.FullControl, AccessControlType.Deny)
それは機能しており、その後、これを呼び出します:
RegEdit.Set_UserAccess_Key("hkcu\appevents", RegistryRights.FullControl, AccessControlType.Allow)
以前に拒否されたアクセス許可を許可しようとしたときの例外:
Requested registry access denied
Acceso denegado al Registro solicitado.
これはコードです:
''' <summary>
''' Modify the User permissions of a registry key.
''' </summary>
Public Shared Sub Set_UserAccess_Key(ByVal RegKey As String, _
ByVal RegUserAccess As RegistryRights, _
ByVal AccessType As AccessControlType, _
Optional ByVal UserName As String = Nothing)
If UserName = Nothing Then UserName = Environment.UserDomainName & "\" & Environment.UserName
Dim RootKey As RegistryKey = Get_Root_Key(RegKey) ' Registrykey.Currentuser
Dim KeyPath As String = Get_Key_Path(RegKey) ' AppEvents
Dim RS As New RegistrySecurity()
Dim RK As RegistryKey = RootKey.OpenSubKey(KeyPath, RegistryKeyPermissionCheck.ReadWriteSubTree, RegistryRights.ChangePermissions Or RegistryRights.ReadKey)
RS.AddAccessRule(New RegistryAccessRule(UserName, RegUserAccess, InheritanceFlags.None, PropagationFlags.None, AccessType))
RK.SetAccessControl(RS)
RK = RootKey.OpenSubKey(KeyPath, RegistryKeyPermissionCheck.ReadWriteSubTree, RegUserAccess)
RK.SetAccessControl(RS)
End Sub