Использование реестра. Что такое реестр Windows? Использование инструментария управления Windows

21.08.2020

В реестре хранятся сведения о конфигурации компьютера, параметрах Windows и настройках установленных программ. Компоненты системы непрерывно обращаются к этим сведениям. Поэтому, если возник сбой реестра, программы могут перестать работать или частично потерять свою функциональность. Рассмотрим подробнее нюансы работы с ним.

Запуск редактора реестра

Открыть в Windows 7 редактор реестра проще всего через диалоговое окно «Выполнить ». Оно запускается в меню «Пуск » либо сочетанием кнопок Win + R . В текстовой строке введите команду regedit и выполните ее.

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

Возникновение неполадок

Установочный процесс практически любой программы или утилиты включает в себя внесение изменений в реестр. Если инсталляция произведена неправильно, или во время нее возник сбой, то появляется вероятность некорректного редактирования системных файлов. Иногда это никак не отображается на работоспособности компьютера. Но в некоторых случаях - приводит к возникновению сбоев, замедлению работы и прочим негативным факторам.

Решение проблем

Можно выделить три крупных группы проблем, связанных с реестром: фрагментация, заполнение лишними сведениями и повреждение данных. С последней категорией все понятно, рассмотрим подробнее две других.

Явление фрагментации заключается в том, что файл записывается блоками на разные области накопителя. При этом замедляется скорость обращения к нему. Фрагментации подвержены в том числе и реестровые данные.

Чаще всего программа удаляется с компьютера не полностью, остаточные данные иногда не стираются. К ним относятся записи в реестре. Их большое количество приводит к замедлению работы Вин 7.

В первом случае поможет дефрагментация, выполняется она с помощью утилиты Defraggler . Для решения второй проблемы стоит установить CCleaner . А для третьей - откатить ОС.

Проблема 1: Фрагментация

Утилита Defraggler предназначена для оптимизации работы с реестровыми данными. С ее помощью получится выполнить дефрагментацию.

Дефрагментация доступна исключительно до загрузки ОС. Поэтому утилита будет работать при запуске компьютера. Следуйте инструкции, чтобы настроить ее:


Примечание: первый запуск системы после настройки Defraggler будет длиться дольше обычного. Это вполне нормально, ведь компьютеру требуется определенное время, чтобы произвести обработку данных. Последующие загрузки будут гораздо быстрее.

Когда дефрагментация успешно выполнена, загрузится система. Но программа настроена таким образом, что процедура будет производиться при каждом запуске компьютера. Чтобы отключить эту настройку, удалите Дефрагглер или измените параметры его работы. Но желательно оставить все так, как есть на данный момент. Это позволит повысить скорость работы ПК после загрузки.

Проблема 2: Остаточные файлы

Опытный пользователь может очистить реестр Виндовс 7 вручную. Но предпочтительнее для этого использовать специальный софт. В таком случае отсутствует риск повреждения важных данных.

Отдельно стоит выделить CCleaner . Это мощная утилита по очистке ПК, работающего на Windows. У нее множество различных функций, в том числе и чистка реестровых данных.

Инструкция по работе:


Желательно выполнять чистку остаточных данных регулярно, постоянно при этом делая бэкап файлов. Он пригодится в том случае, если изменения реестра приведет к возникновению каких-либо проблем Виндовс 7.

Проблема 3: Повреждение данных

Если какие-либо действия с изменением параметров реестра привели к серьезным неполадкам, то предыдущие способы не помогут в решении проблемы. В таком случае предпочтительнее всего выполнить в Windows 7 восстановление реестра.

Самый простой вариант - откат. В таком случае
ОС вернется к прежнему состоянию, когда не были внесены изменения, ставшие причиной возникновения ошибки.

Инструкция по восстановлению Виндовс:


При выборе точки восстановления стоит ориентироваться по дате. Кнопка «Поиск затрагиваемых программ » отобразит элементы системы, которые будут удалены при откате.

