レジストリハイブの編集

レジストリを格納したファイル(レジストリハイブ)をバイナリエディタで編集するという荒業?を経験したので、その記録。

数ヶ月前のことになるが、レジストリが壊れた。
PCがブルースクリーンで落ち、どうもそのときに壊れたらしい。

丸ごと吹っ飛んだのならあきらめもつくが、中途半端に自動復旧されたらしく、動作がおかしくなった。

レジストリだなあと検討をつけ、レジストリクリーナー的なツールを何通りか使ってみたが、どのツールも使用中に落ちる。
試行錯誤して、ある特定のレジストリエントリで落ちているらしいことが判明。

次いで、そのエントリをレジストリエディタで見てみると、サブキーが無限に開ける状態になっていた。
つまり、
・エントリを開く→キーがひとつある
・そのキーを開く→さらにその中に同じ名前のサブキーがある
以降、この2番目が延々と続く状態。
これを普通のツールで開いたら、無限ループになるかメモリ不足で落ちてしまうか、という事態は避けられない。

手に入る限りのレジストリ関連ツールを試してみたが、どれもだめ。

で、ここでさっさと「システムの復元」を試せばよかったのだと思う。
しかし、私は毎日復旧ポイントが自動生成されるのを知らず、システムの復元をやったらPCがずっと前の状態に戻ってしまうと信じ込んでいた。

復旧ポイントは直近1ヶ月しか保存されないようだ。
気づいたときには、もうまともな復旧ポイントは残っていなかった。

そしてさらに数ヶ月。このページを見つけた。

レジストリ・レジストリハイブファイルの内部構造 – 【アダ被の部屋】Wiki

このファイル構造を直にいじれば、レジストリを直せるかもしれない!
だめもとでやってみることにした。

以下、非常に危険なので実際にやるのはオススメしない。

まず、レジストリを保存しているファイル(レジストリハイブ)を取り出す。
最新のレジストリハイブはシステムがロックしているので、復旧ポイントのファイルを使う。
これは
C:System Volume Information
の中に格納されている。
詳しくはこちら

私の場合、壊れたエントリが含まれているのはユーザ個別のレジストリ(HKEY_USERS)で、これが格納されているのはユーザ個別のファイルなので、それをコピーしてきた。

といっても、ファイル名からではどれがどのユーザのファイルかわからないのだが、現在のレジストリファイル(Documents and Settings{userid}
tuser.dat)のファイルサイズと見比べて、見当をつけた。

つぎに、これをバイナリエディタで開く。
私はStirlingを使用した。

異常が起きているキーの場所を文字列検索で捜し、それを上述のファイル構造資料を基にチェック。
「サブキーの数」が1になっていたのを0に書き換え、保存。

こんどはこれをシステムに書き戻さなければならない。
現在のレジストリファイル(Documents and Settings{userid}
tuser.dat)はロックされていて上書きできない。
そこで、システムをセーフモードで起動し、Administratorでログインして試したら上書きできた。

そして再起動。

めでたく、異常なレジストリキーは消えてなくなった。

やれやれ。
メモはしたけれど、もう一度やりたくはないな…
システムがおかしくなったら、とにかく「システムの復元」!
肝に銘じよう。

コメント

タイトルとURLをコピーしました