Windowsでレジストリハイブをロードしてオフラインでレジストリを閲覧・編集するTech TIPS

何らかの障害でWindows OSが起動できないと、そのレジストリを直接参照することはできない。そこでreg loadコマンドやレジストリエディタのロード機能を利用すれば、当該PCから取り出した「レジストリハイブ」を別のPCのレジストリに「ロード」して閲覧または編集できる。

» 2009年01月09日 05時00分 公開
[島田広道デジタルアドバンテージ]
Tech TIPS
Windows Server Insider


「Tech TIPS」のインデックス

連載目次

対象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の場合、以下の画面とは異なるので注意していただきたい。

レジストリエディタでハイブ・ファイルをロードする レジストリエディタでハイブ・ファイルをロードする
まずロード先のトップレベル・キーを指定する。
  (1)トップレベル・キーとして「HKEY_LOCAL_MACHINE(HKLM)」または「HKEY_USERS(HKU)」のどちらかを選択する。
  (2)これを実行するとハイブ・ファイルを指定するダイアログ・ボックスが表示される。→[A]

[A]

ロードするハイブ・ファイルを指定する ロードするハイブ・ファイルを指定する
この例では前述のreg loadコマンドと同じく、「software/software.log」ハイブ・ファイルをロードする。
  (1)ハイブ・ファイルのあるフォルダを選択する。
  (2)ハイブ・ファイル名を入力する。拡張子.logの付いていない方を指定すること。
  (3)これをクリックすると、ロード先サブ・キー名の入力ダイアログ・ボックスが表示される。→[B]

[B]

ロード先サブ・キー名を指定する ロード先サブ・キー名を指定する
「SOFTWARE」「System」など既存のサブ・キーと重複せず、かつ明確に区別できる新規のキー名を指定する。この例では前述のreg loadコマンドと同じく、「HKLM\Temp_Software」サブ・キー以下にロードする。
  (1)ロード先サブ・キー名を入力する。トップレベル・キー(この例では「HKLM」)は省く。
  (2)これをクリックした時点で実際にハイブ・ファイルがロードされる。

 これでHKLM\Temp_Softwareサブ・キー以下にハイブ・ファイルsoftware/software.logがロードされる。

ハイブをロードした後のレジストリエディタの表示 ハイブをロードした後のレジストリエディタの表示
HKLM\Temp_Softwareサブ・キーが、元のコンピュータにおけるHKLM\Softwareサブ・キーに相当する。
  (1)ロードされたハイブ。レジストリエディタで一見した限りでは、ほかのハイブと区別が付かない。

●レジストリ・ハイブのアンロード

 ロードしたハイブ・ファイルの閲覧・閲覧が終わったら、アンロードしてレジストリからハイブ・ハイブから切り離す。アンロードもreg unloadコマンドとレジストリエディタのアンロード機能という2種類の操作方法がある。

■reg unloadコマンドの場合

 reg unloadコマンドの構文は以下のとおり。

reg unload <トップレベル・キー名>\<ロード先サブ・キー名>



 <トップレベル・キー名>\<ロード先サブ・キー名>には、ロードしたときのキー名をそれぞれ指定する。

 前述のreg loadコマンドでロードしたハイブ・ファイルは、以下のコマンドラインでアンロードできる。

reg unload HKLM\Temp_Software



 なお、レジストリエディタなどでロード先サブ・キー以下を選択したままreg unloadコマンドを実行すると、アクセス拒否エラーが発生することがある。この場合、いったんレジストリエディタ側でサブ・キーの選択を止めてから再度、reg unloadコマンドを実行すればよい。

■レジストリエディタのアンロード機能の場合

 まずレジストリエディタの左ペインのツリーからロード先のサブ・キーを選択し、次に[ファイル]−[ハイブのアンロード]を実行する。Windows 2000のregedt32.exeでは、ロード先サブ・キー選択後、[レジストリ]−[ハイブのアンロード]を実行する。

レジストリエディタでハイブ・ファイルをアンロードする レジストリエディタでハイブ・ファイルをアンロードする
この例では前述のreg unloadコマンドと同じく、「HKLM\Temp_Software」サブ・キーをアンロードする。
  (1)ロードしたサブ・キーを選択する。既存のハイブのサブ・キーと間違えないように注意。
  (2)これを実行すると、本当にアンロードしてよいか確認するダイアログ・ボックスが表示されるので[OK]ボタンをクリックする。

 ここで注意すべきは、「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に反映される。

「Tech TIPS」のインデックス

Tech TIPS

Copyright© Digital Advantage Corp. All Rights Reserved.

スポンサーからのお知らせPR

注目のテーマ

AI for エンジニアリング
「サプライチェーン攻撃」対策
1P情シスのための脆弱性管理/対策の現実解
OSSのサプライチェーン管理、取るべきアクションとは
Microsoft & Windows最前線2024
システム開発ノウハウ 【発注ナビ】PR
あなたにおすすめの記事PR

RSSについて

アイティメディアIDについて

メールマガジン登録

@ITのメールマガジンは、 もちろん、すべて無料です。ぜひメールマガジンをご購読ください。