Сегодня, попытаемся разобраться, что представляется собой главный реестр Windows, для чего он необходим. Также попробуем ответить на вопрос о том, где находится реестр Windows ХР и Windows 7.

Реестр Windows: что это и для чего

Прежде всего, нужно усвоить, что реестр - это не папка. Реестр - это целый файл, который отвечает всем параметрам обычного файла. Найти этот файл можно в папке WINDOWS. Если вы хотите просмотреть реестр Windows, то нужно сделать следующие действия. Откройте меню "Пуск". Затем опцию "Выполнить...". Вводим в строку надпись "regedit".

Непосредственно, сам реестр находится в двух файлах. Они называются "User.dat" и "System.dat". Также существует файл "Policy.pol", в котором содержаться все правила системы. Данные этого файла обладают приоритетом перед любыми настройками реестра. Его, как правило, используют в многопользовательской среде и он не инсталлируется по умолчанию. Все эти файлы можно найти в папке Windows, где располагается вся системная среда компьютера. Категорически не рекомендуются изменять содержимое папки, это может привести к логическим ошибкам, способным вывести из строя ваш компьютер. Необходимо учитывать один момент. Если на компьютере несколько учетных записей пользователей, то система создает несколько файлов "User.dat".

Вот список файлов реестра Windows:

C:\WINDOWS\system32\config:
software-HKEY_CURRENT_CONFIG
system - HKEY_LOCAL_MACHINE, HKEY_CLASSES_ROOT
default - HKEY_USERS
C:\Documents and Settings\%user%
NTUSER.DAT - HKEY_CURRENT_USER

Реестр Windows 7: где находится

Где находится реестр Windows XP

Реестр Windows XP находится в каталоге "Windows/System32/Config".

За что отвечает реестр? В реестре содержится вся информация для корректной работы всех аппаратных устройств, программ, учетных записей пользователей и свойств вашего персонального компьютера. Все изменения самых разных настроек отображаются в системном реестре. Реестр обладает иерархической структурой. Программа "Regedit" - это проводник по всей системе реестра. Без этой утилиты было бы невозможно эффективно работать с реестром, хотя иногда это необходимо. Каждая главная ветка - это корневая папка, которая содержит необходимые для работы системы, ключи. Каждый ключ, соответственно, может содержать в себе другие ключи, которые называются параметрами или подключами. В них содержится вся фактическая информация об изменениях системы операционного обеспечения. Программисты выделяют три типа подключей - это строковые, двоичные и DWORD-ключи. Реестр имеет шесть главных ветвей, между которыми распределена вся информация, которая содержится на компьютере.

Эксперты по компьютерам и программному обеспечению категорически не рекомендуют изменять или удалять что-либо из реестра Windows. Если вы считаете, что проблема зависания кроется именно в реестре, то лучше обратиться к специалисту, который точно поможет вам исправить системные ошибки.

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

ВАЖНО : если Вы решили работать с реестром Windows, то предварительно создайте его копию. Неосторожные действия легко могут стать причиной серьёзных системных сбоев. В результате придется восстанавливать ОС или даже осуществить её переустановку.

Реестр в операционных системах

Чтобы продемонстрировать важность реестра, требуется сказать о простой статистике. В ходе запуска ОС сюда осуществляется около тысячи обращений, а в течение одного дня количество может достигнуть 10.000 и даже более. Достаточно запустить какую-либо программу, задать настройки или выполнить иные действия, чтобы информация в реестре была отредактирована.

Где хранится реестр?

Довольно часто можно услышать вопрос о расположении файлов. Реестр Windows располагается по директории C\Windows\System32\config. Здесь в качестве диска указан С, но для Вашего устройства ситуация может быть иной. Все зависит от того, куда именно установлена система.

