Vista/2008/7と旧WindowsのマルチブートでOS選択メニューをひとつにする方法

 Vista (およびWindows Server 2008、Windows 7) とWindows NT/2000/XP/2003のマルチブート環境の場合で、Windows NT/2000/XP/2003のうちの複数のOSがインストールされていると、最初にbootmgrのOS選択画面が表示され、ここで「以前のバージョンのWindows」を選択すると、さらにNTLDRによるOS選択画面が表示され、そこからWindows NT/2000/XP/2003のOSを選択起動することになります。
 これではWindows NT/2000/XP/2003を選択起動する際は2段階のOS選択メニューを通ることになり、あまり使い勝手の良いものではありません。Windows NT/2000/XP/2003のOSが1つだけならboomgrのメニューだけですむので問題はありません。またWindows 9xは直接boomgrのメニューに登録することができますので、これも問題はありません (Windows Vista/2008/7と旧Windowsとのデュアルブートを参照)。
 では、Windows NT/2000/XP/2003のOS選択メニューを通さずに直接bootmgrにWindows NT/2000/XP/2003を登録する方法はないのでしょうか。残念ながら標準的な方法ではできません。しかし、ちょっとした裏技を使えばできないことはありません。以下にその方法を解説します。なお、以下はすでにマルチブート環境ができていることを前提とします。
 Windows NT/2000/XP/2003では、NTLDRを通してカーネルを起動します。逆に言えばNTLDRを通さずにカーネルを起動することができません。そこで、NTLDRを複数持たせてやればそれぞれをbootmgrに登録することができます。NTLDRはファイルですので、これを複数持たせるにはファイル名を変更します。例えば、必要な数だけのNTLDRのコピーを作成し、Windows 2000を起動するNTLDRのファイル名を2KLDR、Windows XPを起動するNTLDRのファイル名をXPLDRというようにします。また、NTLDRは起動するOSをboot.iniファイルで認識します。そこで、boot.iniファイルもNTLDRに合わせて複数作成します。例えばWindows 2000用のboot.i2k、Windows XP用のboot.ixpといった具合です。boot.i2kにはWindows 2000の記述だけを書いておきます。同様にboot.ixpにはWindows XPの記述だけを書いておきます。
 NTLDRが認識するboot.iniのファイル名はNTLDRの中にハードコーディングされていますので、これだけではファイル名を変更したNTLDRも常にboot.iniを読みに行ってしまいます。そこで次に、ファイル名を変更したNTLDRをバイナリエディタで開き、中に記述されているboot.iniの文字列を書き換えてやります。2KLDRならboot.iniをboot.i2kに、XPLDRならboot.iniをboot.ixpに書き換えます (画面1)。書き換える場所は文字列の検索で探してください。Windows 2000附属のNTLDRの場合は1箇所、Windows XP附属のNTLDRなら2箇所あります。このとき、必ずバイト数が変わらないように文字を上書きします。バイト数が変わってしまうとNTLDRが正常に動作しません。また必要以外の場所は絶対に書き換えないでください。

画面1
 なお、Windows Server 2003では、どうやら起動時にNTLDRをチェックしているようで、NTLDRが改変されていると起動できません。したがって、Windows Server 2003の場合はこの方法を取ることができません。Windows Server 2003以外をNTLDRの変更で対処し、Windows Server 2003だけをオリジナルのNTLDRとboot.iniで起動するようにします。そのため、複数のWindows Server 2003をbootmgrから起動することはできません。
 ここまでできたら、このNTLDRをboomgrに登録します。登録の方法では、bcdeditコマンドを使う方法の他に、EasyBCDを使う方法、VistaBootPROを使う方法があります (bcdeditコマンドやEasyBCD、VistaBootPROについてはWindows Vista/2008/7と旧Windowsとのデュアルブートを参照してください)。

bcdeditコマンドを使う場合
1) [コマンドプロンプト] を起動する。
 Windows 2000/XP/2003の場合は管理者としてログインし、コマンドプロンプトで、Windows Vista/2008/7をインストールしたドライブの「\Windows\system32」フォルダをカレントフォルダにしておく。
 Windows Vista/2008/7の場合は、[コマンドプロンプト] を右クリックして [管理者として実行] する。
 なお、Windows 2000/XP/2003が32bit版で、Windows Vista/2008/7が64bit版の場合、Windows 2000/XP/2003のコマンドプロンプトでbcdedit.exeが動作しません (32bit環境で64bitプログラムが動作しない) ので、Windows Vista/2008/7上でコマンドプロンプトを実行してください。

