第9章 レジストリにアクセスする

起動しないwindowsのレジストリにアクセスするには

ファイルをサルベージするレスキュー用ツールとしてWinPEを使うことを推奨してきたが、救い出したいデータがファイルばかりであるとは限らない。

この章では、Windowsが起動しなくなったときに、そのレジストリにアクセスする方法を紹介する。

今回は例として、シェアウェアをインストールしていたWindowsが起動しなくなってしまい、OSを再インストールすること自体は厭わないが、肝心のシリアルキーをメモしておらず、作者とも連絡が付かないので困っているというケースを想定してみた。

このシェアウェアは、インストール時にシリアル番号の入力を求められ、それを正しく入力すると、以下のようにHKEY_CURRENT_USER\Software\UiUicy\シェアウェアというキーにシリアルキーという項目で保存される仕組みになっている。下図は、Windowsが正常な状態だった時にレジストリエディタからみた関連キーである。このシェアウェアは毎回起動時に、レジストリのこのキーが正しい値であるかどうかを確認して、正しい時だけ起動するタイプなので、ファイルだけバックアップしていても駄目なのだ。

シリアルキー

レジストリにキーが保存されていることは覚えており、起動しないWindowsからレジストリのデータさえ取り出せれば、(OS再インストール後に)このシェアウェアをインストールするときにシリアルキーを入力できるのだ。なんとかレジストリにアクセスしてみよう。

具体的手順

1.WinPEを起動する。

今回は第4章で行った、ネットワーク経由で共有フォルダにデータをエクスポートする計画なので、net useコマンドで共有フォルダにMドライブを割り当てておく。今回の例では以下のような環境であったと仮定している。

 項目  データ
 起動しないWindowsのユーザー名  user1
 退避先PCのローカルIPアドレス  192.168.1.11
 退避先共有フォルダのフォルダ名  share
 退避先PCのユーザー名  user2
 退避先共有フォルダのパスワード  password

また、HKEY_CURRENT_USER\Software の本体は、C:\Documents and Settings\user1\NTUSER.DATであるが、環境によっては隠しファイルになっているので、あらかじめattribコマンドで属性を変更しておく。

そして、レジストリエディタを起動するには、regeditと打つ。

とりあえず、以上のことを実行するには、以下の黄色文字のコマンドを実行すればよい。

X:\windows\system32>net use m: \\192.168.1.11\share /u:user2 password
コマンドは正常に終了しました

X:\windows\system32>c:

C:\>cd docume~1\user1

C:\DOCUME~1\user1>attrib -s -h -r ntuser.dat

C:\DOCUME~1\user1>regedit

2.レジストリエディタが開いたら、HKEY_LOCAL_MACHINEをクリックして、反転表示させる。

HKEY_LOCAL_MACHINE

なお、この段階で表示されているレジストリのキーはWinPEのものであって、レスキュー対象のWindowsのものではないので、誤解のないように。

3.下図のように「ハイブの読み込み(L)...」をクリック。 (上記の「手順2」でHKLMを反転していないと、「ハイブの読み込み(L)...」が選べない)

ハイブの読み込み

4.HKEY_CURRENT_USER\Software の本体である、C:\Documents and Settings\user1\NTUSER.DATを開く。(Cドライブに割り当てられているとは限らないので、各自確認のこと)  

NTUSER.DAT

5.読み込んだハイブにキー名を割り振る。好きな名前で良いのだが、アルファベット順に表示されるので a のような名前が良い。

キー名

6.すると、HKEY_LOCAL_MACHINEの下にaというキーができ、その配下に、壊れたWindowsのHKCUの中身が付加される。見事に起動しなくなったWindowsのレジストリにアクセスできた瞬間だ。(レジストリに損傷がある場合は、ハイブ読み込みエラーが出て失敗する。)

ここで紙と鉛筆でシリアルをメモしても良いが、今回は電子データで記録を残そうと思う。下図のようにキーを「エクスポート(E)」する。

エクスポート

7.エクスポートの保存先を、最初に設定しておいたMドライブ(退避先の別PCの共有フォルダに割り振っておいたドライブ名)にし、名前は何でも良いが、せっかくIMEを使えるようにしておいたことだし、日本語ファイル名の「シリアルキー.reg」にしてみた。「保存」ボタンを押すと、共有フォルダ内にregファイルが生じる。あとで結合するなりして有効利用できるだろう。

エクスポートファイルの保存先指定

8.用が済んだら、読み込んだハイブはアンロードしておく。a を反転させておいて、メニューから「ハイブのアンロード(U)...」を選ぶ

aキー反転

ハイブのアンロード

確認ダイアログ

9.レジストリエディタを閉じて終了。

レジストリについて

上で紹介したレジストリへのアクセス方法は、読み取り専用アクセスでなく書き込みもできる。よってたとえば自分の明確な意思でレジストリのキーを変更しておいて、再起動をかけたらWindowsが起動しなくなったような場合には、WinPEから当該キーを書き直すことで窮地を脱せる可能性はある。

上記例はHKEY_CURRENT_USERへのアクセスだったが、HKEY_LOCAL_MACHINEへもアクセスできる。キー名とハイブの関連については、Microsoftのサポートページを参照のこと。むしろ隠しファイルでない分、HKLMのほうが手順は簡単である。

ただしレジストリについては色々難しい問題があるので、起動しなくなったときにすぐこの方法で治そうとせずに、「システムの復元」とか「前回正常起動時の設定で起動」などの方法を優先すべきであると思う。


<目次へ> <前のページへ> <次のページへ>