Форум программистов
 
Контакты: о проблемах с регистрацией, почтой и по другим вопросам пишите сюда - alarforum@yandex.ru, проверяйте папку спам! Обязательно пройдите активизацию e-mail.

Вернуться   Форум программистов > Низкоуровневое программирование > Win Api
Регистрация

Восстановить пароль
Повторная активизация e-mail

Ответ
 
Опции темы
Старый 15.12.2017, 23:04   #1
zastylow
 
Регистрация: 08.03.2013
Сообщений: 6
Репутация: 10
Вопрос Не удаляется ключ в реестре

Задача: удалить некоторый куст в реестре Windows со всеми подключами. Осложняется задача тем, что ключи защищенные, то есть доступ к ним ограничен. Частично решение я нашел - добавив приложению права администратора. Благодаря этому удалось получить доступ к защищенным ключам и удалить почти все из них, но не все. Некоторые ключи все же не удаляются, не знаю почему. Их не удается ни открыть, ни удалить (с помощью regedit или программно), ни добавить к ним разрешения. Может кто-то сталкивался с этим и подскажет в какую сторону копать. Пример такого ключа в реестре: HKEY_LOCAL_MACHINE\System\ControlSe t001\Enum\USB\VID_058F&PID_6387\240 2CC07\Properties.
zastylow вне форума   Ответить с цитированием
Старый 15.12.2017, 23:36   #2
waleri
Профессионал
 
Регистрация: 13.07.2012
Адрес: Нижний Новгород
Сообщений: 5,296
Репутация: 1617
По умолчанию

Цитата:
Сообщение от zastylow Посмотреть сообщение
не удаляются, не знаю почему
Потому что для них не прописаны права доступа для администратора.
Нужно будет самому менять права доступа, причем может понадобиться менять и владельца.

Поищите утилитку setacl.exe - с ее помощью можно будет посмотреть где какие права прописаны.

Если еще не испугались - читайте функцию SetNamedSecurityInfo()

Последний раз редактировалось waleri; 15.12.2017 в 23:38.
waleri вне форума   Ответить с цитированием
Старый 16.12.2017, 14:14   #3
zastylow
 
Регистрация: 08.03.2013
Сообщений: 6
Репутация: 10
Сообщение

Спасибо! Попробую разобраться...
zastylow вне форума   Ответить с цитированием
Старый 20.12.2017, 22:34   #4
zastylow
 
Регистрация: 08.03.2013
Сообщений: 6
Репутация: 10
По умолчанию

Попробовал использовать SetACL.exe и командлеты Get-Acl, Set-Acl в PowerShell, ни первое, ни второе не помогло.

1. Код BAT-файла, использующего SetACL:
Код:

@echo off

echo %CD%

setacl.exe -on "HKEY_LOCAL_MACHINE\SYSTEM\ControlSet001\Enum\USB" -ot reg -actn setowner -ownr "n:Администраторы"
echo ************************

setacl.exe -on "HKEY_LOCAL_MACHINE\SYSTEM\ControlSet001\Enum\USB\VID_058F&PID_6387" -ot reg -actn setowner -ownr "n:Администраторы"
echo ************************

setacl.exe -on "HKEY_LOCAL_MACHINE\SYSTEM\ControlSet001\Enum\USB\VID_058F&PID_6387\2402CC07" -ot reg -actn setowner -ownr "n:Администраторы"
echo ************************

setacl.exe -on "HKEY_LOCAL_MACHINE\SYSTEM\ControlSet001\Enum\USB\VID_058F&PID_6387\2402CC07\LogConf" -ot reg -actn setowner -ownr "n:Администраторы"
echo ************************

reg delete "HKEY_LOCAL_MACHINE\SYSTEM\ControlSet001\Enum\USB\VID_058F&PID_6387\2402CC07\LogConf" /f

setacl.exe -on "HKEY_LOCAL_MACHINE\SYSTEM\ControlSet001\Enum\USB\VID_058F&PID_6387\2402CC07\Properties" -ot reg -actn setowner -ownr "n:Администраторы"
echo ************************

reg delete "HKEY_LOCAL_MACHINE\SYSTEM\ControlSet001\Enum\USB\VID_058F&PID_6387\2402CC07\Properties" /f


setacl.exe -on "HKEY_LOCAL_MACHINE\SYSTEM\ControlSet001\Enum\USB\VID_058F&PID_6387\2402CC07\LogConf" -ot reg -actn clear -clr dacl
echo ************************
reg delete "HKEY_LOCAL_MACHINE\SYSTEM\ControlSet001\Enum\USB\VID_058F&PID_6387\2402CC07\LogConf" /f


setacl.exe -on "HKEY_LOCAL_MACHINE\SYSTEM\ControlSet001\Enum\USB" -ot reg -actn ace -ace "n:Администраторы;p:full"
echo ************************

