● レジストリの保存と再構成
Win9x とは異なり、WinNT 系の OS でシステム稼働中にレジストリハイブを「複写」することはできない。当然、WinXP にもあてはまる。
しかし、レジストリの内容を「書き出す」ことは、レジストリに対する適切なアクセス権限さえあれば可能である。ただし、レジストリエディタで「レジストリファイルを書き出す」ことではない。実は、ハイブの形でレジストリを「保存」する機能を、全ての Windows は備えているのである。
レジストリを「保存」すると、文字通り別のハイブファイルに格納して保存することができるのだが、保存時に生成したハイブには大きな特徴がある。元のレジストリを再構成した状態になっているのだ。
レジストリ保存の仕組みは次のようだと推測される。
Windows の稼働中メモリに読み込まれているレジストリから、指定されたレジストリキー以下を順番に取り出し、1つのハイブファイルの中に順次書き出していく。中身が乱雑になった引き出しと、全く空っぽの引き出しを並べ、1つずつ順番に中身を移していくイメージに近いだろう。元のレジストリキーがどんなにフラグメントを持って「分割されて」いようとも、取り出せば「1つ」のキーになり、それをハイブに「保存」するのだから、どんどん整列されていくのだ。
Win9x でレジストリファイル(*.reg)に書き出したものを用いてレジストリを再構成する方法を Regist"o"ry Rev.2 にて紹介したが、基本的な仕組みとしては同じと考えて良い。ただ、一旦「1つにしたレジストリキー」をテキストファイルとして見える形にし、さらに再びそれを取り込む過程を経るため、書き出しや取り込みが失敗することもあったのである。レジストリの「保存」では、類似の障害は起こりえない。
レジストリハイブを書き出すためには、Win9x 系では Windows API を用いたプログラムを作るしかない。WinNT 系では、同様にプログラムを書くか、レジストリエディタを使うか、リソースキットに含まれるユーティリティを使用するしかない。
WinXP では、従来リソースキットに含まれていたレジストリユーティリティが標準で付属している。「reg.exe」というプログラムで、%systemroot%\system32 に存在する。レジストリ関連の API を簡易的にコマンド実行できるようになっており、レジストリの保存も可能だ。コマンドプロンプトを開き、「reg save /?」と入力し実行すれば使い方が表示される。
システム修復ディスク作成時に、レジストリのバックアップとして作られるハイブは、実際にはレジストリの保存機能を使用して作られていると思われる。ここに着眼した人々が「保存された」レジストリを「再構成済レジストリ」として扱い、WinNT 系でも実行可能なレジストリ再構成手法として紹介しているのである。
ちなみに RegCon も、レジストリ保存の機能を中核に、操作性と安全性を高めたレジストリ再構成ツールだ。