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

Тема в разделе "FAQ по работе с реестром", создана пользователем Kиpилл, 31 авг 2012.

  1. Kиpилл
    Оффлайн

    Kиpилл Команда форума Администратор

    Лучший автор месяца

    Сообщения:
    12.224
    Симпатии:
    4.979
    оглавление:
    Основы работы с реестром
    1)что такое реестр?
    2)ситаксис,структура,назначение элементов реестра.
    3)редактор реестра (regedit.exe)
    4)синтаксис,структура reg-файла.
    5)утилита reg.exe






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

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


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

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


    ___________________________________________________

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

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

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


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

    Попробуем?
    Давайте создадим собственную команду в контексном меню.
    Для этого откроем раздел
    Код (Text):
    HKEY_CLASSES_ROOT\DesktopBackground\Shell
    далее правой кнопкой мыши-создать раздел.
    [​IMG]

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

    В разделе name-создадим строковой параметр -reg_sz
    и задаем ему любое значение-например
    Код (Text):
    моя первая фигня...
    Моя больная фантазия захьела это имя,вы вольны выбрать свое...
    [​IMG]
    А в разделе command создаем аналогичный строковой параметр с именем выполняемой команды.
    Мне в голову взбрело regedit.exe
    В итоге мы получили при нажатии правой кнопкой мыши вот такую команду контексного меню:
    [​IMG]
    Нажимая мы вызываем редактор реестра...

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

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

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

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

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

    [HKEY_CLASSES_ROOT\DesktopBackground\Shell\name\command]
    @="regedit.exe"
    Для создания reg файла подойдет любой текстовый редактор.
    Я взял блокнот.
    Итак,создаем новый тестовый документ.
    В предыдущем примере мы добавляли новые параметры и разделы в реестр.
    Давайте теперь удалим их.
    Для этого в текстовом документе вводим:
    Код (Text):
    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)
    Код (Text):
    Windows Registry Editor Version 5.00
    обязательная строчка-указывает версию редактора.
    2)
    Следующая строка должна быть пустой.

    3)
    Далее идет указание пути к разделу.
    в нашем случае раздел-name
    Код (Text):
    [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.
     
    Последнее редактирование: 28 янв 2015
    machito, DllPok, Dragokas и 6 другим нравится это.
  2. Kиpилл
    Оффлайн

    Kиpилл Команда форума Администратор

    Лучший автор месяца

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

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


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

    Если вы введете неверное кодовое обозначение типа параметра то оно не будет записано.
     
    Последнее редактирование: 2 ноя 2013
    machito, DllPok, Dragokas и 3 другим нравится это.
  3. DllPok
    Оффлайн

    DllPok Пользователь

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

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

    [-HKEY_CLASSES_ROOT\DesktopBackground\Shell\name]
    --- Объединённое сообщение, 28 янв 2015, Дата первоначального сообщения: 28 янв 2015 ---
    Ничего не получается, как сразу все Удалить ?
     
    Последнее редактирование модератором: 4 сен 2015
  4. Kиpилл
    Оффлайн

    Kиpилл Команда форума Администратор

    Лучший автор месяца

    Сообщения:
    12.224
    Симпатии:
    4.979
    Да,вместе с разделом.
    Достаточно так
    Код (Microsoft Registry):
    Windows Registry Editor Version 5.00

    [-HKEY_CLASSES_ROOT\DesktopBackground\Shell\name]
     
    --- Объединённое сообщение, 28 янв 2015, Дата первоначального сообщения: 28 янв 2015 ---
    Твик ошибок не выдает?
    Вручную пробовали?
    Возможно недостаточно прав.
     
  5. DllPok
    Оффлайн

    DllPok Пользователь

    Сообщения:
    83
    Симпатии:
    37
    при твике выдает ошибку <<Возможен импорт только двоичных файлов данных реестра
    Код (Microsoft Registry):
    Windows Registry Editor Version 5.00

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

    [-HKEY_CLASSES_ROOT\DesktopBackground\Shell\name]
    [DOUBLEPOST=1422417763,1422417289][/DOUBLEPOST]искренне Спасибо за отзыв.
    есть ветка (экспорт ветки)
    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 *.*"
    можно ли Удалить твиком
    Код (Microsoft Registry):
    Windows Registry Editor Version 5.00

    [-HKEY_CLASSES_ROOT\Directory\shell\Удалить содержимое папки]
    и Удалится все записи данной ветки из реестра ?
     
    Последнее редактирование модератором: 4 сен 2015
  6. Kиpилл
    Оффлайн

    Kиpилл Команда форума Администратор

    Лучший автор месяца

    Сообщения:
    12.224
    Симпатии:
    4.979
    Вот,возьмите этот твик:
    оо.reg
    --- Объединённое сообщение, 28 янв 2015 ---
    У вас скорее всего кодировка неверная при создании твика была.
    --- Объединённое сообщение, 28 янв 2015 ---
    Полностью раздел Удалить содержимое папки вместе с содержимым - удалится.
     

    Вложения:

    • оо.reg
      Размер файла:
      204 байт
      Просмотров:
      3
    Последнее редактирование: 28 янв 2015
  7. DllPok
    Оффлайн

    DllPok Пользователь

    Сообщения:
    83
    Симпатии:
    37
    Спасибо огромное, сверил ваш .reg со своим и точно ошибка в кодировке ---каким то образом умудрился Сохранить в Блокноте UTF-8 кодировкой,
    хотя по умолч стоит ANSI. И пожалуйста вразумите, почему таки в тернете пишут мол сначала нужно Удалить подраздели, а посля сам Раздел?
    В моем случае, сначала ветку <<command>>, а потом <<Удалить содержимое папки>>
     
  8. DllPok
    Оффлайн

    DllPok Пользователь

    Сообщения:
    83
    Симпатии:
    37
    и еще вопрос, пожалуйста скажите
    почему при добавление ветки
    {C2FBB630-2971-11D1-A18C-00C04FD75D13} выходит именно <<Копировать в папку>>,
    а не <<Copier dans un dossier>> или не <<複製到文件夾>> (перевод гугл).?
    сколько читкал про CLSID, про иденфикатор ничего так и не понял. Все пишут добавь это и в
    Контекст меню файлов появится это, но нигде так и не нашел, почему именно этот
    пункт появляется?
    --- Объединённое сообщение, 28 янв 2015, Дата первоначального сообщения: 28 янв 2015 ---
    кажись не корректный вопрос задал тута, ответов нет
     
  9. Kиpилл
    Оффлайн

    Kиpилл Команда форума Администратор

    Лучший автор месяца

    Сообщения:
    12.224
    Симпатии:
    4.979
    Будут вам ответы,потерпите.
    Мы же не круглосуточно в интернете сидим.
     
  10. DllPok
    Оффлайн

    DllPok Пользователь

    Сообщения:
    83
    Симпатии:
    37
    Благодарю, буду ждать. Успехов вам в вашем работе и счастье в Пути
     
  11. Kиpилл
    Оффлайн

    Kиpилл Команда форума Администратор

    Лучший автор месяца

    Сообщения:
    12.224
    Симпатии:
    4.979
    Итак.
    Не знаю где и что вы читали в сети - но в данной теме я совершенно отчетливо указал,что для удаления раздела пользуемся следующими правилами:
    Удалять поочередно содержимое раздела нет нужды в данном случае.

    Потому что данный clsid соответствует Microsoft CopyTo Service.
    Он отвечает за функцию копирования,а текст, который выводится задан соответствующим глаголом и значением shell.
     
  12. DllPok
    Оффлайн

    DllPok Пользователь

    Сообщения:
    83
    Симпатии:
    37
    Спасибо, не много понял и еще узнал про не плохую прогу Resource Hacker FX
     
  13. Dragokas
    Онлайн

    Dragokas Very kind Developer Команда форума Супер-Модератор Разработчик Клуб переводчиков

    Сообщения:
    4.490
    Симпатии:
    4.307
    Просто размышления (имеющие мало практической ценности, т.к. вряд ли когда встретится).
    Возьмем экзотический случай:
    - допустим, для раздела HKCU\Test установлены привилегии запрета удаления/модификации без наследования.
    - для подраздела HKCU\Test\Sub - полные права.
    Тогда твик:
    Код (Text):

    Windows Registry Editor Version 5.00
    [-HKCU\Test]
     
    не сможет удалить подраздел Sub.

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

    Это зависит от текущего языка пользовательского интерфейса.

    Полагаю, твик, о котором Вы говорите, выглядит так:
    Код (Text):

    Windows Registry Editor Version 5.00
    [HKEY_CLASSES_ROOT\AllFilesystemObjects\shellex\ContextMenuHandlers]
    [HKEY_CLASSES_ROOT\AllFilesystemObjects\shellex\ContextMenuHandlers\CopyTo]
    @="{C2FBB630-2971-11d1-A18C-00C04FD75D13}"
    или, как вариант, вот так:
    Код (Text):

    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} и есть тот самый идентификатор.
    Другими словами, имя этого пункта контекстного меню без модификации системных файлов у Вас изменить не получится.
     
    Последнее редактирование: 2 фев 2015
    DllPok, machito и Kиpилл нравится это.
  14. Kиpилл
    Оффлайн

    Kиpилл Команда форума Администратор

    Лучший автор месяца

    Сообщения:
    12.224
    Симпатии:
    4.979
    Это верно,не стал об этом писать потому что в изначальном вопросе подразумевался раздел с - как правило - стандартными правами.
    Что и подтвердилось в последствии.
    То есть ответ на вопрос: как производит удаление твик? - Полностью.
     
  15. DllPok
    Оффлайн

    DllPok Пользователь

    Сообщения:
    83
    Симпатии:
    37
    Спасибо, за обстоятельный Ответ. Супер сайт
     

Поделиться этой страницей