Реестр Windows Основы работы с реестром - синтаксис, структура reg-файла.

Кирилл

Команда форума
Администратор
Ассоциация VN
Сообщения
14,053
Решения
2
Реакции
5,746
оглавление:

Основы работы с реестром​

1) Что такое реестр?
2) Синтаксис, структура, назначение элементов реестра.
3) Редактор реестра (regedit.exe)
4) Синтаксис, структура reg-файла.
5) Утилита reg.exe





Синтаксис, структура reg-файла


____________________
что такое reg-файл?
это файл, в себе информацию, для взаимодействия с элементами реестра.

Как создать REG-файл?


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


___________________________________________________

Как создать/восстановить резервную копию реестра Windows штатными средствами ОС Windows ?
Резервное копирование и восстановление системного реестра с помощью стороннего ПО
Автоматическое создание резервной копии реестра или ABR - Автобэкап реестра
___________________________________________________

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

Итак, самый распространенный инструмент для работы с реестром-это редактор реестра.- утилита regedit.


С его помощью мы можем выполнять все необходимые операции.
Создание ,изменение, сохранение, импорт, экспорт ,удаление и прочие операции с объектами системного реестра.

Попробуем?
Давайте создадим собственную команду в контекстном меню.
Для этого откроем раздел
Код:
HKEY_CLASSES_ROOT\DesktopBackground\Shell

далее правой кнопкой мыши-создать раздел.
1714826323827.png


создаем раздел под именем name.
в нем еще один раздел-command.


В разделе name-создадим строковой параметр -reg_sz
и задаем ему любое значение-например
Код:
моя первая фигня...
Моя больная фантазия захотела это имя, вы вольны выбрать свое...

А в разделе command создаем аналогичный строковой параметр с именем выполняемой команды.
Мне в голову взбрело regedit.exe
В итоге мы получили при нажатии правой кнопкой мыши вот такую команду контекстного меню:

Нажимая мы вызываем редактор реестра...

Можно упростить себе задачу, воспользовавшись твиком реестра.

Да...
Можно не ковыряться в редакторе реестра, а просто внести в реестр нужную информацию используя файл с расширением .reg

Как это выглядит на практике?

Если все описанные операции записать в reg-файл,то получим следующее:
Код:
Windows Registry Editor Version 5.00

[HKEY_CLASSES_ROOT\DesktopBackground\Shell\name]
@="моя первая фигня..."

[HKEY_CLASSES_ROOT\DesktopBackground\Shell\name\command]
@="regedit.exe"
Для создания reg файла подойдет любой текстовый редактор.
Я взял блокнот.
Итак, создаем новый тестовый документ.
В предыдущем примере мы добавляли новые параметры и разделы в реестр.
Давайте теперь удалим их.
Для этого в текстовом документе вводим:
Код:
Windows Registry Editor Version 5.00

[HKEY_CLASSES_ROOT\DesktopBackground\Shell\name]
@="моя первая фигня..."=-

[-HKEY_CLASSES_ROOT\DesktopBackground\Shell\name\command]
@="regedit.exe"
Сохранить как-все файлы-имя с расширением .reg (например tweak.reg)
По полученному файлу двойной клик, применить, ок.
Заглянем в реестр-видим,что раздел command удален, а в разделе name удален параметр, который мы прежде создали.
вот сейчас пора разобраться с синтаксисом.

1)
Код:
Windows Registry Editor Version 5.00
обязательная строчка-указывает версию редактора.
Версия редактора реестра — либо «Windows Registry Editor Version 5.00» для Windows 2000, Windows XP и Windows Server 2003, либо «REGEDIT4» (буквы обязательно заглавные) для Windows 98 и Windows NT 4.0. Заголовок REGEDIT4 можно также использовать на компьютерах с системой Windows 2000, Windows XP и Windows Server 2003.

2) Следующая строка должна быть пустой.

3) Далее идет указание пути к разделу.
в нашем случае раздел-name
Код:
[HKEY_CLASSES_ROOT\DesktopBackground\Shell\name]
Примечание:
Если раздела не существует, то он будет создан.
Если он есть-то в него будут добавлены параметры или изменения, содержащиеся в твике.
Другими словами элемент будет перезаписан.

4) Имя параметра— это имя импортируемого параметра данных. Если элемент данных файла отсутствует в реестре, REG-файл добавляет его (со значением). Если элемент данных существует, значение в REG-файле переписывает существующее значение. Имя элемента данных заключается в кавычки. За именем элемента данных следует знак равенства (=).

5) Значение, тип параметра

  • REG_BINARY шестнадцатеричное
  • REG_DWORD dword
  • REG_EXPAND_SZ шестнадцатеричное
  • REG_MULTI_SZ шестнадцатеричное