Если рассматривать наиболее популярную ОС Windows 7, то файлы реестра здесь располагаются в специальных местах. Подобный момент требует к себе отдельного внимания:

  • «HKEY_LOCAL_MACHINE\HARDWARE ». Указанная ветка будет создаваться на основании того, какое именно подключено периферийное оборудование. Процесс является динамическим.
  • «HKEY_LOCAL_MACHINE\BCD00000000 » использует для своего создания специальный файл «%SystemRoot%\Boot\BCD».
  • «HKEY_LOCAL_MACHINE\SYSTEM ». Чтобы сформировать указанную ветку, применяется документ «%SystemRoot%\System32\config\ SYSTEM».
  • «HKEY_LOCAL_MACHINE\SOFTWARE ». Создание происходит на основании документа «%SystemRoot%\System32\config\SOFTWARE».
  • «HKEY_LOCAL_MACHINE\SECURITY ». В ветке происходит хранение параметров безопасности устройства и она создается из документа «%SystemRoot%\System32\config\SECURITY».
  • «HKEY_LOCAL_MACHINE\SAM ». Для создания применяется информация из документа, находящегося по адресу «%SystemRoot%\System32\config\SAM».
  • «HKEY_USERS\DEFAULT ». Формирование ветки реестра производится за счет документа «%SystemRoot%\System32\config\DEFAULT».
  • Ветки реестра «HKEY_USERS\S-1-5-18 », «HKEY_USERS\S-1-5-19 » и «HKEY_USERS\S-1-5-20 ». Для их создания используется документ NTUSER.DAT, который лежит в различных директориях. Это «%SystemRoot%\System32\config\systemprofile\», «%SystemRoot%\System32\config\systemprofile\» и «%SystemRoot%\ServiceProfiles\NetworkService\».
  • «HKEY_USERS\ ». С целью формирование происходит применение документа «%USERPROFILE%\NTUSER.DAT».
  • «HKEY_USERS\_Classes ». В указанном случае, формирование производится в ходе использования документа «%USERPROFILE%\AppData\Local\Microsoft\Windows\UsrClass.dat».

Реестр имеет отдельные файлы, которые заслуживают к себе внимания - это резервные копии. Они необходимы в случае восстановления системы. Данные документы находятся по директории «%SystemRoot%\System32\config\RegBack». Если рассматривать ситуацию по умолчанию, то копия будет создавать один раз в 10 дней. Можно выполнить настройку подобного процесса - периодичности и времени запуска. Пользовательская часть реестра находится в документе %userprofile%\ntuser.dat.

Когда речь заходит о реестре ОС 32х и 64х разрядного типа, тут предусматриваются определенные особенности. В первом случае все папки являются единичными. Для 64х разрядов предусматривается разделение на 32х и, непосредственно, 64х разрядные разделы.

Как открыть реестр?

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

Через утилиту «Выполнить»

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

  1. Зажимаем сочетание клавиш Win+R или запускаем утилиту «Выполнить» другим способом.
  2. Производим ввод regedit и нажимаем подтверждение. Крайне важно, чтобы подобное действие проводилось от имени администратора.

Посредством поиска через меню «Пуск»

Тут могут быть определенные отличия при работе с различными ОС. Например, для Windows 8 отсутствует классическое меню «Пуск». В любом случае, необходимо получить доступ к строке поиска. В неё требуется ввести regedit и запустить выданную программу.

Посредством проводника Windows

Поставлена задача найти конкретный файл в системой папке C\Windows (ранее уже говорилось о возможности использования другой буквы диска, в зависимости от места установки ОС). Нас интересует regedit. Его нужно найти в общем перечне и запустить.

Структура реестра