Результат:
SetAcl.jpg

Пытаюсь установить владельца ключа, для некоторых ключей это удается, а для тех самых защищенных ключей - нет.

2. Тоже самое в случае Get-Acl, Set-Acl.
Код скрипта:
Код:

Get-Acl -Path "HKLM:\SYSTEM\ControlSet001\Enum\USB\VID_058F&PID_6387\2402CC07\LogConf" | Format-List

Get-Acl -Path "HKLM:\SYSTEM\ControlSet001\Enum\USB\VID_058F&PID_6387\2402CC07\Properties" | Format-List

$ACL = Get-Acl -Path "HKLM:\SYSTEM\ControlSet001\Enum\USB\VID_058F&PID_6387\2402CC07\LogConf"

$ACL| Format-List

Set-Acl -Path "HKLM:\SYSTEM\ControlSet001\Enum\USB\VID_058F&PID_6387\2402CC07\LogConf" -AclObject $ACL

Результат:
PowerShell.jpg

У ключа LogConf удалось извлечь списки ACL, у ключа Properties - нет, но при этом ключу LogConf не удалось установить разрешения.

Может подскажите в какою сторону можно еще покопать?
zastylow вне форума   Ответить с цитированием
Старый 20.12.2017, 23:57   #5
waleri
Профессионал
 
Регистрация: 13.07.2012
Адрес: Нижний Новгород
Сообщений: 5,296
Репутация: 1617
По умолчанию

Антивирус?
Правда они обычно свои ключи блокируют...

Кроме того, вручную перечислять ключи смысла нет - у setacl есть опции применения к под-объектам.


Что выводит
Код:

setacl.exe -on "HKEY_LOCAL_MACHINE\SYSTEM\ControlSet001\Enum\USB\VID_058F&PID_6387\2402CC07\Properties" -ot reg -actn list -lst "w:o"

Собственно, какова конечная цель?

Последний раз редактировалось waleri; 21.12.2017 в 00:00.
waleri вне форума   Ответить с цитированием
Старый 30.12.2017, 19:19   #6
zastylow
 
Регистрация: 08.03.2013
Сообщений: 6
Репутация: 10
По умолчанию

Цель, как я уже говорил, - это удалить некоторый куст в реестре со всеми подключами. Ключи имеют ограниченный доступ - доступ к одним разрешен администраторам, к другим, как выяснилось, только системе (вот с ними и возникла проблема).
С setacl немного разобрался. С помощью конструкции
Код:

setacl.exe -on "HKEY_LOCAL_MACHINE\SYSTEM\ControlSet001\Enum\USB\VID_058F&PID_6387\2402CC07\Properties" -ot reg -actn list -lst "w:d,s,o,g;i:y"

удалось посмотреть владельца ключа, список разрешений и групп.
А с помощью двух команд
Код:

setacl.exe -on "HKEY_LOCAL_MACHINE\SYSTEM\ControlSet001\Enum\USB\VID_058F&PID_6387\47F0FC58\Properties" -ot reg -actn setowner -ownr "n:zastyloff" -rec yes
setacl.exe -on "HKEY_LOCAL_MACHINE\SYSTEM\ControlSet001\Enum\USB\VID_058F&PID_6387\47F0FC58\Properties" -ot reg -actn ace -ace "n:zastyloff;p:full"

удалось, соответственно, поменять владельца ключа и добавить нужного пользователя с полными правами в разрешения ключа. При чем к первой команде пришлось добавить параметр рекурсии (-rec yes), для выполнения аналогичных действий для подключей. После этого ключ удалось удалить. Теперь хочу тоже самое попробовать проделать программно.
zastylow вне форума   Ответить с цитированием
Старый 30.12.2017, 22:44   #7
waleri
Профессионал
 
Регистрация: 13.07.2012
Адрес: Нижний Новгород
Сообщений: 5,296
Репутация: 1617
По умолчанию

Ну так SetNamedSecurityInfo() вам в руки...
waleri вне форума   Ответить с цитированием
Ответ

Опции темы

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Не удаляется запись davidoff_72 PHP 2 12.01.2016 15:59
Где в реестре ключ управляющий Представлением файлов/папок в проводнике XP? DBEER Win Api 6 29.09.2014 13:40
Не удаляется элемент Praud Помощь студентам 1 18.03.2014 11:33
Как проверить сущ. ли ключ в реестре?(делфи) zotox Помощь студентам 1 05.04.2009 15:00
Не удаляется папка. Kashp Операционные системы общие вопросы 9 31.01.2008 11:49


09:35.


Powered by vBulletin® Version 3.8.8 Beta 2
Copyright ©2000 - 2018, Jelsoft Enterprises Ltd.

RusProfile.ru


Справочник российских юридических лиц и организаций.
Проекты отопления, пеллетные котлы, бойлеры, радиаторы
интернет магазин respective.ru