请求的注册表访问权限不允许#2

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了请求的注册表访问权限不允许#2相关的知识,希望对你有一定的参考价值。

我最近一直在编写一个需要访问以下注册表项的应用程序:

HKLM SOFTWARE Wow6432Node 类 CLSID

出于某些奇怪的原因,我不允许在我测试的任何系统上访问此密钥。我正在使用管理权限以及介于两者之间的所有内容来尝试实现此目的。我搜索了前5个Google结果页面,但仍然显示为空。

注意事项: 1.我正在尝试删除的密钥可能包含也可能不包含子密钥,我已经彻底测试了“DeleteSubKey”和“DeleteSubKeyTree”。 2.我尝试过OpenSubKey(“Key”,True),虚假和真值仍然禁止我访问。 3.我也不允许访问非64位位置(HKLM Software Classes CLSID)。 我在XP,7和8上测试了这个.XP没有给我一个问题。 我收到的确切错误可以在下面找到:

不允许请求的注册表访问。 at Microsoft.Win32.RegistryKey.OpenSubKey(String name,Boolean writable)

请帮助我......这已经杀了我几天了。任何帮助是极大的赞赏。

答案
   Microsoft.Win32.RegistryKey m_RegEntry = Microsoft.Win32.Registry.LocalMachine;    
   m_RegEntry = m_RegEntry.OpenSubKey(@"SYSTEMCurrentControlSetControlClass{4D36E96D-E325-11CE-BFC1-08002BE10318}");
        //string 
        int i = 0;
        string[] m_szModemEntries = m_RegEntry.GetSubKeyNames();

这会将许多条目连接到设备连接到COM端口。以及我们不需要访问的“属性”条目。

下面我附上一个简单的代码来处理它。

            string[] m_szModem;
            Microsoft.Win32.RegistryKey m_RegEntry = Microsoft.Win32.Registry.LocalMachine;
            m_RegEntry = m_RegEntry.OpenSubKey(@"SYSTEMCurrentControlSetControlClass{4D36E96D-E325-11CE-BFC1-08002BE10318}");
            //string 
            int i = 0;
            string[] m_szModemEntries = m_RegEntry.GetSubKeyNames();
            m_szModem = new string[m_szModemEntries.Length];
            string m_szModemPort = null;
            string m_szModemName = null;
            foreach (string m_szModemEntry in m_szModemEntries)
            {
                if (!IsNumber(m_szModemEntry))
                {
                }
                else
                {
                    m_RegEntry.Close();
                    m_RegEntry = Microsoft.Win32.Registry.LocalMachine;
                    string m_szKeyName = @"SYSTEMCurrentControlSetControlClass{4D36E96D-E325-11CE-BFC1-08002BE10318}" + m_szModemEntry;
                    m_RegEntry = m_RegEntry.OpenSubKey(m_szKeyName);
                    m_szModemPort = m_RegEntry.GetValue("AttachedTo").ToString();
                    m_szModemName = m_RegEntry.GetValue("Model").ToString();
                    if (m_szModemName.Contains("<device name>"))
                    {
                        CommPort = m_szModemPort;
                        lbldevicename.Text = "Device connected!";
                        lbldevicename.ForeColor = Color.Green;
                        cmdProgram.Enabled = true;
                        DeviceConnected = true;
                        break;
                    }
                    CommPort = "";
                    cmdProgram.Enabled = false;
                    lbldevicename.Text = "Device not connected!";
                    lbldevicename.ForeColor = Color.Red;
                    DeviceConnected = false;
                }
            }

//和IsNumber函数

public Boolean IsNumber(String s)
    {
        foreach (Char ch in s)
        {
            if (!Char.IsDigit(ch)) return false;
        }
        return true;
    }
另一答案

您可能需要修改访问控制安全性。使用GetAccessControl获取注册表项的ACL,修改它,然后使用SetAccessControl保存它。

另一答案

这是我发现的一个没有管理员权限的解决方案:只需忽略“真正的”参数,它就会全部读完。为我工作!

另一答案

首次使用本地管理员帐户登录。然后运行regedit.exe并单击要编辑的注册表项。从“编辑”菜单中选择预设。检查相关用户的权限。

我猜相关帐户没有权限修改注册表项。

另一答案

在vb.net中,您可以使用它来访问密钥,然后再对其执行任何操作

x.GetAccessControl(System.Security.AccessControl.AccessControlSections.All)

其中x是任何reg。键

看到你的代码后,我尝试了这个,它的工作原理

  Dim r As Microsoft.Win32.RegistryKey = Microsoft.Win32.Registry.LocalMachine.OpenSubKey("SOFTWARE	est", Microsoft.Win32.RegistryKeyPermissionCheck.ReadWriteSubTree)    
           r.DeleteSubKey("subkey", True)
另一答案

在Visual Studio中添加app.manifest

添加项目然后搜索应用程序清单文件

然后替换它的开头直到这个

<assembly manifestVersion="1.0" xmlns="urn:schemas-microsoft-com:asm.v1">
<assemblyIdentity version="1.0.0.0" name="MyApplication.app"/>
<trustInfo xmlns="urn:schemas-microsoft-com:asm.v2">
<security>
<requestedPrivileges xmlns="urn:schemas-microsoft-com:asm.v3">
</requestedPrivileges>
</security>
</trustInfo>

以上是关于请求的注册表访问权限不允许#2的主要内容,如果未能解决你的问题,请参考以下文章

用户先前不允许后如何再次请求麦克风访问权限?

请求的注册表允许访问而没有安全漏洞

尝试使用模拟在远程计算机上运行 PowerShell 脚本时“不允许请求的注册表访问”

发布或管理权限不允许请求有读取权限 FACEBOOK SDK

如何阻止对网站的root访问权限,只允许带有路径的请求

片段中的请求权限不显示对话框