Реестр Windows включает в себя 5 ветвей. Каждая из них предусматривает хранение сведений конкретного типа. Данные разделы не разрешается изменять. Они не могут быть перенесены, переименованы или удалены. Требуется описать каждую из ветвей и указать их особенности:

  • HKEY_CLASSES_ROOT (HKCR) . Здесь хранятся данные о многочисленных расширениях, что позволяет системе работать с файлами различного типа. Если каких-либо сведений нет, всегда можно внести дополнительные изменения для расширения возможностей.
  • HKEY_CURRENT_USER (HKCU) . В указанной ветке находятся сведения об учетной записи. Сюда можно отнести различные настройки и элементы персонализации.
  • HKEY_LOCAL_MACHINE (HKLM) . Здесь располагается все данные о подсоединённых устройствах и драйверах. Что особенно важно, тут находятся сведения, касающиеся загрузки ОС.
  • HKEY_USERS (HKU) . Здесь представлены данные о полном списке пользователей для конкретного устройства.
  • HKEY_CURRENT_CONFIG (HKCC) . Представлены сведения об оборудовании, которое применяет устройство в ходе запуска ОС. Как показывает практика, тут находится мало информации и почти вся она является копией из иных разделов.

В процессе работы с реестром Windows, интерес представляют HKEY_CURRENT_USER и HKEY_LOCAL_MACHINE. Здесь находится большинство настроек, которые возникает необходимость изменять.

Необходимо уделить внимание такой составляющей, как параметры. Они позволяют вносить изменения в различные аспекты работы системы. Существует несколько типов параметров:

  • Двоичный. Получил наибольшее распространение и используется во всех разделах. При выдаче в редакторе реестра предусматривается применение 16х формата.
  • Dword. Используется значение с длиной 4 байта. Необходим для осуществления хранения параметров драйверов и различных программ.
  • Расширяемая строка данных. Основное отличие от строкового параметра заключается в отсутствии четкого фиксирования длины.
  • Многострочный. Используется более чем одна строка. Довольно часто применяется при необходимости хранения табличных данных.
  • Строковый. Строка текста, которая обладает фиксированной длиной.
  • Qword. Сведения указываются в виде 64х разрядного целого.
  • Ссылка. Используется символическая ссылка в формате Юникод.

Резервная копия всего реестра или отдельного раздела

Ранее уже говорилось об опасностях работы с реестром. Всегда имеется вероятность причинить вред системе и нужно заранее позаботиться о создании копии. Следует войти в редактор реестра Windows, где открыть раздел «Файл». В появившемся списке происходит выбор пункта «Экспорт». Теперь можно осуществить создание копии всего реестра или конкретного подраздела. Для удобства, процесс демонстрируется на скриншоте ниже.

С целью повышения надежности допускается сохранить копию не только на жёстком диске устройства, но внешнем носителе.

Восстановление реестра

Так, самое худшее случилось и в системе произошел сбой. Что необходимо сделать в такой ситуации? Стоит рассмотреть три способа восстановления, каждый из которых обладает своими особенностями. В любой ситуации требуется предварительно завершить работу всех программ и приложений. Не станет лишним отключение антивирусных средств.

Восстановление из файла

Переходим к документу, который ранее был сохранен. Там должна находиться копия всего реестра Windows. Требуется осуществить двойной клик, после чего подтвердить полученное сообщение. Оно представлено на скриншоте далее.

Определенное время потребуется для восстановления, а сам процесс будет завершен после перезагрузки устройства.

Слияние

Нужно открыть папку с копией и нажать на ней правой кнопкой мыши. Произойдет выдача меню, в котором требуется указать «Слияние». Для Вашего удобства, это действие представлено на скриншоте.

Как и в предыдущем случае, восстановление завершится после перезагрузки.

Импорт

Необходимо открыть реестр Windows. Как это сделать уже рассматривалось ранее и было представлено несколько подходов. В самом редакторе нас интересует меню «Файл». Там следует выбрать «Импорт». Будет предложено указать путь до сохраненной копии.

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

