第一个方法用来给注册表添加一个禁止修改键值的权限;第二个方法用来删除刚刚添加的禁止修改键值权限。
现在第一个方法可以正常运行,但是第二个方法运行就提示“不允许所请求的注册表访问权”,很是郁闷,还请前辈帮忙给看下是怎么回事,感谢!
private void button1_Click(object sender, EventArgs e)
{
NTAccount name = new NTAccount(Environment.UserName);
RegistrySecurity rs = Registry.LocalMachine.OpenSubKey("software").OpenSubKey("test").GetAccessControl();
rs.AddAccessRule(new RegistryAccessRule(name, RegistryRights.SetValue, AccessControlType.Deny));
Registry.LocalMachine.OpenSubKey("software").OpenSubKey("test", true).SetAccessControl(rs);
} private void button2_Click(object sender, EventArgs e)
{
NTAccount name = new NTAccount(Environment.UserName);
RegistrySecurity rs = Registry.LocalMachine.OpenSubKey("software").OpenSubKey("test").GetAccessControl();
rs.RemoveAccessRule(new RegistryAccessRule(name, RegistryRights.SetValue, AccessControlType.Deny));
Registry.LocalMachine.OpenSubKey("software").OpenSubKey("test", true).SetAccessControl(rs);
}
现在第一个方法可以正常运行,但是第二个方法运行就提示“不允许所请求的注册表访问权”,很是郁闷,还请前辈帮忙给看下是怎么回事,感谢!
private void button1_Click(object sender, EventArgs e)
{
NTAccount name = new NTAccount(Environment.UserName);
RegistrySecurity rs = Registry.LocalMachine.OpenSubKey("software").OpenSubKey("test").GetAccessControl();
rs.AddAccessRule(new RegistryAccessRule(name, RegistryRights.SetValue, AccessControlType.Deny));
Registry.LocalMachine.OpenSubKey("software").OpenSubKey("test", true).SetAccessControl(rs);
} private void button2_Click(object sender, EventArgs e)
{
NTAccount name = new NTAccount(Environment.UserName);
RegistrySecurity rs = Registry.LocalMachine.OpenSubKey("software").OpenSubKey("test").GetAccessControl();
rs.RemoveAccessRule(new RegistryAccessRule(name, RegistryRights.SetValue, AccessControlType.Deny));
Registry.LocalMachine.OpenSubKey("software").OpenSubKey("test", true).SetAccessControl(rs);
}
把OpenSubKey改成另一个重载,并指定RegistryRights.ChangePermissions:{
NTAccount name = new NTAccount(Environment.UserDomainName, Environment.UserName);
using (RegistryKey regKey = Registry.LocalMachine.OpenSubKey("software\\test", RegistryKeyPermissionCheck.ReadWriteSubTree, RegistryRights.ChangePermissions))
{
RegistrySecurity rs =regKey.GetAccessControl();
RegistryAccessRule denyRule = rs
.GetAccessRules(true, false, typeof(NTAccount))
.OfType<RegistryAccessRule>()
.FirstOrDefault(r => r.AccessControlType == AccessControlType.Deny && (r.IdentityReference as NTAccount) == name); if (denyRule != null && rs.RemoveAccessRule(denyRule))
{
regKey.SetAccessControl(rs);
}
}
}
弱弱的问下,能不能加你的QQ啊?
以后如果碰到问题的话可以跟你请教下。