Windows Vista のデバッグ
最終更新日: 2005年12月28日
始めに : Boot.ini ファイルのデバッグ
Microsoft Windows Vista の最新ビルドでカーネル デバッガーをセットアップしようとする場合には、大きな変更点に気付くでしょう。所有しているビルドによって、Boot.ini ファイルは、ビルドに存在しないか、存在していても無視されます。
このヒントでは、Windows Vista を実行しているコンピューターでのカーネル デバッグの構成方法を説明します。これらの説明は、最も単純なケースである、Windows Vista のみがオペレーティング システムとしてインストールされているコンピューターを対象としています。Windows Vista と Windows Vista より前のバージョンの Windows の両方を持つコンピューターに対する説明は、多少複雑であり、Windows Vista 用の Windows Driver Kit (WDK) に詳しく記載されます。
注 :
Windows Vista の初期のベータ テスト ビルドでは、依然として Boot.ini ファイルが使用されています。そして、それらのビルドでは、Boot.ini ファイルを編集してデバッグをセットアップできます。依然として Boot.ini を使用するビルドは、Boot.ini ファイルの "NOBCD" ブート パラメーターによって識別できます。NOBCD パラメーターは、これらの Windows Vista の初期のビルドのみでサポートされました。NOBCD パラメーターと Boot.ini ファイルは、後のビルドでは無視され、Boot.ini ファイルは、5253 およびそれ以降のビルドでは作成されません。
変更点について
Windows Vista では、新しいブート ローダー アーキテクチャ、Boot Configuration Data (BCD) と呼ばれる、新しいファームウェアに依存しないブート構成とストレージ システム、および新しいブート オプション編集ツールの BCDEdit (BCDEdit.exe) が導入されています。これらのコンポーネントは、より迅速かつ安全に Windows を読み込むよう設計されています。
従来の Windows NT ブート ローダーの Ntldr は、Windows ブート マネージャー (Bootmgr.exe) とシステム固有のブート ローダーのセットに置き換えられます。新しい構成では、Windows ブート マネージャーは汎用的であり、それぞれのオペレーティング システムに固有の要件は認識していません。そして、システム固有のブート ローダーがそれぞれ、読み込むシステム用に最適化されます。
Boot.ini の扱いについて
Windows Vista のみが実行されている BIOS ベースのコンピューターでは、Boot.ini テキスト ファイルは、隠されているのではなく、存在していません。そして、このファイルが暫定版のベータ テスト ビルド上に残っていた場合は、すべて無視されます。以前のバージョンの Windows と Windows Vista の両方を持つコンピューターでは、以前のバージョンをサポートするために Boot.ini ファイルが残っています。しかし、それが Windows Vista でのブートに影響を及ぼすことはありません。
Windows Vista が実行されている EFI ベースのコンピューターでは、依然としてブート オプションが NVRAM に格納されます。ただし、Windows Vista では、EFI ベースのコンピューターのブート オプションを編集するのに、BIOS ベースのコンピューターの場合と同様に BCDEdit を使用します。Windows API や NvrBoot のような特殊なツールを使用して直接 NVRAM にアクセスするのではありません。
また、Windows Vista には、WMI プロバイダーによってサポートされ、BCD をプログラムで編集できるようにする新しい BCD クラスが含まれています。BCD クラスについては、このヒントの最後を参照してください。
ブート オプションの編集方法
BCDEdit (Bcdedit.exe) は、Windows Vista のブート オプションを編集するコマンド ライン ツールです。Bootcfg (Windows XP や Windows Server 2003 に含まれるブート オプション編集ツール) と NvrBoot (EFI ベースのコンピューター用のブート オプション編集ツール) を置き換えるものです。
Windows Vista でブート構成を編集するには、BCDEdit を使用します。たとえ Windows Vista もインストールされたコンピューターにインストールされているとしても、Windows Vista より前のバージョンの Windows では、引き続き Bootcfg と NvrBoot を使用して Boot.ini ファイルを編集できます。
Windows Vista でカーネル デバッグを構成する
Windows Vista では、下記の手順に従ってデバッグ用のブート エントリを作成できます。この手順では、BCDEdit を使用します。これは、Windows Vista 用のブート オプション編集ツールです。
簡単に手順をまとめると、下記のとおりになります。
1. | システム特権でコマンド プロンプト ウィンドウを開きます。 |
2. | 必要に応じて、グローバルなデバッグ設定を編集します。 |
3. | グローバルなデバッグ設定を表示します。 |
4. | 既存のブート エントリをコピーして、新しいブート エントリを作成します。 |
5. | 新しいブート エントリをブート メニューに追加します。 |
6. | 新しいブート エントリでのデバッグを有効にします。 |
7. | デバッグが新しいブート エントリに設定されていることを確認します。 |
8. | 既定のブート エントリを変更します。 |
9. | コンピューターを再起動します。 |
このヒントの以降の部分では、各手順について詳細に説明します。
1. システム特権でコマンド プロンプト ウィンドウを開きます。
たとえユーザーがコンピューターの Administrator グループのメンバーであるとしても、コマンド プロンプト ウィンドウがシステム特権を持っている必要があります。
1. | [スタート] ボタンをクリックし、[すべてのプログラム] をポイントして、[アクセサリ] をクリックします。 |
2. | [コマンド プロンプト] を右クリックして、[管理者として実行] をクリックします。 |
2. 必要に応じて、グローバルなデバッグ設定を編集します。
Windows Vista では、デバッグする接続の種類 (シリアル、1394、または USB) と接続の種類の属性 (debugport またはチャネル) は、すべてのブート エントリに影響を与えるグローバル パラメーターである dbgsettings によって決定されますが、デバッグする接続の種類と属性は、特定のブート エントリに個々に設定できます。
Windows Vista の既定のグローバルなデバッグ設定は、下記のとおりです。