Восстановление с использованием live CD

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

  1. Создаем на диске с системой временную папку. Ей требуется дать название tmp. Именно здесь будут располагаться дефектные файлы реестра.
  2. Теперь осуществляем вход в папку C:\WINDOWS\system32\config
  3. Все файлы, найденные здесь, должны быть перенесены в созданную ранее временную папку C:\tmp\
  4. Идем в папку восстановления, которая располагается в директории C:\System Volume Information\. В ней должно располагаться некоторое количество папок следующего типа - _restore{длинный символьный код с дефисами}. Проверяем дату создания подобных папок и находим в списке самую позднюю.
  5. Внутри будут находиться папки с названиями RP1, RP2 и так далее. Нас опять интересует самая последняя. Важно ознакомиться с датой и уточнить, работали ли ОС в указанное время стабильно. Если нет, выбираем последнее работоспособное сохранение.
  6. Переходим в папку Snapshot\. Именно здесь располагаются резервные копии файлов реестра.
  7. Требуется использовать _REGISTRY_USER_DEFAULT, _REGISTRY_MACHINE_SECURITY, _REGISTRY_MACHINE_SOFTWARE, _REGISTRY_MACHINE_SYSTEM и _REGISTRY_MACHINE_SAM
  8. Указанные в прошлом пункте файлы копируются и ими производится замена аналогичных файлов реестра в директории C:\WINDOWS\system32\config. Требуется выполнить смену названия на DEFAULT, SECURITY, SOFTWARE, SYSTEM и SAM
  9. Для того, чтобы изменения вступили в силу, необходимо перезагрузиться.

Чистка реестра

Нередко можно столкнуться с запросом о том, как очистить реестр на Windows (Виндовс ). Здесь можно использовать специализированное ПО или ручной метод. В первом случае, можно порекомендовать достаточно большое количество приложений. К наиболее популярным следует отнести Reg Organizer, CCleaner и Windows Cleaner. Данные программы отлично себя зарекомендовали - их возможности по оптимизации работы системы находятся на весьма высоком уровне.

Ручная чистка реестра Windows больше подходит для опытных пользователей, которые знают, что делают. Предварительно рекомендуется выполнить копирование файлов, чтобы провести восстановление в случае неудачи.

Непосредственно процесс очистки требует удалить любые сведения об уже удаленной программе. Подобные данные содержатся в «HKEY_CURRENT_USER» и именно туда лежит наш путь. В подразделе Software требуется найти необходимую папку. Ниже на скриншоте показан пример для программы Скайп.

Создание и удаление разделов и параметров через файл с расширением reg

Все reg файлы обладают строго установленным синтаксисом, который должен в обязательном порядке соблюдаться. Это является особенностью документов подобного типа. REG файлы допускается применять в качестве средства для создания или удаления подразделов, а также параметров.

Создание подразделов или изменение параметров

  1. Осуществляем доступ к редактору реестра
  2. Выбирается тот подраздел, изменения для которого должны быть проведены
  3. Происходит нажатие на вкладку «Файл», где надо нажать «Экспорт»
  4. В поле «Имя файла» прописывается название документа для сохранения REG-файла с изначальными элементами реестра и нажимается кнопку «Сохранить»

Удаление разделов реестра или параметров

Для выполнения поставленной задачи требуется поместить дефис перед путем реестра. Следует рассмотреть это на простом примере. Имеем:

HKEY_LOCAL_MACHINE\Software

Из него необходимо выполнить удаление раздела Program. Это будет выглядеть следующим образом:

[-HKEY_LOCAL_MACHINE\Software\Program]

Удаление значения имеет схожий способ. В данном случае, дефис должен располагаться непосредственно перед знаком равенства. Расширим прошлый пример - теперь нужно удалить параметр ProgramValue. Это выполняется следующим образом:


" ProgramValue"=-

Вносить изменения можно через обычную программу-блокнот. Не забывайте предварительно делать копии.

Сегодня мы попробуем залезть в реестр Windows с черного хода, без использования штатных WinAPI-функций, для этого предназначенных. Что нам это даст в итоге? Возможность писать и читать из реестра напрямую, в обход ограничений, установленных разработчиками антивирусных решений!

