0

レジストリ ユーザーのアクセス許可を設定する汎用関数を作成しようとしています。

問題は、コードを使用してキーのフルコントロールアクセスを拒否した場合、再度許可すると、次の行でキーを読み取ろうとすると例外がスローされることです。

    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
4

1 に答える 1

0

少し前に、特定の へのフル アクセスを許可する小さなプログラムを作成しましたRegistry Key。それは常にうまくいきました。そのコードは、次を除いてあなたのものと同等です。

RS.AddAccessRule(New RegistryAccessRule(UserName, RegistryRights.CreateSubKey Or RegistryRights.Delete Or RegistryRights.ExecuteKey Or RegistryRights.FullControl Or RegistryRights.ReadKey Or RegistryRights.SetValue Or RegistryRights.WriteKey, AccessControlType.Allow))

あなたのコードに関して何か変更があるかどうかはわかりません (内容がわからない変数を使用しています)。いずれにせよ、このアプリはセキュリティ レベルを変更した直後に特定のキーにアクセスすることはありません。プロセスは次のとおりです。キーへのフルアクセスを設定するための最初の実行。変更されたキーにアクセスするための別の実行。

于 2013-07-21T15:45:11.833 に答える