グローバルなデバッグ設定を変更するには、下記のコマンド構文を使用します。

下記に例を示します。

コマンドが成功すると、BCDEdit は下記のメッセージを表示します。
The operation completed successfully.
3. グローバルなデバッグ設定を表示します。
グローバルなデバッグ設定を変更するコマンドが成功したことを確認するには、下記のコマンドを使用してシステムのすべてのブート設定を表示します。

表示される一覧で、グローバルなデバッグ設定は最後のエントリです。
下記の例は、このヒントの、前の手順 2 で例に示した bcdedit /dbgsettings 1394 channel:1 コマンドの後の設定を示しています。
...
Kernel Debugger Settings Group
------------------------------
Identifier: {dbgsettings}
Type: 20100000
Debugger type: 1394
Debugger 1394 channel: 1
...4. 既存のブート エントリをコピーして、新しいブート エントリを作成します。
コマンド プロンプトで、下記のコマンドを入力します。このコマンドは、Windows を起動するために最後に使用された、{current} として識別された Microsoft Windows ブート エントリをコピーして、DebugEntry という名前の新しいブート エントリを作成します。この名前は、このヒントの残りの部分で使用されます。新しいエントリには、任意の名前を割り当てることができます。

コマンドが成功すると、BCDEdit は下記のようなメッセージを表示します。
The entry was successfully copied to {68602c25-5097-11da-99de-000802209f1b}.上記メッセージの、かっこで囲まれた Global Universal Identifier (GUID) は、新しいブート エントリの識別子です。その識別子を使用して、後続のすべての BCDEdit コマンドでそのエントリを表します。
コマンドが失敗する場合は、コマンド プロンプト ウィンドウ内でシステム特権で実行していることと、すべてのコマンド パラメーターが {current} の前後のかっこを含めて、適切につづられていることを確認してください。
5. 新しいブート エントリをブート メニューに追加します。
Windows Vista では、新しいブート ローダー エントリが自動的にブート メニューに加えられません。この手順を省略すると、ブート ローダー エントリが 1 つしかないためにブート メニューが表示されなかったり、メニューが表示されても新しいブート ローダー エントリが一覧表示されない場合があります。
ブート ローダー エントリは、任意の順序に配置できます。各識別子 (GUID または {current} のような、予約されている識別子) は、スペースで区切ってください。ブート メニューの {current} エントリの後に DebugEntry ブート エントリを追加するには、下記のコマンドを使用します。

