C # - Редактирование значения реестра не работает в зависимости от используемого компьютера - PullRequest
0 голосов
/ 04 июля 2018

У меня возникли проблемы с изменением значения реестра с помощью C #.

Вот проблема: я пытаюсь отключить соединение через Windows Логин и пароль с помощью C #.

Я добавил значение реестра в реестр, чтобы сделать его доступным или нет, в зависимости от состояния флажка.

У меня он работал на виртуальной машине Windows 10, однако при использовании его на Windows Server 2012 я получаю следующее исключение:

"Доступ к разделу реестра '...' запрещен."

Вот мой код:

            System.Security.AccessControl.RegistrySecurity userSecurity = new System.Security.AccessControl.RegistrySecurity();
            System.Security.AccessControl.RegistryAccessRule userRule = new System.Security.AccessControl.RegistryAccessRule("Everyone", System.Security.AccessControl.RegistryRights.FullControl, System.Security.AccessControl.AccessControlType.Allow);
            userSecurity.AddAccessRule(userRule);

            using (RegistryKey key = Registry.LocalMachine.CreateSubKey(@"SOFTWARE\Microsoft\Windows\CurrentVersion\Authentication\Credential Providers" + "\\" + @"{60b78e88-ead8-445c-9cfd-0b87f74ea6cd}", RegistryKeyPermissionCheck.ReadWriteSubTree, userSecurity))
            {
                key.OpenSubKey(Const.REG_HKLM + @"SOFTWARE\Microsoft\Windows\CurrentVersion\Authentication\Credential Providers" + "\\" + @"{60b78e88-ead8-445c-9cfd-0b87f74ea6cd}", true);

                if (!paramAuthentication.IsCkbLoginPwChecked())
                {
                    key.SetValue("Disabled", 1, RegistryValueKind.DWord);
                }
                else
                {
                    key.SetValue("Disabled", 0, RegistryValueKind.DWord);
                }
                key.Close();
            }

И многочисленные решения, которые я нашел на форумах:

1) _ Запуск от имени администратора -> Не работает

2) _ Вручную измените разрешения соответствующего подраздела -> Получена ошибка «Невозможно сохранить изменения разрешений в« ... ». Доступ запрещен.

3) _ Определите текущего пользователя как владельца ключа -> я еще не пробовал. Но некоторые моменты меня беспокоят: Во-первых, эта функция должна быть доступна для всех пользователей. Кроме того, я создаю это значение ключа через право реестра FullControl. И, наконец, почему он должен работать на Windows Server, в то время как он уже работает на Windows 10

В этом я определенно что-то упустил. Что именно означает «получить право владения ключом»?

Любая идея или урок, чтобы предоставить мне?

1 Ответ

0 голосов
/ 05 июля 2018

Думаю, я нашел это!

Это был пункт 2 (и на самом деле тоже 3).

Дело в том, что по умолчанию владелец ключа кажется другим (в зависимости от версии Windows? Или я просто случайно изменил его?)

Хотя основным владельцем был SYSTEM на виртуальной машине Windows 10, на Windows Server это был TrustedInstaller. Мне не разрешили изменить разрешения под этим владельцем. Изменение его для текущего пользователя позволило мне изменить разрешения и потенциально добавить новый ключ.

В настоящее время я пытаюсь внести это изменение с помощью C #.

Остается два вопроса:

Какого владельца выбрать, чтобы он был доступен для всех пользователей?

Есть ли возможные проблемы с безопасностью при его изменении?

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