写入LOCAL_MACHINE的权限

时间:2011-11-29 13:08:21

标签: c# windows security exception-handling registry

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

enter image description here

但是单击“继续”将成功添加注册表值,并且应用程序正常运行。 我可以在代码中做什么/或添加更改以使对话框消失或者我可以以更好的方式执行此操作? 该应用需要管理员权限 这是应用的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();
    }
}

2 个答案:

答案 0 :(得分:2)

您需要在提升的权限下运行您的应用,请参阅Requested registry access is not allowed

答案 1 :(得分:0)

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

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