下記の例に示すとおり、このコマンドで、{ID} は、かっこ ({}) を含めて DebugEntry ブート ローダー エントリの GUID です。

表示順序が正しいことを確認するには、下記のコマンドを使用します。

追加のパラメーターなしで bcdedit と入力すると、BCDEdit は、ブート マネージャー エントリとブート ローダー エントリを、メニューに表示される順序で表示します。
下記の例が示すように、Windows ブート マネージャー エントリは、ブート メニューの表示順序も含みます。

6. 新しいブート エントリでのデバッグを有効にします。
下記の手順に従い、このヒントの、前の手順 4 で作成した DebugEntry ブート エントリでのデバッグを有効にしてください。最初の手順が必要なのは、デバッグを設定するコマンドのブート エントリの GUID が必要だからです。
1. | コンピューターのすべてのブート ローダー エントリを一覧表示するために、下記のコマンドを入力します。  |
2. | DebugEntry という名前のブート エントリを見つけて、エントリの Identifier 属性から、前後のかっこ ({}) を含めて GUID をコピーします。  |
3. | DebugEntry ブート エントリでのデバッグを有効にするために、下記のコマンド構文を使用します。  {ID} は、手順 2 でブート エントリからコピーした GUID を表します。 下記の例は、このコマンドに手順 2 の例の GUID を指定した場合を示しています。  コマンドが成功すると、BCDEdit はコマンド プロンプトに下記のメッセージを表示します。 The operation completed successfully. |
7. デバッグが新しいブート エントリに設定されていることを確認します。
下記の手順に従って、デバッグが新しい DebugEntry ブート エントリに設定されていることを確認します。
1. | コンピューターのブート ローダー エントリを一覧表示するために、下記のコマンドを使用します。  |
2. | DebugEntry という名前のブート エントリを見つけます。下記の例が示すように、結果には、エントリの Kernel debugger 属性が含まれており、その値が Yes である必要があります。  |
8. 既定のブート エントリを変更します。
既定の ブート エントリは、ブート マネージャーが、ブート メニュー タイムアウトの期限が切れるときに選択するブート エントリです。以前のバージョンの Windows とは異なり、Windows Vista では、ブート メニューのブート エントリの順序 (表示順序) によって、どのブート ローダー エントリが既定であるかが決定されません。
既定では、システムが作成する Microsoft Windows ブート エントリが既定のエントリです。既定のエントリは、最近のシステムの起動に使用されるブート エントリでもあるので、{current} であると認識されます。
新しいデバッグが有効なブート ローダー エントリ DebugEntry を既定のブート エントリにするには、下記のコマンドを使用します。

下記の例が示すように、{ID} は DebugEntry ブート エントリの GUID です。

コマンドが成功すると、BCDEdit はコマンド プロンプトに下記のメッセージを表示します。
The operation completed successfully.
この変更を確認するには、bcdedit コマンドをパラメーターなしで使用し、ブート メニューに示されるエントリを表示します。

このコマンドは、下記の出力を生成します。DebugEntry GUID のすべてのインスタンスが、予約された識別子 {default} で置き換えられたことに注意してください。
識別子 {default} と {current} は、既定のブート エントリとシステムを起動するために最近使用されたブート エントリを示す、予約された識別子です。ブート エントリが、既定および最新のエントリである場合、その識別子は {current} です。ブート エントリが既定または最新のエントリでない場合、BCDEdit はその識別子としてそのオリジナルの GUID を復元します。
ブート エントリを Description 属性の名前で識別できますが、BCDEdit コマンドでは、説明ではなく識別子を使用する必要があります。

9. コンピューターを再起動します。
コンピューターを再起動するときに、Windows ブート マネージャーはブート メニューを表示します。Microsoft Windows ブート エントリまたは DebugEntry を選択できます。いずれも選択しない場合、Windows ブート マネージャーは、既定の DebugEntry を選択します。

詳細情報 :
Windows Driver Kit
Tools for Debugging Drivers
Platform SDK
Boot Configuration Data (BCD)
BCD Classes
Windows Hardware Development Central
開発ツールとテスティング : 概要
Debugging Tools for Windows - 概要
パーソナル コンピューターのドライバーや更新プログラムをお探しですか?