繁体   English   中英

RegistrySecurity访问被拒绝。 C#

[英]RegistrySecurity Access is denied. C#

我在编写应用程序以设置某些旧版密钥的权限时遇到问题。 旧版密钥已完全锁定,并且在regedit中实际修改它们,您必须拥有所有权,然后添加完全控制权。 当试图在代码中复制它时,我无法获得写入错误“访问被拒绝”的密钥。 示例代码:

RegistrySecurity rs = new RegistrySecurity();
rs.AddAccessRule(new RegistryAccessRule("Administrators", RegistryRights.FullControl, AccessControlType.Allow));
rs.SetOwner(new NTAccount("Administrators"));
return LocalMachine.CreateSubKey(post, RegistryKeyPermissionCheck.ReadWriteSubTree, rs);

任何想法将不胜感激。 我也尝试过OpenSubKey请求写访问权限,但我无法获得密钥。

多谢你们。

我终于找到了解决方案。 您必须使用“ChangePermissions”打开密钥,然后更改自己的权限...然后重新打开密钥并完全控制以更改所有者。 这是如何做。

RegistryKey rk = LocalMachine.OpenSubKey(subkey, RegistryKeyPremissionsCheck.ReadWriteSubTree, RegistryRights.ChangePermissions | RegistryRights.ReadKey);//Get the registry key desired with ChangePermissions Rights.
RegistrySecurity rs = new RegistrySecurity();
rs.AddAccessRule(new RegistryAccessRule("Administrator", RegistryRights.FullControl, InheritanceFlags.ContainerInherit | InheritanceFlags.ObjectInherit, PropagationFlags.InheritOnly, AccessControlType.Allow));//Create access rule giving full control to the Administrator user.
rk.SetAccessControl(rs); //Apply the new access rule to this Registry Key.
rk = LocalMachine.OpenSubKey(subkey, RegistryKeyPremissionsCheck.ReadWriteSubTree, RegistryRights.FullControl); // Opens the key again with full control.
rs.SetOwner(new NTAccount("Administrator"));// Set the securitys owner to be Administrator
rk.SetAccessControl(rs);// Set the key with the changed permission so Administrator is now owner.

这适合我。 请让我知道这对你有没有用 :)

如果您没有以管理员身份登录或者您需要其他用户的权限,显然会将管理员更改为其他用户。

using System.Security;
using System.Security.AccessControl;
using System.Security.Principal;
using Microsoft.Win32;

首先必须使用权限FULL-ACCESS设置权限到子项

RegistryKey rkey = LocalMachine.OpenSubKey(_subKey, RegistryKeyPermissionCheck.ReadWriteSubTree, gistryRights.ChangePermissions);
if (rkey == null)
 throw new Exception("Not Open");
//-------
RegistrySecurity _registrySecurity =new RegistrySecurity();//Or rkey.GetAccessControl();
WindowsIdentity _windowsIdentity = System.Security.Principal.WindowsIdentity.GetCurrent();
RegistryAccessRule _accessRule = new RegistryAccessRule(_windowsIdentity.Name, RegistryRights.FullControl, InheritanceFlags.ObjectInherit | InheritanceFlags.ContainerInherit, PropagationFlags.None, AccessControlType.Allow);
_registrySecurity.AddAccessRule(_accessRule);
_registrySecurity.SetAccessRuleProtection(false, true);
 rkey.SetAccessControl(_registrySecurity);

//--------Now, Set owner

_registrySecurity.SetGroup(new NTAccount("Administrators"));  //This is optional
var SID = new System.Security.Principal.NTAccount("XXX\\Users");
_registrySecurity.SetOwner(SID);
rkey.SetAccessControl(_registrySecurity);

XXX:您的帐户名称

使用该代码运行应用程序时,右键单击exe并选择“以管理员身份运行”?

        RegistryKey rkey = Registry.LocalMachine.OpenSubKey(@"SOFTWARE\Norton\SecurityStatusSDK", RegistryKeyPermissionCheck.ReadWriteSubTree, RegistryRights.ChangePermissions);
        if (rkey == null)
            throw new Exception("Not Open");
        //-------
        RegistrySecurity _registrySecurity = new RegistrySecurity();//Or rkey.GetAccessControl();
        WindowsIdentity _windowsIdentity = System.Security.Principal.WindowsIdentity.GetCurrent();
        RegistryAccessRule _accessRule = new RegistryAccessRule(_windowsIdentity.Name, RegistryRights.FullControl, InheritanceFlags.ObjectInherit | InheritanceFlags.ContainerInherit, PropagationFlags.None, AccessControlType.Allow);
        _registrySecurity.AddAccessRule(_accessRule);
        _registrySecurity.SetAccessRuleProtection(false, true);
        try
        {
            rkey.SetAccessControl(_registrySecurity);// <---"Attempted to perform an unauthorized operation."
        }
        catch (UnauthorizedAccessException e)
        {

        }

        //--------Now, Set owner

        _registrySecurity.SetGroup(new NTAccount("Administrators"));  //This is optional
        var SID = new System.Security.Principal.NTAccount("XXX\\Users");
        _registrySecurity.SetOwner(SID);
        rkey.SetAccessControl(_registrySecurity);

我安装了Norton Internet Security

Microsoft Visual Studio 2015(管理员)

_subKey = SOFTWARE\\Wow6432Node\\Norton

rkey.SetAccessControl(_registrySecurity);-> “试图执行未经授权的操作。”

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM