何らかの障害でWindows OSが起動できないと、そのレジストリを直接参照することはできない。そこでreg loadコマンドやレジストリエディタのロード機能を利用すれば、当該PCから取り出した「レジストリハイブ」を別のPCのレジストリに「ロード」して閲覧または編集できる。
対象OS:Windows 2000 / Windows XP / Windows Vista / Windows Server 2003 / Windows Server 2008
周知のとおり、レジストリはWindowsシステム全般のさまざまな情報を集中的に管理するデータベースである。その内容には設定情報のほか、ソフトウェアの稼働状況のログや履歴なども含まれる。そのため、Windows上で何らかの障害が発生した場合、ログ・ファイルと同様にレジストリも重要な情報源となる。
しかし、障害によってWindows OSが起動できない場合、レジストリエディタのような閲覧のためのソフトウェアも利用できないため、当該コンピュータではレジストリ不能な状態に陥る。つまりレジストリに格納された情報から障害原因を追及できなくなる。
これは障害復旧にも悪影響を及ぼす。例えば元のコンピュータの作業環境を別のコンピュータ上に再現するには、元のコンピュータからアプリケーションの設定が格納されたレジストリ・キーをエクスポートし、別のコンピュータにインポートするという手法がある。しかしレジストリが参照できないとこの手法は使えず、手間のかかる手動設定を強いられてしまう。
こうしたとき、レジストリの「ロード」という機能を活用すると、起動不能のコンピュータのレジストリを参照できる場合がある。具体的にはまず、そのコンピュータからシステム・パーティションを含むハードディスクを取り外し、別の作業用コンピュータに接続してアクセスできるようにする。次に、そのシステム・パーティション内にあるレジストリの実体ファイル(ハイブ・ファイル。詳細は後述)をコピーして取り出し、レジストリに「ロード」すると閲覧のみならず編集も可能となる。つまり、元のコンピュータに依存しない「オフライン」のレジストリ参照が実現できるわけだ(もちろん元のコンピュータのハイブ・ファイルが無事に取り出せる必要があるが)。
レジストリのロード機能のメリットは、ロード先のレジストリを改変しない点だ。ロードされるハイブ・ファイルはレジストリに「接続」されてアクセス可能になるだけで、その内容がレジストリに「コピー」されるわけではない(ファイルシステムでいう「マウント」とよく似ている)。「アンロード」を実行してレジストリからハイブ・ファイルが切り離されると、レジストリにハイブ・ファイルの内容は残らない。従ってレジストリが肥大化したりするような恐れはない。この点で、TIPS「レジストリ・キーのデータを移行・バックアップする」で説明しているレジストリのインポート機能とは大きく異なる。インポートでは、インポート・ファイルの内容がレジストリにコピーあるいは上書きされるからだ。
本稿では、このハイブ・ファイルのロードおよびアンロードの方法や注意点などを説明する。
ロード/アンロードの方法を説明する前に、レジストリの実体であるハイブ・ファイルについて簡単に触れておく。
レジストリの内容は「ハイブ」と呼ばれる単位でいくつかのキーごとに分割して管理されていて、それぞれハイブ・ファイルという別々のファイルに格納されている。レジストリ・キーとハイブ・ファイルの対応を下表に記す。
レジストリ・キー(ハイブ) | ハイブ・ファイル(パスはデフォルトの場合) |
---|---|
HKEY_LOCAL_MACHINE\SOFTWARE | %SystemRoot%\system32\config\ software/software.log |
HKEY_LOCAL_MACHINE\SYSTEM | %SystemRoot%\system32\config\ system/system.log |
HKEY_USERS\.DEFAULT | %SystemRoot%\system32\config\ default/default.log |
HKEY_CURRENT_USER (Windows 2000/Windows XP/Windows Server 2003) |
%SystemDrive%\Documents and Settings\ <ユーザー・プロファイル名>\ntuser.dat/ntuser.dat.log |
HKEY_CURRENT_USER (Windows Vista/Windows Server 2008) |
%SystemDrive%\Users\ <ユーザー・プロファイル名>\ntuser.dat/ntuser.dat.log |
レジストリの主要なキーとハイブ・ファイルとの対応 拡張子のない方のファイルがハイブの実体。.logファイルには、メモリにロードされたハイブの中で書き換えられた部分が格納される。ロードする際には、拡張子.logが付いていない方のファイル名を指定する。 |
上表のうち、拡張子のない方のファイルがいわば実体であり、ハイブの内容をほぼすべて保持している。.logファイルには、Windows OSの稼働中、メモリにロードされたレジストリ・ハイブにて書き換えられた部分が格納される。コピー時には両方のファイルを同一フォルダに保存し、「ロード」の際には拡張子.logが付いていない方のファイルを指定する。
ハイブ・ファイルをレジストリにロード/アンロードするには、reg load/reg unloadコマンドと、レジストリエディタのロード/アンロード機能が利用できる。機能的には同等で、バッチ的な自動実行の場合は前者、対話的な操作の場合は後者を利用すればよいだろう。
reg load/reg unloadコマンドを標準で利用できるのは、Windows XP以降のOS(Windows XP/Windows Server 2003/Windows Vista/Windows Server 2008)に限られる。Windows 2000では、インストールCDの\SUPPORT\TOOLSフォルダにあるサポート・ツールを追加インストールする必要がある(ただし、Windows 2000向けのregコマンドは、Windows XPやWindows Server 2003付属のコマンドとはエラー・メッセージなどが異なっている)。
一方、レジストリエディタ(regedit.exe)はいずれのWindows OSも標準で利用可能だ。ただし、Windows 2000だけはregedit.exeではなくregedt32.exeを利用する必要がある。
ハイブ・ファイルのロード/アンロードには管理者権限が必要なので、あらかじめ管理者権限を持つユーザー・アカウントでWindowsにログオンしておく(Windows Vista/Windows Server 2008でUACが有効な場合、regコマンドやレジストリエディタを管理者として実行する必要がある)。また、ハイブ・ファイルを取り出した元のWindows OSと、ロード先のWindows OSの種類が異なると、ロードに失敗する場合がある。試した限りでは、Windows Server 2003 SP2のハイブ・ファイルは、Windows 2000 SP4でロードに失敗することがあった。なるべく同一バージョンに揃えるか、ロード先の方を新しいバージョンにすることをお勧めする。
ハイブ・ファイルをレジストリにロードして閲覧・編集できるようにするには、前述のとおりreg loadコマンドまたはレジストリエディタのロード機能を使う。
■reg loadコマンドの場合
reg loadコマンドの構文は以下のとおり。
reg load <トップレベル・キー名>\<ロード先サブ・キー名> <ハイブ・ファイル名>
<トップレベル・キー名>には「HKEY_LOCAL_MACHINE(短縮名HKLM)」か「HKEY_USERS(同HKU)」のどちらかを指定する。具体的には、前出の表「レジストリの主要なキーとハイブ・ファイルとの対応」にて、対応するレジストリ・キーが「HKEY_LOCAL_MACHINE」以下なら前者、「HKEY_USERS」または「HKEY_CURRENT_USER」なら後者を選べばよい。
<ロード先サブ・キー名>には、ハイブ・ファイル内のレジストリ・ツリーのルートとなる新規のキー名を指定する。「SOFTWARE」「System」などの既存のサブ・キーと同じ名称を指定してはいけない(重複するのでエラーになる)。また既存のキーと間違えて操作しないよう、例えば「Temp〜」「Backup〜」のような接頭語を付けて明確に区別できるようにすることをお勧めする。
次の例では、「HKLM\Temp_Software」サブ・キーに、「software/software.log」というハイブ・ファイルをロードしている。
reg load HKLM\Temp_Software software
コマンドを実行すると、HKLM\Temp_Softwareサブ・キー以下にsoftware/software.logがロードされ、ほかのレジストリ・キーと同様に閲覧・編集が可能になる。後述のアンロードまたはシステムの再起動をするまで、このハイブ・ファイルはロードされたままだ。
なお、ロードされると自動的に.logファイルは書き換えられる。もちろんロードしたハイブを編集すると、拡張子がない方のファイルも最終的に書き換えられる。万一のとき元に戻せるよう、ハイブ・ファイルはロードする前にバックアップを取っておくことをお勧めする。
■レジストリエディタのロード機能の場合
まずレジストリエディタの左ペインのツリーから、トップレベル・キーとして「HKEY_LOCAL_MACHINE(HKLM)」か「HKEY_USERS(HKU)」のいずれかを選択する(どちらを選ぶかは前述の「reg loadコマンドの場合」の項を参照)。次に[ファイル]−[ハイブの読み込み]を実行し、ハイブ・ファイルとロード先サブ・キー名を指定する。Windows 2000のregedt32.exeではトップレベル・キー選択後、[レジストリ]−[ハイブのロード]を実行する。
以下の画面はいずれもWindows XPのものだが、Windows Server 2003/Windows Vista/Windows Server 2008もほぼ共通である。Windows 2000のregedt32.exeの場合、以下の画面とは異なるので注意していただきたい。
[A]
[B]
これでHKLM\Temp_Softwareサブ・キー以下にハイブ・ファイルsoftware/software.logがロードされる。
ロードしたハイブ・ファイルの閲覧・閲覧が終わったら、アンロードしてレジストリからハイブ・ハイブから切り離す。アンロードもreg unloadコマンドとレジストリエディタのアンロード機能という2種類の操作方法がある。
■reg unloadコマンドの場合
reg unloadコマンドの構文は以下のとおり。
reg unload <トップレベル・キー名>\<ロード先サブ・キー名>
<トップレベル・キー名>\<ロード先サブ・キー名>には、ロードしたときのキー名をそれぞれ指定する。
前述のreg loadコマンドでロードしたハイブ・ファイルは、以下のコマンドラインでアンロードできる。
reg unload HKLM\Temp_Software
なお、レジストリエディタなどでロード先サブ・キー以下を選択したままreg unloadコマンドを実行すると、アクセス拒否エラーが発生することがある。この場合、いったんレジストリエディタ側でサブ・キーの選択を止めてから再度、reg unloadコマンドを実行すればよい。
■レジストリエディタのアンロード機能の場合
まずレジストリエディタの左ペインのツリーからロード先のサブ・キーを選択し、次に[ファイル]−[ハイブのアンロード]を実行する。Windows 2000のregedt32.exeでは、ロード先サブ・キー選択後、[レジストリ]−[ハイブのアンロード]を実行する。
ここで注意すべきは、「SOFTWARE」「System」など既存のハイブのサブ・キーを誤って指定した場合でもアンロードが実行されてしまう点だ。通常は対象のハイブが使用中のためアクセス拒否のエラーが発生してアンロードは失敗するが、万一アンロードが「成功」してしまうとシステムに悪影響を及ぼす危険性がある。十分注意していただきたい。
なお、reg loadコマンドでロードしたハイブ・ファイルはレジストリエディタでアンロード可能であり、その逆もまた可能だ。
●reg saveコマンドの出力ファイルもロード/アンロード可能
レジストリのロード/アンロード機能は、reg saveコマンドあるいはレジストリエディタのエクスポート機能で出力したバイナリ・ファイルにも適用できる。reg saveコマンドについてはTIPS「特定のレジストリ・キー以下を素早くバックアップする」を参照していただきたい。
使い方はハイブ・ファイルの場合と変わらない。例えばreg saveコマンドで出力されたAppBkUp.hivというファイルの内容を閲覧したい場合は、以下のコマンドを実行する(レジストリエディタのロード機能でもよい)。
reg load HKLM\Temp_MyApp AppBkUp.hiv
これでHKLM\Temp_MyApp以下にAppBkUp.hivの内容がロードされ、閲覧・編集が可能になる。編集した場合は、アンロードの時点で編集内容がAppBkUp.hivに反映される。
■この記事と関連性の高い別の記事
Copyright© Digital Advantage Corp. All Rights Reserved.