【Windows】"レジストリの差分を確認する方法"

Windowsでシステム上の不具合が出たとき、問題発生前と後のレジストリの差分を比較したいことがあると思います。
その方法について解説します。

起動可能なWindowsでレジストリを比較する方法

RegistryChangesViewという無料で使用できるソフトを使用します。
インストール不要なのでお手軽に使えます。

RegistryChangesViewが活躍する場面

RegistryChangesViewはこんな場面で活躍してくれそうです。

  • ソフトウェアの動作解析・・・インストール後と前のレジストリを比較して動作を調べる
  • 起動するWindowsに対するシステム修復・・・Windowsの特定の機能がおかしいとき、正常なレジストリと比較して原因を探る

レジストリの比較方法

GUIにおける操作方法はこのページでは解説しません。
他のページを参照してください。

ここではRegistryChangesViewが比較できるレジストリの種類と使い分けについて解説します。

RegistryChangesViewはレジストリの参照先が3種類あります。

- ソフト内での項目名 説明
1 current registry 現在のレジストリ
2 saved registry snapshot 任意のタイミングのレジストリ
3 shadow copy システム内に保存されている過去のレジストリ

それぞれの項目についての用途や注意点を個別に見ていきましょう。

1 current registry

現在windowsが持っているレジストリを参照します。 ユーザーの操作にかかわらず多くのレジストリは秒単位で書き換えが行われているので注意が必要です。

2 saved registry snapshot

RegistryChangesViewは任意のタイミングのcurrent registryの値をスナップショットとして保存する機能があります。 例えばマルウェア解析の際に、マルウェアインストール前のレジストリをスナップショットとして保存し、インストール後のスナップショットを取って比較するといった使い方ができます。

3 shadow copy

システム内に保存されているレジストリのバックアップを参照できます。 shadow copyという名前なのでシャドーコピーが参照されるのかと思いきや復元ポイントが参照されているようです。

もしかしたらシャドーコピーやRegBackも参照できるのかもしれません。
(手元の環境はシャドーコピーとRegBackが無効で復元ポイントのみ有効なので未検証)

起動しないシステムのレジストリを比較する

RegistryChangesViewは起動しているWindowsのレジストリ差分しか見れないようです。 起動しないWindowsのレジストリの差分を見たい場合はコマンドを使います。

回復環境のコマンドプロンプトか正常起動するPCへハイブで取得したいレジストリを渡して以下のコマンドを打ってください。

#構文
reg query 出力したいレジストリ /s > 出力先

#例:HKLM\SOFTWAREのレジストリキーをC直下にテキストファイルとして出力
reg query HKLM\SOFTWARE /s >C:\registry.txt

req queryコマンドのsオプションをつけることで再帰的にキーを取得してくれるので、コマンド一回で配下のキーをまるっと持ってきてくれます。

テキストファイルに出力できたら、別のPCに持っていってwinMergeなり、PowershellのCompare-objectなり好きな方法でテキストファイルの差分をチェックします。

Winmergeはフリーの差分チェックソフトです。

Compare-objectについてはこの解説がわかりやすいです。