Формат записи для их добавления несколько другой. Для параметров типа DWORD используется строка
"Имяпараметраданных"="dword:Значениеданных1" Здесь "Имяпараметра_данных" - имя параметра, dword - указывает на тип этого параметра (буквы должны быть обязательно маленькие!) и после двоеточия следует значение из восьми цифр в шестнадцатеричном (!) формате. Однако большинство параметров DWORD имеют значение либо 0, либо 1, значит, следует написать соответственно либо 00000000, либо 00000001 вместо значков ХХХХХХХХ. Пробелы в строке не допускаются. Для добавления двоичного параметра формат записи несколько иной:
"Имяпараметраданных"=hex:XX,XX,XX,....После знака "=" идет hex, т.е. указывается, что это будет двоичный параметр, затем идут шестнадцатеричные числа, отделенные запятой. Например, если необходимо добавить двоичный параметр равный "be 00 00 00", то следует писать строку
"Имяпараметраданных"=hex:be,00,00,00В реестре существуют параметры "По умолчанию" ("Default"). Чтобы присвоить им какое-то значение через reg-файл, надо добавить такую строку:
@="Типданных:Значениеданных "Здесь значок @ показывает, что присваивается значение параметра "По умолчанию". Он не заключается в кавычки.

Примечание 1: Можно ввести несколько строк элементов данных для одного пути реестра. После того, как создан такой файл, следует просто запустить его как обычную программу, будет выдан запрос о необходимости провести изменения в реестре, и после положительного ответа информация из файла будет импортирована. О результатах импортирования Windows сообщит в появившемся после этого окне.

Примечание 2: Windows 2000/XP обладает обратной совместимостью и может обрабатывать файлы, созданные в Windows 9x. Но если был экспортирован файл в Windows XP и перенесен на Windows 9x, то необходимо вручную изменить первую строчку на REGEDIT4.


Если мы создаем обычный строковой параметр-то его символ в твике мы видим как знак @.
Попробуйте заключить этот знак в кавычки и он превратится в имя параметра.

Так.
А что за минусы я поставил при создании твика?
Если мы желаем удалить раздел то ставим минус перед значением адреса раздела.
Если надо удалить параметр-ставим минус после знака равно за параметром.
Все видно на примере.
Однако в контекстном меню у вас остался не рабочий пункт.
Вот и попробуйте убрать его твиком.
Кстати.
Если вы захотите применить множество твиков, то замучаетесь нажимать ок.
Тогда вы можете применить твик через командную строку используя команду regedit /s-она подавляет появление диалоговых окон.

Вот тут кстати пора говорить и об использовании командной строки.

А точнее - нам нужна утилита командной строки reg.exe.

Список доступных команд получим вбив в командной строке reg/?
И аналогичным способом можно получить справку по каждой команде.
Единственное, что тут стоит добавить-если при наборе команды дописать , то тогда не будет выводиться сообщение если такой файл на диске уже есть.
Для того,что бы узнать как работать с реестром через командную строку или утилиту reg.exe то
Читайте далее статью

Утилита командной строки reg.exe.
 
Последнее редактирование модератором:

Отображение в reg-файле параметров, которые можно увидеть в reg-файлах:


Отображение в reg-файле параметров согласно коду параметра(символ/ номер обозначающий тип параметра) Тип параметра | Числовой код в reg-файле "REG_NONE" |=hex(0):
"REG_SZ" |=hex(1):
"REG_EXPAND_SZ" |=hex(2):
"REG_BINARY " |=hex(3):
"REG_DWORD" |=hex(4):
"REG_DWORD_LITTE-ENDIAN" |=hex(4):
"REG_DWORD_BIG_ENDIAN" |=hex(5):
"REG_LINK" |=hex(6):
"REG_MULTI_SZ" |=hex(7):
"REG_RESOURCE_LIST" |=hex(8):
"REG_FULL_RESOURCE_DESCRIPTOR" |=hex(9):
"REG_SZ" |=""
"REG_BINARY " |=hex:
"REG_RESOURCE_REQUIREMENTS_LIST" |=hex(a):
"REG_QWORD" |=hex(b):
"REG_DWORD" |=dword:
"REG_SZ" |=@

Обратите внимание:
Не все типы данных могут быть записаны с помощью reg-файла.
Для записи некоторых можно воспользоваться утилитой reg.exe или ini-файлами.

Если вы введете неверное кодовое обозначение типа параметра то оно не будет записано.
 
Последнее редактирование модератором:
Опишите пожалуйста, при Удаление данной ветки Удаляется все Параметры и Значение этой ветки из записи реестра ?
Код:
Windows Registry Editor Version 5.00

