对于我的.net应用程序,我有一种在本地计算机上创建特殊用户的机制。然后,我创建了注册表/目录条目,并为这个新创建的用户分配了对相应子密钥/文件夹的完全访问权限。
对于我的测试,我使用Impersonation来设置环境以在这个新用户下运行,然后在注册表/目录部分上运行一些操作。
我使用以下代码创建我的注册表部分(以管理员身份运行):
RegistryAccessRule rule = new RegistryAccessRule(LOGON_USER_NAME, RegistryRights.FullControl, InheritanceFlags.ContainerInherit | InheritanceFlags.ObjectInherit, PropagationFlags.InheritOnly, AccessControlType.Allow);
RegistrySecurity security = new RegistrySecurity();
security.AddAccessRule(rule);
//Create Test Sub Key in Registry with permissions for the MicaUser
root = Registry.LocalMachine.CreateSubKey(SUB_KEY_ROOT, RegistryKeyPermissionCheck.ReadWriteSubTree);
root.SetAccessControl(security);
RegistryKey key = root.CreateSubKey(SUB_KEY_DELETE, RegistryKeyPermissionCheck.ReadWriteSubTree);
root.Close();
key.Close();
然后当我尝试在模拟用户下操作寄存器时:
RegistryKey root = Registry.LocalMachine.OpenSubKey(SUB_KEY_ROOT); root.DeleteSubKeyTree(SUB_KEY_DELETE);
这会导致权限异常“无法写入注册表项”。
目录操作很好,并且按预期工作,但注册表权限失败。我检查了注册表,并且用户已被授予对子密钥的完全权限。
错误:“无法写入注册表项”
注意:注册表操作在Admin用户下运行正常,因此代码是正确的。
有什么想法吗?
此致
的Tris
答案 0 :(得分:1)
更新
我已经弄清楚在访问目录和注册管理机构等各个子项时遇到了什么问题。 ACL似乎仅应用于子项而不应用于根项。以下问题是如何解决此问题的问题: