PDA

Показать полную графическую версию : [решено] Сменить владельца ключа реестра (subinacl)


Anton04
03-01-2018, 02:02
Пытаюсь реализовать задачу по добавлению некоторых пунктов в меню элемента Windows 10 "Этот компьютер".

1. Хочу сменить владельца на ветку реестра "HKEY_CLASSES_ROOT\CLSID\{20D04FE0-3AEA-1069-A2D8-08002B30309D}\shell".
2. Дать полный доступ группе "Администраторы" на эту же ветку.
3. Внести нужные изменения.
4. Вернуть значения доступа ветки реестра и владельца в исходное состояние.

Вот на первом пункте возникла накладка...

При выполнении команды в cmd (запущенной от имени "Администратора":
subinacl /keyreg "HKEY_CLASSES_ROOT\CLSID\{20D04FE0-3AEA-1069-A2D8-08002B30309D}\shell" /setowner=Администраторы /grant=Администраторы=f

получаю результат "...RegSetKeySecurity Error: 5 Отказано в доступе".

Почему не срабатывает данная команда я не понял. :dont-know :durak:

Petya V4sechkin
03-01-2018, 09:33
Anton04, а если двумя командами, сначала /setowner, затем /grant.

Anton04
03-01-2018, 14:26
Petya V4sechkin,

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

Iska
03-01-2018, 14:47
Попробовал, ничего не поменялось. »
Э… По сравнению с чем «ничего не поменялось»? С этим:
получаю результат "...RegSetKeySecurity Error: 5 Отказано в доступе". »
?! Ибо на скриншоте я вижу, что владелец сменён, права назначены.

Anton04
03-01-2018, 15:50
Э… По сравнению с чем «ничего не поменялось»? »

Не поменялся владелец, проверяю визуально в редакторе реестра.

Ибо на скриншоте я вижу, что владелец сменён, права назначены. »

Я это тоже вижу, но по факту владелец ветки остался прежним и права тоже. :dont-know

Petya V4sechkin
03-01-2018, 16:45
Anton04, а система у вас 64-битная?
Интересно, работает ли subinacl корректно в 64-битной системе.

Iska
03-01-2018, 17:35
Интересно, работает ли subinacl корректно в 64-битной системе. »
Оно самое:
https://i.imgur.com/thm7YPK.png

Petya V4sechkin
03-01-2018, 19:39
Iska, а почему выдаёт NAME NOT FOUND?

Anton04, поскольку 64-битной версии subinacl нет, можете использовать другую утилиту, например SetACL.exe (https://helgeklein.com/setacl/documentation/command-line-version-setacl-exe/).

Anton04
03-01-2018, 20:00
Интересно, работает ли subinacl корректно в 64-битной системе. »

Например NTFS разрешения на файлы в 64-bit`ной системе subinacl редактирует корректно.

поскольку 64-битной версии subinacl нет, можете использовать другую утилиту, например SetACL.exe. »

Об данной утилите я знаю, просто хотелось использовать относительно стандартную утилиту от MS.

Тогда вопрос, а что в данном случае рекомендует использовать MS в командной строке? Или у MS ответ один - PowerShell ?

Iska
03-01-2018, 20:09
Iska, а почему выдаёт NAME NOT FOUND? »
Registry Keys Affected by WOW64 (Windows) (https://msdn.microsoft.com/ru-ru/library/windows/desktop/aa384253(v=vs.85).aspx)

Потому, что в перенаправленном …\Wow6432Node\… нет такого раздела. Для x64 приложений указанный раздел напрямую (без рефлексии на Wow6432Node) виден и доступен. (На всякий случай, по скриншоту — я для экспериментов специально создавал раздел с GUID, отличающимся от существующего последней буквой, «e» вместо «d»; с ним и игрался) И как я понимаю, извне это перенаправление обращений в реестр для x86-приложений под x64 ОС никак не отключить.

Например NTFS разрешения на файлы в 64-bit`ной системе subinacl редактирует корректно. »
Вот не думаю.

Тогда вопрос, а что в данном случае рекомендует использовать MS в командной строке? Или у MS ответ один - PowerShell ? »
Уже упомянутый SetACL.exe и, не поверите — старичка Regini.exe (https://technet.microsoft.com/ru-ru/library/hh875566(v=ws.11).aspx).

Petya V4sechkin
03-01-2018, 20:19
Например NTFS разрешения на файлы в 64-bit`ной системе subinacl редактирует корректно.
Сейчас проверил: в папке System32 ничего он не редактирует (потому что система в SysWOW64 перенаправляет). Хотя можно использовать псевдоним SysNative.

я для экспериментов специально создавал раздел с GUID, отличающимся от существующего последней буквой, «e» вместо «d»; с ним и игрался
А, разницу в одну букву я не заметил :)
Просто исходный раздел есть и в Wow6432Node тоже.

Anton04
03-01-2018, 20:24
Вот не думаю. »

Проверенно ещё на 64-bit`ной Win7, если в Win10 ничего принципиального не поменяли, то и там должно работать.

не поверите — старичка Regini.exe. »

Почему не поверю, ещё как поверю! Просто хотелось использовать один инструмент для редактирования разрешения и в NTFS и в реестре.

P.S. Спасибо, буду смотреть в сторону утилиты SetACL, может мне и подойдёт.

Сейчас проверил: в папке System32 ничего он не редактирует (потому что система в SysWOW64 перенаправляет). Хотя можно использовать псевдоним SysNative. »

Я делал разрешения для файлов и папок в каталогах "Program Files" и "Program Files (x86)" и там у меня всё срабатывает.

Petya V4sechkin
03-01-2018, 21:02
Anton04, для файловой системы перенаправление касается только папки %windir%\System32:
File System Redirector (https://msdn.microsoft.com/en-us/library/windows/desktop/aa384187(v=vs.85).aspx)

Iska
04-01-2018, 08:37
Просто исходный раздел есть и в Wow6432Node тоже. »
У меня (под Windows 7 x64), в HKCU — нет, в HKCR — есть (на скриншоте ошибка и там, и там из-за того, что я сам создавал раздел с чуть изменённым именем, как писал выше).

Там, конечно, уже чёрт голову сломит со всеми этими слияниями виртуальных разделов (HKCR) из частей отдельных кустов, динамических разделов, перекрестными символическими ссылками, перенаправлениями и рефлексиями… Сам, зачастую, начинаешь путаться.

Petya V4sechkin
04-01-2018, 10:47
в HKCU — нет
Разумеется, ведь изначально речь шла о HKCR и {20D04FE0-3AEA-1069-A2D8-08002B30309D}.
Я полагал, что это ясно из контекста.
Ладно, проехали :)

Казбек
04-01-2018, 12:32
You will have to use REGINI.EXE to set registry permissions and CACLS for files. There is no support for SUBINACL under 64 bit O/S's
Davis McCarn (http://www.computer-help.net)

How to change Registry Permissions with RegIni.exe (VBScript) (https://blogs.msdn.microsoft.com/alejacma/2008/03/11/how-to-change-registry-permissions-with-regini-exe-vbscript/)

Vadikan
10-01-2018, 01:30
Про subinacl интересно, но задача изначально содержала ненужные условия (пункты 1, 2, 4). Всё проще - от http://www.outsidethebox.ms/10539/#_Toc277326816 и до конца

Anton04
10-01-2018, 11:07
Vadikan,

Хм... то же интересный подход, правда я мыслил шире, т.к. подобных изменений может возникнуть масса в любых частях реестра и изначально не известно на какие ветки реестра даны те или иные разрешения и чтоб каждый раз не проверять обратился именно к процессу смены владельца т.п. Как правильно сказано не всегда учётная запись "Система" или "TrustedInstaller" имеет полный доступ к тем или иным веткам реестра.
Это к тому, что за ранее не известно какие разрешения MS вдруг поменяет, а в теории данные команды должны срабатывать в 99 % случаев.

Не много не понятно будет ли работать такая вот команда: psexec -i -s regedit /s "c:\test.reg" или tshell.exe regedit /s "c:\test.reg"

P.S. Благодарю за идею. :hi:

Vadikan
10-01-2018, 11:37
Anton04, в вашем варианте чтобы вернуть разрешения назад, все равно нужно знать, кто был владельцем. В принципе, такие операции нужны крайне редко, поэтому какие-то супер-универсальные решения не нужны.

Anton04
10-01-2018, 14:09
в вашем варианте чтобы вернуть разрешения назад, все равно нужно знать, кто был владельцем. »

Ну да, что есть, то есть...
Будем тестить, то что есть psexec и Trusted Shell.

P.S. Очень жаль, что у MS нету решения из коробки по поводу внесения изменений в реестр от имени системы или TrustedInstaller (powershell я не беру во внимание, хоть и знаю что он хорош).




© OSzone.net 2001-2012