General Paul Lee Project
О... Новости Статьи Софт Кнопки Форум Написать
73144998
General Paul Lee Project

Реестр! Как много в этом... в не:м...
(гораздо больше, чем кажется с первого взгляда)

screen shot
SoftList: 4.5 звезды
Предлагаю вашему вниманию средство просмотра и восстановления удаленных записей в файлах реестра Win98/Me
Registry UnDelete v.1.2 (19K) 09.12.2001

Registry UnDelete v.1.2 source code (30K) 09.12.2001

Эта программа работает в DOS-режиме и обращается к файлам реестра напрямую, минуя функции Windows. Интерфейс заимствован из Registry Viever'а и не будет вновинку тем, кто его уже использовал.
Как видно из названия программы, ее назначение - восстановление удаленных записей из реестра. Восстановление возможно только записей целиком (параметры удаленные отдельно от записи восстановить нет возможности) и только до упаковки файла реестра (происходит при загрузке системы). Работа с файлами реестра Win95 не поддерживается, поскольку способ удаления записей там иной.
Перед использованием программы настоятельно рекомендую ознакомиться с нижеследующим текстом. Собственно полнофункциональная версия не выходила в свет именно по причине отсутствия этого, пусть небольшого, но необходимого, описания.

Вот несколько моментов, поясняющих как происходит удаление записей из файла реестра:
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 все свободные записи смещаются в единый блок в конце блока.

Теперь о программе.

В верхней левой панели отображается список всех удаленных (неупакованных) записей. В качестве имени используется номер записи
([<номер в RGDB>:<номер RGDB>]).
Красным цветом помечены записи с удаленными предками. Их восстановление невозможно до восстановления предков.
В соседней панели (справа) отображается список всех удаленных записей в соответствующем блоке RGDB.
В обоих панелях записи упорядочены в порядке обратном удалению.
В нижней левой панели отображается вероятный путь до записи.
В двух правых панелях отображаются параметры со значениями (работа с ними не предусмотрена).
Выбрав на левой панели интересующую вас запись, можно восстановить ее в автоматическом режиме (). При этом используется второй вариант восстановления (см. выше).
Если вас не устраивает режим автоматического восстановления, то можно воспользоваться режимом ручного выбора соответствия между записями. Для этого, выбрав на левой панели интересующую вас запись, необходимо переключиться в соседнюю панель возможных значений и, выбрав нужное, восстановить ().
Для более быстрой работы программы введено ограничение по количеству обрабатываемых удаленных записей (первый килограмм записей :).

Если у вас есть возможность перевести этот текст на инглиш лучше, чем это получилось у меня, то буду рад помощи.
As can be seen from name of program, its purpose - recovering the deleted records from registry. Recovery possible only the records wholly (parameters deleted apart from record to restore no possibility) and only before packing the file of registry (occurs when the system is loading). Work with files of registry Win95 is not supported, since way of delete the records there other.
Before using this program, urgently recommend to get acquainted with following text.

Here is several moments, explaining how proceeds deleting the record from file of registry:
1. In table RGKN the record is marked, as deleted and not packed.
2. Its address registers in headline RGKN, as address first free.
3. The previous first free record will becomes the following free record.
Thereby creating the chain of deleted records, at the head with the last deleted. This lasts before packing, when all free space in table moves in united block at the end.
4. As from Win98 (possible earlier?), number of record (number of RGDB and number into RGDB) is not erased, that allows searching for deleted records in registry.
5. When deleting the record in block RGDB, in the same way either as in RGKN, creating the chain of deleted records, where first is the last deleted record.
6. Full univocacy at searching for deleted records is impossible, since number of deleted record in block RGDB even so is erased, and for deleted record by single useful information on location is number of RGDB, in which it inheres.

Source from afore-mentioned, perhaps two variants of recovery:
1. Recovering the record to produce strictly in the order inverse of their deleting. I.e. information on last deleted record in RGKN is put in correspondence to information on last deleted record in specifieded block RGDB.
2. When recovering the record in Nth block RGDB, count amount the preceding deleted records in RGKN, being situated in this block RGDB, and recovery the record to accordingly sequence.

Situation grows worse that that when making the new record in block RGKN, system choose the first free record, i.e. the last deleted record. Thereby, gets lost real information about location of deleted record, and records can be recovered with invalid path. However themselves given been kept pre-recorded are not deleted and become so-called "lost" (block free, but on it no reference from tables RGKN). This fact not breaks wholeness of registry file, but powerfully obstructs work with deleted records. After packing, either as in RGKN, in RGDB all free records are joined in block at the end of RGDB.

Now about program.

In upper left panel is displayed the list of all deleted (not packed) records. As name is used number of record
([< number in RGDB >:< number of RGDB >]).
Records with deleted parents in red color. Their recovery impossible before recovering the parents.
In nearby panel (on the right) is displayed the list of all deleted records in corresponding block RGDB.
In both panels the records are ranked in order to inverse deleting.
The probable path to record is displayed in lower left panel.
The parameters with importances are displayed in two right panels (work with them is not provided).
Having chosen on left panel interesting you record, possible recovery it in automatic mode (). Is it herewith used the second variant of recovery (refer to above).
If you don't wish use automatic mode of recovery, that possible to use manual mode of choice of correspondence to between records. For this, having chosen on left panel interesting you record, necessary be switched in nearby panel of possible importances and, having chosen necessary, recovery ().
For faster functioning (working) the program included restriction on amount processed deleted records (the first kilogram of records :).

Sorry my english... If you have possibility good translate this text from russian, then do it and write me please.