[-HKEY_CLASSES_ROOT\DesktopBackground\Shell\name\command]

[-HKEY_CLASSES_ROOT\DesktopBackground\Shell\name]
Опишите пожалуйста, при Удаление данной ветки Удаляется все Параметры и Значение этой ветки из записи реестра ?
Windows Registry Editor Version 5.00

[-HKEY_CLASSES_ROOT\DesktopBackground\Shell\name\command]

[-HKEY_CLASSES_ROOT\DesktopBackground\Shell\name]
Ничего не получается, как сразу все Удалить ?
 
Последнее редактирование модератором:
Опишите пожалуйста, при Удаление данной ветки Удаляется все Параметры и Значение этой ветки из записи реестра ?
Да, вместе с разделом.
Достаточно так
Код:
Windows Registry Editor Version 5.00

[-HKEY_CLASSES_ROOT\DesktopBackground\Shell\name]
Ничего не получается, как сразу все Удалить ?
Твик ошибок не выдает?
Вручную пробовали?
Возможно недостаточно прав.
 
Последнее редактирование модератором:
при твике выдает ошибку <<Возможен импорт только двоичных файлов данных реестра
Код:
Windows Registry Editor Version 5.00

[-HKEY_CLASSES_ROOT\DesktopBackground\Shell\name\command]

[-HKEY_CLASSES_ROOT\DesktopBackground\Shell\name]
искренне Спасибо за отзыв.
есть ветка (экспорт ветки)
Windows Registry Editor Version 5.00

[HKEY_CLASSES_ROOT\Directory\shell\Удалить содержимое папки]

[HKEY_CLASSES_ROOT\Directory\shell\Удалить содержимое папки\command]
@="cmd /c \"cd /d %1 && del /s /q *.*"
можно ли Удалить твиком
Код:
Windows Registry Editor Version 5.00

[-HKEY_CLASSES_ROOT\Directory\shell\Удалить содержимое папки]
и Удалится все записи данной ветки из реестра ?
 
Последнее редактирование модератором:
Вот,возьмите этот твик:
оо.reg
<<Возможен импорт только двоичных файлов данных реестра
У вас скорее всего кодировка неверная при создании твика была.
и Удалится все записи данной ветки из реестра ?
Полностью раздел Удалить содержимое папки вместе с содержимым - удалится.
 

Вложения

  • оо.reg
    оо.reg
    204 байт · Просмотры: 7
Последнее редактирование:
Спасибо огромное, сверил ваш .reg со своим и точно ошибка в кодировке ---каким то образом умудрился Сохранить в Блокноте UTF-8 кодировкой,
хотя по умолч стоит ANSI. И пожалуйста вразумите, почему таки в тернете пишут мол сначала нужно Удалить подраздели, а посля сам Раздел?
В моем случае, сначала ветку <<command>>, а потом <<Удалить содержимое папки>>
 
и еще вопрос, пожалуйста скажите
почему при добавление ветки
{C2FBB630-2971-11D1-A18C-00C04FD75D13} выходит именно <<Копировать в папку>>,
а не <<Copier dans un dossier>> или не <<複製到文件夾>> (перевод гугл).?
сколько читкал про CLSID, про иденфикатор ничего так и не понял. Все пишут добавь это и в
Контекст меню файлов появится это, но нигде так и не нашел, почему именно этот
пункт появляется?
кажись не корректный вопрос задал тута, ответов нет
 
Итак.
И пожалуйста вразумите, почему таки в тернете пишут мол сначала нужно Удалить подраздели, а посля сам Раздел?
В моем случае, сначала ветку <<command>>, а потом <<Удалить содержимое папки>>
Не знаю где и что вы читали в сети - но в данной теме я совершенно отчетливо указал,что для удаления раздела пользуемся следующими правилами:
А что за минусы я поставил при создании твика?
Если мы желаем удалить раздел то ставим минус перед значением адреса раздела.
Если надо удалить параметр-ставим минус после знака равно за параметром.

Удалять поочередно содержимое раздела нет нужды в данном случае.

почему при добавление ветки
{C2FBB630-2971-11D1-A18C-00C04FD75D13} выходит именно <<Копировать в папку>>,
а не <<Copier dans un dossier>> или не <<複製到文件夾>> (перевод гугл).?
сколько читкал про CLSID, про иденфикатор ничего так и не понял. Все пишут добавь это и в
Контекст меню файлов появится это, но нигде так и не нашел, почему именно этот
пункт появляется?

Потому что данный clsid соответствует Microsoft CopyTo Service.
Он отвечает за функцию копирования,а текст, который выводится задан соответствующим глаголом и значением shell.
 
Спасибо, не много понял и еще узнал про не плохую прогу Resource Hacker FX
 
