Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

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

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

Купить рекламу на форуме - 42 тыс руб за месяц

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

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

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

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

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

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

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

Попробовал использовать 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, 22:57   #5
waleri
Старожил
 
Регистрация: 13.07.2012
Сообщений: 6,493
По умолчанию

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

Кроме того, вручную перечислять ключи смысла нет - у 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; 20.12.2017 в 23:00.
waleri вне форума Ответить с цитированием
Старый 30.12.2017, 18:19   #6
zastylow
 
Регистрация: 08.03.2013
Сообщений: 6
По умолчанию

Цель, как я уже говорил, - это удалить некоторый куст в реестре со всеми подключами. Ключи имеют ограниченный доступ - доступ к одним разрешен администраторам, к другим, как выяснилось, только системе (вот с ними и возникла проблема).
С 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, 21:44   #7
waleri
Старожил
 
Регистрация: 13.07.2012
Сообщений: 6,493
По умолчанию

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


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Не удаляется запись davidoff_72 PHP 2 12.01.2016 14: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 10:49