Забегая вперед, отмечу: тема эта интересна, но тут целый набор серьезных проблем. Хотя кто сказал, что нам это не по плечу? 🙂

Что такое реестр, или немного лирики

С точки зрения операционной системы Windows, реестр - это уникальная кладовка. В этой своеобразно выстроенной иерархической базе данных хранятся настройки, данные, регистрационная информация и прочая хрень почти обо всем в системе, начиная с программ и заканчивая настройками конкретного пользователя. В реестре хранится практически все. Несмотря на то что некоторые программы предпочитают хранить свои настройки в ini-конфигах (особенно программы, написанные для Win 3.11. – Прим. ред.), сама Windows всю нужную информацию о самой себе считывает из реестра. Справедливости ради отметим, что в *nix-like операционных системах до сих пор господствует система хранения настроек во всевозможных конфигах.

Новичков - системных администраторов при начале работы с реестром старшие товарищи пугают, что неправильная настройка и изменение параметров реестра могут напрочь завалить систему с последующей ее переустановкой. И это действительно так.

К примеру, так называемые точки восстановления - это копии реестра. Они широко применяются пользователями при возникновении различных проблем как с операционной системой, так и с программным и аппаратным обеспечением.

Надо сказать, что 99% информации о реестре Windows - это описание основных ключей плюс советы, как с ними работать. Но как работает с реестром сама операционная система? И сможем ли мы эмулировать ее действия? Давай немного порассуждаем.

Ну и что?

Реестр - одновременно и сильная и слабая сторона Windows. Сильная сторона реестра в том, что для разработчиков программного обеспечения отпадает необходимость манипулировать туевой хучей конфигов, как это, например, реализовано в никсах. Удобен реестр и для создателей COM-компонентов - система автоматом регистрирует такой компонент в реестре и облегчает задачу по его дальнейшему использованию.

Слабость реестра в том, что доступ к модификации чувствительных областей реестра позволяет управлять Windows любой программе, написанной каким-нибудь новоявленным малварщиком. Вспомни хотя бы самую знаменитую ветку реестра Windows, позволяющую запускать программы на старте ОС:).

Если в Windows 98 реестр могли починять все, кому это взбредет в голову, то начиная с Windows XP доступ к реестру имеют только пользователи с учетной записью администратора. В Vista+ доступ к реестру находится под защитой UAC. Оно и понятно.

Надо признать, что с выходом Win7 концепции безопасности при работе с реестром были пересмотрены в лучшую сторону. Например, под защитой находится ключевая ветвь реестра HKEY_LOCAL_MACHINE. В общем случае попытка что-то записать в нее будет перенаправлена в соответствующую ветку HKEY_CURRENT_USER для текущего пользователя.

Интерфейс

Для работы с реестром напрямую Windows предлагает программисту целый набор WinAPI, которые должны быть знакомы любому системному разработчику, - это Reg*-функции, такие как RegOpenKey, RegQueryValue и так далее. В ядре Win это NtOpenKey, NtQueryValueKey и целый ряд других. Описывать их особого смысла нет - всю документацию по надлежащему использованию этих функций можно найти в MSDN.

Здесь стоит отметить вот что. Антивирусы и проактивки для контроля за пользовательскими действиями устанавливали перехваты на упомянутые функции, как в ядре, так и в юзермоде.

С выходом Win7 x64 ситуация изменилась, и я уже об этом как-то писал. Разработчики Windows решили отказаться от возможности перехватывать потенциально опасные функции в ядре Win. Теперь переменная KeServiceDescriptorTable в x64 больше экспортируется, да и переписать нужный участок кода не выйдет - PatchGuard не даст. Есть, конечно, садомазохистские решения по обходу этих ограничений - но там гемора будет больше, чем профита. Тем более что Microsoft предлагает удобные колбеки ObRegisterCallbacks для контроля за реестром.

