Удалить устойчивый ключ реестра

Описание

Один драйвер оставил беспорядок в реестре (даже когда я удалил его из системы). Если я проверю настройки безопасности, в «Имена групп или пользователей» ничего не будет отображаться. И когда я проверяю владельца, он показывает только «Невозможно отобразить текущего владельца». Когда я хочу удалить ключи реестра, я должен:

  1. Возьмите на себя ответственность.

  2. Добавить группу.

  3. Удалить ключ.

Проблема в том, что в каждом реестре есть несколько подразделов, и мне приходится повторять процесс для каждого ключа. Параметр «Наследование» не работает в редакторе реестра. И да, я запускаю редактор реестра в режиме администратора.

Проблема

Я хотел написать простой код на C #, который бы зацикливал и удалял все ключи. Я нашел несколько примеров кода, но в моем случае любой вызов OpenSubKey завершился ошибкой: System.Security.SecurityException: запрошенный доступ к реестру не разрешен. Как я могу изменить владельца при любом вызове OpenSubKey функция выйдет из строя? Есть ли другая команда, с помощью которой я могу заявить о праве собственности, а затем удалить раздел реестра?

Спасибо за поддержку


person UrosP    schedule 10.03.2013    source источник
comment
Вы должны запустить свое приложение от имени администратора. См. Этот вопрос: stackoverflow.com/questions/2818179/   -  person Alina B.    schedule 10.03.2013
comment
Вы нашли вескую причину не писать программу для этого. Дело не в том, что вы не можете заставить его работать, это так опасно отладка. Иногда бывает с лучшими из нас, например Полом ДиЛашией, прокрутите до Terrifying Анекдот из ада.   -  person Hans Passant    schedule 10.03.2013


Ответы (3)


Так же, как вы знали, что нужно запускать редактор реестра от имени администратора, чтобы гарантировать, что у вас будут соответствующие привилегии для изменения / удаления ключей реестра, вам необходимо сделать то же самое для вашего приложения C #.

Поскольку вы забыли это сделать, System.Security.SecurityException выбрасывается как напоминание. Как говорится в сообщении об исключении, у вас нет прав на изменение / удаление ключей реестра.

Чтобы решить эту проблему, вы должны запустить приложение C # с правами администратора. Вы можете сделать это вручную или добавьте в приложение манифест, который заставит его автоматически запрашивать права администратора.

person CodeTherapist    schedule 10.03.2013

Это половина ответа.

В этой статье базы знаний объясняется, как стать владельцем ключа, которым вы не являетесь. иметь доступ к.

Короче говоря, вам нужно включить привилегию «Взять владение» и открыть ключ с WRITE_OWNER доступом. Затем вы можете установить владельца.

Обратите внимание, что это работает только тогда, когда вы запускаете свой код от имени администратора.

Однако я не знаю, можете ли вы сделать это на C # с помощью встроенных функций или вам нужно будет использовать взаимодействие для вызова собственных API-интерфейсов. В последнем случае, вероятно, будет быстрее использовать C / C ++.

Или вы можете использовать инструмент SubInAcl. Он может владеть файлами, ключами реестра и т. Д.

person arx    schedule 10.03.2013
comment
Это меньше половины ответа. Как и в статье базы знаний, в которой вы связали заметки в самом начале, вы не можете получить дескриптор ключа, если у вас нет прав доступа. И вы не можете стать владельцем без ручки. Так что ты все еще нигде. Было бы огромной дырой в безопасности, если бы вы могли стать владельцем чего-либо, не имея предварительно прав доступа к этому. - person Cody Gray; 10.03.2013
comment
Какие? В статье говорится, что обычно невозможно получить дескриптор, а затем говорится, что решение этой проблемы ... Администраторы могут всегда стать владельцем, даже если у них нет доступа. Это центральное место в модели безопасности Windows. В статье базы знаний описано, как это сделать. Прочтите еще раз. - person arx; 10.03.2013
comment
Согласился быть администратором. В этом весь смысл административных привилегий. Проблема в том, что он не запускает приложение с правами администратора. - person Cody Gray; 10.03.2013
comment
Он (или она) говорит, что у него нет доступа к ключам, даже если он запускает regedit от имени администратора. У админа нет разрешений на ключи. Так что его приложение тоже не будет работать как администратор. Если только он не предпримет особых действий, чтобы получить ключи. Вот что я описываю. - person arx; 10.03.2013
comment
На самом деле решений для этого много. В любом случае у вас будет запрос пользователю или вы запустите свою программу с повышенными привилегиями. - person Stephan Unrau; 31.03.2014
comment
@StephanUnrau: Расскажи! - person arx; 02.04.2014

Чтобы было ясно, вы щелкаете правой кнопкой мыши и запускаете от имени администратора, когда говорите о запуске в режиме администратора - это повышенные привилегии, и этого не произойдет простым двойным щелчком. Даже если вы войдете в систему как администратор, вы должны щелкнуть правой кнопкой мыши и запустить как администратор, чтобы получить повышенные права.

Мою проблему я решил, написав CURRENT_USER, а не LOCAL_MACHINE, теперь я вижу, что ваша проблема фактически не решена повышением прав и предоставлением прав. Ваши дескрипторы безопасности, хранящиеся в реестре, вероятно, были повреждены из-за записи мусора из драйвера самоволки или чего-то еще. Это означает, что вы не сможете многое сделать, в том числе исправить себя или нового пользователя.

Вы также не сможете запустить CCleaner, пока мы не устраним проблему с разрешениями. Однако вы можете загрузиться в безопасном режиме и запустить sfc / scannow и chkdsk - sfc исправил проблему с одним человеком, аналогичную, но это может быть рискованно, поэтому делайте это на свой страх и риск, но это выглядит многообещающе, и я, вероятно, уже сделал бы сканирование, прежде чем попробовал что-либо еще . Safemode + sfc / scannow

Я бы сделал резервную копию данных и стер их как можно скорее. Я нашел инструкции для различных ОС по вопросу о поврежденных дескрипторах безопасности - для Win 8 и 7, поэтому у вас не должно быть проблем и похоже, что для них потребуется безопасный режим.

Удачи!

person Stephan Unrau    schedule 20.04.2014