Разрешение на запись в LOCAL_MACHINE - PullRequest
3 голосов
/ 29 ноября 2011

Я сделал приложение, которое позволяет пользователям 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 ]

2 голосов
/ 29 ноября 2011

Вам необходимо запустить ваше приложение с повышенными привилегиями, см. Запрашиваемый доступ к реестру запрещен .

0 голосов
/ 29 ноября 2011

Проблема в том, что у пользователя нет прав на открытие целевого ключа для записи.Как уже предлагал Абатищев, необходимо запустить приложение с повышенными правами, чтобы пользователь фактически имел членство в группе администраторов при выполнении кода.

Причина, по которой это похоже на ошибку разрешения CAS, заключается в недостатке проектаRegistryKey.OpenSubKey метод.Следует генерировать исключение UnauthorizedAccessException, когда целевой ключ не может быть открыт для записи из-за неадекватных разрешений пользователя, но вместо этого фактически выдается исключение SecurityException.В конечном итоге проблема возникает из-за недостаточных разрешений CAS, когда пользователю, а не коду, не хватает прав для редактирования ключа.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...