Удалять поочередно содержимое раздела нет нужды в данном случае.
Просто размышления (имеющие мало практической ценности, т.к. вряд ли когда встретится).
Возьмем экзотический случай:
- допустим, для раздела HKCU\Test установлены привилегии запрета удаления/модификации без наследования.
- для подраздела HKCU\Test\Sub - полные права.
Тогда твик:
Код:
Windows Registry Editor Version 5.00
[-HKCU\Test]
не сможет удалить подраздел Sub.

DllPok, прежде чем добавлять такой пункт в контекстное меню, советую почитать эти статьи:
Как добавить в контекстное меню пункты “Копировать в папку” и “Переместить в папку”
Как добавить произвольные кнопки на панель проводника Windows 7

почему при добавление ветки
{C2FBB630-2971-11D1-A18C-00C04FD75D13} выходит именно <<Копировать в папку>>,
а не <<Copier dans un dossier>> или не <<複製到文件夾>> (перевод гугл).?
Это зависит от текущего языка пользовательского интерфейса.

Полагаю, твик, о котором Вы говорите, выглядит так:
Код:
Windows Registry Editor Version 5.00
[HKEY_CLASSES_ROOT\AllFilesystemObjects\shellex\ContextMenuHandlers]
[HKEY_CLASSES_ROOT\AllFilesystemObjects\shellex\ContextMenuHandlers\CopyTo]
@="{C2FBB630-2971-11d1-A18C-00C04FD75D13}"
или, как вариант, вот так:
Код:
Windows Registry Editor Version 5.00
[HKEY_CLASSES_ROOT\AllFilesystemObjects\shellex\ContextMenuHandlers]
[HKEY_CLASSES_ROOT\AllFilesystemObjects\shellex\ContextMenuHandlers\{C2FBB630-2971-11D1-A18C-00C04FD75D13}]
Раздел AllFilesystemObjects содержит записи, касающиеся всех файловых объектов.
shellex\ContextMenuHandlers содержит список дополнительных пунктов контекстного меню.
Список представляет из себя идентификаторы, указывающие на интерфейс, реализация которого находится в библиотеке (файл DLL).
Название пункта контекстного меню и само действие для него заключено в той же библиотеке.
Ссылка на нее находится в разделе HKCR\CLSID\{GUID}\{значение по-умолчанию}, где {GUID} и есть тот самый идентификатор.
Другими словами, имя этого пункта контекстного меню без модификации системных файлов у Вас изменить не получится.
 
Последнее редактирование:
Возьмем экзотический случай:
- допустим, для раздела HKCU\Test установлены привилегии запрета удаления/модификации без наследования.
- для подраздела HKCU\Test\Sub - полные права.
Это верно,не стал об этом писать потому что в изначальном вопросе подразумевался раздел с - как правило - стандартными правами.
Что и подтвердилось в последствии.
То есть ответ на вопрос: как производит удаление твик? - Полностью.
 
Список представляет из себя идентификаторы, указывающие на интерфейс, реализация которого находится в библиотеке (файл DLL)
Спасибо, за обстоятельный Ответ. Супер сайт
 
привет всем!
постоянно собираю или пишу сам какие-н твики, сегодня решил добавить cmd во все пкм, с выкидным меню, идея и ключи взяты с кибера, без пкм писал сам, решил потренироваться с контекстом в папках.
Код:
[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\CommandStore\shell\runas]
@="От имени администратора"
"Icon"="cmd.exe"
"HasLUAShield"=""

[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\CommandStore\shell\runas\command]
@="cmd.exe"
 
[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\CommandStore\shell\runas_user]
@="От имени пользователя"
"Icon"="cmd.exe"
 
[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\CommandStore\shell\runas_user\command]
@="cmd.exe"

---------------------------------------

[HKEY_CLASSES_ROOT\Directory\Background\shell\cmd_menu]
"icon"="cmd.exe"
"MUIVerb"="Командная строка"
"SubCommands"="runas;runas_user"

добавил в commandstore нужное, заделал ключ в background, строка появилась, меню есть, от юзера запускает из той папки в которой клацаешь, а от админа запускает, но переводит путь в system32.
сижу битый час и не въеду в чем косяк, тестирую на чистой оси на виртуалке.
а на моей системе, где отрублен uac и все такое, запускает из нужной папки, но по двум пунктам запускает от админа )))
 
Ничего странного. Стандартное поведение системы, при элевации рабочий каталог сменяется на %SystemRoot%\System32.
Делайте возврат обратно вручную, батником, в помощь макроса реестра: %L или %W
 
да хотелось бы без ручного возврата, чтобы сразу открывалась где положено.
 
Назад
Сверху Снизу