先日、Windows 7 系の OS を (P2)I2V してみた際に STOP 0x7B に遭遇したので、その解決方法について。
結論としては、レジストリ \HKEY_LOCAL_MACHINE\SYSTEM\ControlSet001\Services\intelide の Start 値が 3 になっているので、それを 0 に変更すると修復できます。(多分)
手順は以下の通り。
- 前提
今回の例は仮想マシンがターゲットです。そのため、仮想マシンの起動ディスク(修復対象の OS がインストールされているディスク)が IDE 接続となっていることを確認してください。(AHCI や SCSI ではありません)
- 次に、起動できない原因が STOP 0x7B であることを確認します。
- 再起動し、スタートアップ修復を選択します。
スタートアップ修復が起動され、修復の完了を待ちます。当然ですがスタートアップ修復をしても修復はされません。(なので修復自体は待たずにキャンセルしてショートカットしても問題ありません。)
修復が完了または中断し「スタートアップ修復は問題を検出できませんでした」なり「この問題を自動的に修復できません」なりのダイアログに変わったら、「システム復元とサポートの詳細オプションの表示」を選択します。選択後、IME の選択やログオンの要求があればその指示に従って進めます。
- システム回復オプションのダイアログが表示されたら「コマンドプロンプト」を選択します。
- コマンドプロンプトで「regedit」と入力し、レジストリエディタを起動します。
- レジストリハイブを読み込むために「HKEY_LOCAL_MACHINE」または「HKEY_USERS」を選択します。
起動したレジストリエディタにインストール OS のレジストリが表示されているように見えますが実は違います。
これはスタートアップ修復で起動している OS のレジストリなので、これを操作してもインストール OS(= STOP 0x7B を発生されている OS)に影響を与えることができません。
そのため、インストール OS のレジストリのファイルを読み込みます。これを「ハイプの読み込み」といいます。 - 「ファイル」→「ハイプの読み込み」を選択します。
- 現在のディレクトリを確認します。【重要】
カレントドライブが X: になっていることを確認します。
X: はスタートアップ修復用 の OS のドライブなので、インストールしている Windows のドライブと異なる点に注意します。
X: にもレジストリファイル(X:\Windows\System32\Config\SYSTEM)がありますが、このドライブのレジストリファイルは操作しません。 - OS がインストールされているドライブの \Windows\System32\Config をポイントします。
今回の場合だと、D: が OS のドライブだったので、D:\Windows\System32\Config を選択します。
- 「SYSTEM」という名のファイルを選択します。
- キー名を入力します。
キー名自体に意味はないので、どのような名前にしても良いです。
個人的には「aaaaaaaaaaaaaaaaaaa」のような無意味かつ長い名前にしたほうが、どこにハイブをマウントしたのかが分かりやすいのでオススメです。 - マウントしたハイブ以下の ControlSet001\Services をポイントします。
- intelide の start 値を変更します。
intelide の start 値が 3 となっているはずなので、これを 0 にします。
- ControlSet002 が存在する場合、ControlSet001 と同様に変更します。
- 終了したらレジストリエディタ等を閉じて行き、再起動します。
うまくいけば 0x7B が回避され、Windows が起動するはずです。
- 上記で回復できなかった場合。
Fix: BSOD Error 0x0000007B on Boot on Windows 7 and Server 2008 R2 によれば、各サービスの Start 値は以下のようです。
Start 値の意味は 0 が Boot, 3 が手動です。(残りの値は、1:システム, 2:自動, 4:無効 です。)Service 仮想 物理(SATA) 物理(RAID) aliide 3 3 3 amdide 3 3 3 atapi 0 0 0 cmdide 3 3 3 iastorv 3 3 3 intelide 0 3 3 LSI_SAS 0 3 3 msahci 3 0 0 pciide 3 0 3 viaide 3 3 3 各サービスの Start 値が上表と同じ値になるように変更します。(今回は仮想マシンがターゲットなので、上表の「仮想」の列と同じ値になるようにします。)
変更後、再起動して STOP 0x7B が回避できることを確認します。(未確認) - 応用
たとえば BIOS(UEFI)で IDE(レガシー)から AHCI に変更した後に STOP 0x7B で起動できないようなケースでは、上記の msahci の Start 値を 3 から 0 に変更することで起動が可能になるかもしれません。(未確認)