2) コマンドプロンプトに「bcdedit /create /d "Windows 2000 Pro" /application osloader」と入力する (Windows 2000 Proには、ブートメニューに表示したいOS名を入力する)。 「エントリ {xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx} は正常に作成されました。」と表示されたら、{xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx} の部分をメモしておく。

3) 続いて次のように入力する。({xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx} の部分には上記でメモした値を入力する。また、partition=C:は、Vista/2008/7から見てNTLDRがあるドライブ名を入力する。\2KLDRは変更したNTLDRのファイル名を入力する。)
  bcdedit /displayorder {xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx} /addlast
  bcdedit /set {xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx} device partition=C:
  bcdedit /set {xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx} path \2KLDR

画面2
4) 2)と3) を繰り返して、必要なだけのOSエントリを登録する。

5) 「bcdedit」と入力して結果を確認する。

画面3
6) 再起動して、bootmgrのメニューに設定したOSが表示されていること、正しく起動できることを確認する。

画面4
7) 「以前のバージョンのWindows」のエントリは不要になるので、次のbcdeditコマンドで削除する。
  bcdedit /delete {ntldr} /f

EasyBCDを使う場合
1) EasyBCD 1.7.2で「Add/Remove Entries」をクリックし、「Add an Entry」ボックスの「Windows」タブで、「Type」として "Windows NT/2k/XP/2k3" を選択、「Name」欄にブートメニューに表示したいOS名を入力して、「Add Entry」ボタンをクリックする。

画面5
2) 同様に、必要なだけのOSエントリを登録する。

3) OSエントリの登録が終わったら、コマンドプロンプトを管理者として実行する。

4) bcdeditを実行し、登録されたエントリを確認する。

画面6
5) 登録されたエントリでは「path」が「\NTLDR」となっているので、これをOSごとの名前 (例では2KLDR、XPLDR) に変更する。コマンド例は次のとおり。{identifier}には 4) で確認したidentifierを入力する。
  bcdedit /set {identifier} path \2KLDR
  bcdedit /set {identifier} path \XPLDR

6) 正しく変更されているかを再度bcdeditで確認する。

画面7
7) 再起動して、bootmgrのメニューに設定したOSが表示されていること、正しく起動できることを確認する (画面4)。

8) 「以前のバージョンのWindows」のエントリは不要になるので、EasyBCDを起動して、「Add/Remove Entries」をクリックし、「Manage Existing Entries」欄の "以前のバージョンのWindows" を選択して「Delete」ボタンをクリックし、「Save」ボタンをクリックする。これで「以前のバージョンのWindows」のエントリが削除される。

画面8

VistaBootPROを使う場合
1) VistaBootPRO 3.3で「Manage OS Entries」をクリックし、「Add New OS Entry」にチェックを入れ、「OSName」にブートメニューに表示したいOS名を入力、「OS Type」で「Windows Lugacy」を選択、「OS Drive」でVistaから見たNTLDRのあるドライブ名を選択し、「Apply Updates」をクリックする。

画面9
2) 同様に、必要なだけのOSエントリを登録する。

3) OSエントリの登録が終わったら、コマンドプロンプトを管理者として実行する。

4) bcdeditを実行し、登録されたエントリを確認する。

5) 登録されたエントリでは「path」が「\NTLDR」となっているので、これをOSごとの名前 (例では2KLDR、XPLDR) に変更する。コマンド例は次のとおり。{identifier}には 4) で確認したidentifierを入力する。
  bcdedit /set {identifier} path \2KLDR
  bcdedit /set {identifier} path \XPLDR

画面10
6) 正しく変更されているかを再度bcdeditで確認する。

画面11
7) 再起動して、bootmgrのメニューに設定したOSが表示されていること、正しく起動できることを確認する (画面4)。

8) 「以前のバージョンのWindows」のエントリは不要になるので、VistaBootPROを起動して、「Manage OS Entries」をクリックし、「Select an entry to enable options below」欄の "以前のバージョンのWindows (画面では文字化けしている)" を選択して右側にある「X」ボタンをクリックし、「Apply Updates」ボタンをクリックする。これで「以前のバージョンのWindows」のエントリが削除される。

画面12