Восстановление удаленных записей в реестре Windows (Registry Undelete)


Восстановление удаленных записей в реестре Windows





Информация для статьи была взята с сайта http://paullee.ru.

Дело было вечером, делать было нечего... Исследовал я как-то реестр, и, то ли позднее время, то ли включенный телевизор повлияли, но я удалил совсем не ту запись, которую хотел. Шаманские пляски вокруг компьютера с ритуальными воплями: "Е-мое, что ж я натворил?!?!" и выдиранием клочьев волос на голове, не привели ни к чему. Как это ни печально, но при работе с реестром нет возможности отменить последние действия, поэтому и надо быть очень внимательным. Но знание этого факта не помогло мне восстановить потерянную информацию. Вот тут-то я и вспомнил об одной утилите, автором которой является General Paul Lee. Об одной из его программ (Registry Viewer) я писал не так давно.

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

- невозможно восстановить удаленное значение записи. Восстанавливается только запись целиком;

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

- программа не работает с файлами реестра Windows95, т.к. там применяется другой способ удаления данных.

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

Вот несколько моментов, поясняющих, как происходит удаление записей из файла реестра:

1. В таблице RGKN запись помечается, как удаленная и неупакованная.

2. Ее адрес прописывается в заголовке RGKN, как адрес первой свободной.

3. Следующей свободной записью становится предыдущая первая свободная.

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

4. Начиная с Win98 (возможно раньше?), номер записи (номер RGDB и номер в RGDB) не затирается, что дает возможность поиска удаленной записи в реестре.

5. При удалении записи в блоке RGDB, так же как и в RGKN, создается цепочка удаленных записей, где первой является последняя удаленная запись.

6. Полной однозначности при поиске удаленной записи добиться не удается, поскольку номер удаленной записи в блоке RGDB все-таки затирается, и для удаленной записи единственной полезной информацией о расположении является номер RGDB, в котором она находится.

Исходя из вышеперечисленного, можно предложить два варианта восстановления:

1. Восстановление записей производить строго в порядке обратном порядку их удаления. Т.е. информации о последней удаленной записи в RGKN ставится в соответствие информация о последней удаленной записи в указанном блоке RGDB.

2. При восстановлении записи в N-ном блоке RGDB, подсчитывать количество предшествующих удаленных записей в RGKN, располагающихся в этом же блоке RGDB, и восстанавливать запись соответственно очередности.

Ситуацию ухудшает тот факт, что при создании новой записи в блоке RGKN берется первая свободная запись, т.е. последняя удаленная. Таким образом, теряется реальная картина о расположении удаленных записей, и записи могут быть восстановлены с неверным путем. Однако сами данные, содержавшиеся в записи, не удаляются и становятся так называемыми "потерянными" (блок свободен, но на него нет ссылки из таблицы RGKN). Этот факт не нарушает целостность файла реестра, но сильно затрудняет работу с удаленными записями. После упаковки, как и в RGKN, в RGDB все свободные записи смещаются в единый блок в конце блока.

После такой серьезной теоретической подготовки можно поговорить и о самой программе. Интерфейс ее полностью идентичен Registry Viewer'у, как и методы работы. Чтобы восстановить утерянные записи надо загрузиться в режим MS DOS (сама программа прекрасно может работать и в Windows, вот только восстанавливать реестр в нем очень не рекомендую :)). При запуске программы надо указать в качестве параметра файл system.dat или user.dat, т.е. regundel system.dat (предварительно лучше их скопировать в отдельную директорию во избежание различных недоразумений).

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

([:])

Красным цветом помечены записи с удаленными предками. Их восстановление невозможно до восстановления предков.

В соседней панели (справа) отображается список всех удаленных записей в соответствующем блоке RGDB.

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

В левой нижней панели отображается вероятный путь до записи.

В двух правых панелях отображаются параметры со значениями (работа с ними не предусмотрена).

Выбрав на левой панели интересующую вас запись, можно восстановить ее в автоматическом режиме. При этом используется второй вариант восстановления (см. выше).

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

Для более быстрой работы программы введено ограничение по количеству обрабатываемых удаленных записей (первый килограмм записей :).

Программа не требует инсталляции, а ее архив имеет размер всего 19Кб. Не могу не отметить, что на softlist'e она получила награду 4,5 звезды.

Так что обязательно закачайте эту программу, чтобы в случае возникновения проблем вам не пришлось судорожно искать ее в сети. А вот отсюда качать: http://paullee.ru/regundel. И, надеюсь, что вам она не понадобится :).

читать еще по теме