INFO

Информации в Сети о структурах, описывающих основные файлы реестра, очень мало. И почти все они на английском. Начальные знания можно найти . Кроме этого, хорошо про реестр написано в библии системщика «Внутреннее устройство Windows» от товарищей М. Руссиновича и Д. Соломона.

А теперь - о самом интересом

Но что же такое реестр на самом деле? Если заглянуть в папку WINDOWSsystem32config, то можно увидеть там несколько файлов: system, software, security, SAM и несколько других.

Это файлы реестра.

Однако несправедливо будет говорить о реестре просто как о некоем сочетании файлов, загруженных в память. Многое из того, что содержит реестр, носит динамический характер, то есть ряд значений высчитывается на этапе загрузки самой системы, в первую очередь это касается определенных параметров железа. Например, таков подраздел реестра HKEY_DYN_DATA, данные которого при загрузке операционной системы размещаются в оперативной памяти и находятся там вплоть до завершения работы операционной системы. То же, кстати, можно сказать и о ключевом подразделе HKEY_LOCAL_MACHINE, который не имеет своего соответствующего файла на диске, но фактически формируется из других файлов реестра, таких как software, system и прочие.

Таким образом, реестр изнутри можно весьма приблизительно назвать «виртуальным сочетанием файлов реестра». После старта системы эти файлы находятся как в файле подкачки (paged pool), так и в невыгружаемой памяти (nonpaged).

Структура реестра

Для того чтобы научиться работать с реестром напрямую, без знаний его внутренней структуры не обойтись никак. В целом Microsoft никогда не раскрывала тайны внутренней структуры файлов, составляющих реестр, поскольку это угрожает безопасности. По моим наблюдениям, все имеющиеся описания файлов реестра и его структуры (а их, кстати совсем чуть-чуть) - результаты изысканий пионэров-исследователей. Наиболее законченное, на мой взгляд, такое «исследование» можно , принадлежит оно товарищу Питеру Норрису.

Не будем вдаваться сейчас в подробности организации и структуры реестра, дело это долгое, нудное и в рамки статьи точно не вписывается. Здесь важно уяснить, что реестр - иерархическая древоподобная структура, иногда также говорят, что она похожа на пчелиные соты.

И что со всем этим теперь делать?

Сразу огорчу: запросто пошаманить напрямую с реестром в юзермоде не получится, система не даст этого сделать, как это обычно бывает с файлами, занятыми другими процессами. Если попытаться извернуться, то можно только прочесть такой «занятый» файл, и то если угадать с флагами, с которыми он был открыт. К сожалению, записать в интересующий нас «файл реестра» информацию не выйдет. Кстати, фича с записью нужной информации в реестр может прокатить, если писать в реестровские *.BAK-файлы, они точно доступны под запись.

Итак, следи за рукой:).

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

Теоретически так сделать можно, для этого нужно, во-первых, уметь работать с «занятыми» файлами (способы ищи в Сети) и, во-вторых, как я уже говорил выше, надо знать внутреннюю структуру файлов реестра. Метод этот довольно топорный, но, несмотря на свою бредовость, он вполне жизнеспособен, хотя его и трудно реализовать на практике (попробуй поэкспериментировать с ним самостоятельно).

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

Первый способ заключается в том, что для конфигурационного менеджера (Configuration Manager, часть операционной системы, если ты не в курсе) реестр есть не более чем набор строго определенных структур в операционной памяти, с которыми, как оказывается, очень даже легко работать. Какие это структуры, спросишь ты? HBASE_BLOCK, HHIVE, HBIN, HCELL, HMAP_ENTRY, HMAP_DIRECTORY, куча CM_* структур, используемых конфиг-менеджером для управления реестром. С точки зрения операционной системы, реестр - это просто набор регламентированных структур в оперативной памяти. К примеру, сигнатура «regf», определяющая «файл реестра», есть заранее определенная константа:

