レジストリのバックアップにレジストリエディタの .reg ファイル書き出し機能を使うのは危険

よく PC 中級者向けの雑誌や Web 記事などを読むと、Windowsレジストリのバックアップ方法 (特に、非公開のレジストリキーをいろいろいじったカスタマイズ方法等の紹介の記事に付随する注意書きなど) として、レジストリエディタの「エクスポート」機能を用いて現在の Windowsレジストリの内容をすべて .reg ファイルに書き出しておき、問題が起こったら (例: 重要なキーを消してしまったら) 後でその reg ファイルをダブルクリックして読み込むように教示する解説記事がある。


この方法は以下の 3 つの点で危険である。

  1. 改行コードの扱いが苦手。
    .reg ファイルに REG_SZ 型等の文字列型のデータをエクスポートすると、改行はそのまま改行コードとして .reg ファイルに出力されるが、その .reg ファイルをレジストリエディタでインポートしようとすると、不具合が発生する (その文字列データはなかったことにされてしまう)。
    これは非常に昔のバージョンの Windows から存在するが、未だに修正されていない不具合 (仕様?) である。
    これにより、よくある例では、メールソフトウェアがレジストリに保存している「署名」のデータ (大抵、改行コードが何個か含まれていて、そのまま REG_SZ 型として保存されている) は復元できない。

  2. セキュリティ情報がエクスポートされない。
    .reg ファイルにはレジストリキーのセキュリティデータ (レジストリキーの所有者、アクセス制御リスト、監査設定) がエクスポートされないので、重要なキーを削除してしまった場合などはそのキーに関するセキュリティは復元できない (親のキーのセキュリティを継承するようになってしまう)。
    そのため、セキュリティ上の問題が発生することがある。これはレジストリエディタの仕様である。

  3. 新たに作成されたキーが復元により削除されない。
    まずレジストリ全体を .reg ファイルにバックアップし、その後に新しくキーまたは値を作成・書き込みし、その操作を取り消そうと思って先ほどバックアップした .reg ファイルをインポートして復元しても、最初にバックアップした時点で存在しなかった (新しく作成した) キーまたは値は当然削除されない。
    たとえば、ウイルスかもしれない exe ファイルをダブルクリックする前に念のためレジストリをバックアップして、次に exe ファイルを起動したところ、exe ファイルが Run キーに不正なプログラムを登録し、常駐するようにしたとする。
    その後に、「あっ、ウイルス踏んだ!」と気付いて先ほどバックアップしたレジストリキーをインポートしても、exe ファイルが Run キーに登録した不正なプログラムは削除されない。
    しかし、ユーザーはレジストリは完全に元の状態に戻っていると勘違いして安心しているので、ウイルス等の有害なプログラムが放置されてしまう。


したがって、Windowsレジストリのバックアップ方法としてレジストリエディタを使用する方法は上記の危険性があるので、少し変わった作業をする前のバックアップ作業としてこの方法だけに頼ることは推奨されない。より良い方法は、ntbackup やコンピュータの復元などのシステムレベル (Windows レジストリの Hive ファイルレベル) でレジストリをバックアップ・復元することである。