繁体   English   中英

写入LOCAL_MACHINE的权限

[英]Permission For writing to LOCAL_MACHINE

我制作了一个应用程序,允许Windows用户欺骗Mac地址。 它的工作原理是将“NetworkAdapter”:“00ff00ff00ff”键/值对添加到所选用户的注册表中。 问题是,每次应用程序尝试对Windows注册表进行更改时,Windows弹出一个警告对话框,例如:

在此输入图像描述

但是单击“继续”将成功添加注册表值,并且应用程序正常运行。 我可以在代码中做什么/或添加更改以使对话框消失或者我可以以更好的方式执行此操作? 该应用程序需要Admin Privileges这里是应用程序的git repo

这是方法:

public void SetMac(string macAddress)
{
    const string Name = @"SYSTEM\\CurrentControlSet\\Control\\Class\\{4D36E972-E325-11CE-BFC1-08002bE10318}";
    using (RegistryKey key0 = Registry.LocalMachine.OpenSubKey(Name, RegistryKeyPermissionCheck.ReadWriteSubTree, RegistryRights.FullControl))
    {

        string[] x = key0.GetSubKeyNames();
        foreach (string name in x)
        {
                var var1 = Registry.LocalMachine.OpenSubKey(Name,RegistryKeyPermissionCheck.ReadWriteSubTree,RegistryRights.FullControl);
                var v = var1.OpenSubKey(name, RegistryKeyPermissionCheck.ReadWriteSubTree, RegistryRights.FullControl);
                var z = v.GetValue("DriverDesc");
                if (comboBox1.Text == z.ToString() )
                {
                    v.SetValue("NetworkAddress",comboBox2.Text);
                    MessageBox.Show(z.ToString());
                }
                v.Close();
                var1.Close();
        }
        key0.Close();
    }
}

您需要在提升的权限下运行您的应用程序,请参阅不允许请求的注册表访问

这里的问题是用户没有打开目标密钥进行写入的权限。 正如abatishchev已经建议的那样,您需要运行提升的应用程序,以便在执行代码时用户实际拥有Administrators组成员身份。

这看起来像CAS权限错误的原因是RegistryKey.OpenSubKey方法中的设计缺陷。 当由于用户权限不足而无法打开目标密钥时,它应该抛出UnauthorizedAccessException,但它实际上会抛出SecurityException。 问题最终似乎是由于缺乏CAS权限,而实际上是用户,而不是代码,缺乏编辑密钥的权限。

暂无
暂无

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

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