Define HBASE_BLOCK_SIGNATURE 0x66676572 typedef struct _HBASE_BLOCK { ULONG Signature; //0x66676572 ULONG Sequence1; ULONG Sequence2; LARGE_INTEGER TimeStamp; .... }

То есть смысл всего этого моего монолога в том, что существует шикарная возможность манипуляции с реестром на уровне операционной системы, но при этом не используя ее штатные средства. Как это возможно? Мы просто сэмулируем действия самой операционной системы, точно так, как она сама работает с реестром! Важно, как я уже говорил, понять, что для самой ОС реестр не более чем набор соответствующих структур в памяти.

Если у нас будет доступ к файлам реестра на уровне ядра, то чем мы хуже самой ОС, чтобы установить свой порядок?

И тут на сцене появляется наиболее интересный вопрос - как найти эти самые структуры в памяти? Верно, штатных средств системы для решения этого вопроса нет, поэтому придется выкручиваться по-хитрому.

Зная, как выглядят структуры, нужно вспомнить, что каждый файл, улей реестра, имеет свою константную сигнатуру. Например, «regf» - это 0x66676572. Для улья сигнатура будет равна 0xBEE0BEE0. Имея доступ к памяти из ядра, мы можем довольно легко найти эти сигнатуры в памяти, просто просканив ее. Еще можно просканить память в поисках сигнатуры «CM10» - именно она присваивается конфиг-менеджером блоку подкачиваемой памяти, который выделяется под структуру CMHIVE. Полагаю, найдя в памяти интересующий нас элемент, ты придумаешь, что делать с ним дальше:).

Как, к примеру, изменить значение ячейки реестра? Значение хранится в поле CM_KEY_VALUE->Data, поэтому, если у тебя возникнет задача изменить какое-либо поле в конкретном ключе реестра, ищи значение именно там:

Typedef struct _CM_KEY_VALUE { WORD Signature; // #define CM_KEY_VALUE_SIGNATURE 0x6B76 WORD NameLength; ULONG DataLength; ULONG Data; //<---------- данные ячейки будут здесь ULONG Type; WORD Flags; WORD Spare; WCHAR Name; } CM_KEY_VALUE, *PCM_KEY_VALUE;

Второй вариант является своеобразной модификацией первого. Если знаешь, существует одна особенность при работе с реестром - все изменения, то есть «создание новых ключей / запись / удаление ключей», как правило, вступают в силу после перезагрузки системы (ну или после перезагрузки эксплорера, это такой хак-метод). До этого все изменения находятся словно в подвешенном, «dirty»-состоянии. Мало того, система при обращении с реестром общается с ним через кеш файловой системы. Это понятно - обращений к реестру может быть сотни в секунду, соответственно, полагаться при этом на быстродействие файловой системы неразумно, тут никакое быстродействие не спасет. Поэтому система и работает с реестром, что называется, виртуально, через кеш файловой системы. И тут, чтобы вытащить кишки реестра на свет, надо залезть в кеш! Как это делается, уже описывалось в тырнетах, в том числе и в .

Pro & Cons, или вместо заключения

Что сказать в итоге? Предложенная читателю в статье вариация на тему прямого контроля за реестром носит исключительно экспериментальный характер. Не спорю, она тяжеловата для практической реализации, и многие скажут, что уж лучше использовать нормальные WinAPI-функции, предназначенные для работы с реестром, - и будут в чем-то правы. Однако реализованная die_hard на деле либа, основанная на приведенных в статье принципах, будет обладать поистине термоядерной силой, неподвластной ни аверам, ни самой операционной системе.

Засим закончу. Удачного компилирования и да пребудет с тобой Сила!

WWW

Обязательна к прочтению статья Марка Руссиновича о реестре «Inside the Registry», нашелся даже русский перевод . Замечательная тулза для сбора информации о реестре: http://goo.gl/iSSVy .

Похожие статьи