KDNET ネットワーク カーネル デバッグを手動で設定する

Windows 用デバッグ ツールは、ネットワーク経由でカーネル デバッグをサポートします。 この記事では、ネットワーク デバッグを手動で設定する方法について説明します。

重要

ネットワーク デバッグの手動設定は、複雑でエラーが発生しやすいプロセスです。 ネットワーク デバッグを自動的に設定するには、「KDNET ネットワーク カーネル デバッグの自動設定」を参照してください。 すべてのデバッガー ユーザーが KDNET ユーティリティを使用することを強くお勧めします。

デバッガを実行するコンピューターはホスト コンピューターと呼ばれ、デバッグ対象のコンピューターはターゲット コンピューターと呼ばれます。 ホスト コンピューターは Windows 7 以降を実行している必要があり、ターゲット コンピューターは Windows 8 以降を実行している必要があります。

ネットワーク経由でのデバッグには、他の種類の接続を使用したデバッグと比較して、次のような利点があります。

  • ホスト コンピューターとターゲット コンピューターを、ローカル ネットワーク上の任意の場所に配置できます。
  • 1 台のホスト コンピューターから多数のターゲット コンピューターを簡単にデバッグできます。
  • 2 台のコンピューターがある場合、両方ともイーサネット アダプターを備えている可能性が高いです。 両方ともシリアル ポートまたは 1394 ポートを備えている可能性は低くなります。
  • ネットワーク デバッグは、シリアル ポート デバッグよりも高速です。

サポートされているネットワーク アダプター

ホスト コンピューターでは任意のネットワーク アダプターを使用できますが、ターゲット コンピューターでは、Windows 用デバッグ ツールでサポートされているネットワーク アダプターを使用する必要があります。 サポートされているネットワーク アダプターの一覧については、「Windows 10 のネットワーク カーネル デバッグでサポートされているイーサネット NIC」と「Windows 8.1 のネットワーク カーネル デバッグでサポートされるイーサネット NIC」 参照してください。

Debugging Tools for Windows のインストール

Windows 用デバッグ ツールがホスト システムにインストールされていることを確認します。 デバッガー ツールのダウンロードとインストールについては、「Windows 用デバッグ ツール」を参照してください。

ホスト コンピューターの IP アドレスを確認する

次のいずれかの手順を使用して、ホスト コンピューターの IP アドレスを確認します。

  1. ホスト コンピューターでコマンド プロンプトを開き、次のコマンドを実行します。

    ipconfig
    

    デバッグに使用するネットワーク アダプターの IPv4 アドレスを書き留めておきます。

  2. ターゲット コンピューターでコマンド プロンプトを開き、次のコマンドを入力します。ここで、YourIPAddress はホスト コンピューターの IP アドレスです。

    ping -4 <YourIPAddress>
    

ネットワーク デバッグ用のポートを選択する

ホスト コンピューターとターゲット コンピューターの両方でデバッグするためのポート番号を選択します。 49152 から 65535 までの任意の数値を選択できます。 推奨される範囲は 50000 から 50039 までです。 選択したポートが開き、ホスト コンピューターで実行されているデバッガーが排他的にアクセスできるようになります。 ホスト コンピューターで実行されている他のアプリケーションで使用されないポート番号を必ず選択するようにしてください。

Note

ネットワーク デバッグに使用できるポート番号の範囲は、会社のネットワーク ポリシーによって制限される場合があります。 ホスト コンピューターから制限事項を確認する方法はありません。 ネットワーク デバッグに使用できるポートの範囲が会社のポリシーで制限されているかどうかを確認するには、ネットワーク管理者に問い合わせてください。

複数のターゲット コンピューターを 1 台のホスト コンピューターに接続する場合は、接続ごとに一意のポート番号が必要です。 たとえば、100 台のターゲット コンピューターを 1 台のホスト コンピューターに接続する場合、ポート 50000 を最初の接続に割り当て、ポート 50001 を 2 つ目の接続に割り当てるということを繰り返します。

Note

 別のホスト コンピューターで、同じ範囲のポート (50000 から 50099) を使用して、別の 100 台のターゲット コンピューターに接続することができます。

ターゲット コンピューターを設定する

  1. ターゲット コンピューターがサポートされているネットワーク アダプターを備えていることを確認します。 詳細については、以下を参照してください:

  2. 適切なネットワーク ケーブルを使用して、サポートされているアダプターをネットワーク ハブまたはスイッチに接続します。

重要

BCDEdit を使用してブート情報を変更する前に、テスト PC で BitLocker やセキュア ブートなどの Windows セキュリティ機能を一時的に中断することが必要になる場合があります。 テストが完了したら、これらのセキュリティ機能をもう一度有効にし、セキュリティ機能が無効になっている場合はテスト PC を適切に管理してください。

  1. 管理者特権でのコマンド プロンプトで、次のコマンドを入力します。ここで、w.x.y.z はホスト コンピューターの IP アドレス、n は任意のポート番号です。

    bcdedit /debug on
    
    bcdedit /dbgsettings net hostip:w.x.y.z port:n
    
  2. BCDEdit は、自動的に生成されたキーを表示します。 キーをコピーし、USB フラッシュ ドライブなどのリムーバブル記憶装置に保存します。 このキーは、ホスト コンピューターでデバッグ セッションを開始するときに必要です。

  3. デバイス マネージャーを使用して、デバッグに使用するアダプターの PCI バス番号、デバイス番号、関数番号を確認します。 これらの値は、[全般] タブの [場所] にあるデバイス マネージャーに表示されます。次に、管理者特権のコマンド プロンプトで、次のコマンドを入力します。ここで、bdf は、アダプターのバス番号、デバイス番号、および関数番号です。

    bcdedit /set "{dbgsettings}" busparams b.d.f
    
  4. カーネル デバッガーがアタッチされたら、ターゲット PC が再起動されます。

Note

ターゲット コンピューターに Hyper-V の役割をインストールする場合は、「仮想マシン ホストのネットワーク デバッグの設定」を参照してください。

注意 ターゲット コンピューターがドッキング ステーションにあり、ドッキング ステーションの一部であるネットワーク アダプターに対してネットワーク デバッグを有効にしている場合は、ドッキング ステーションからコンピューターを削除しないでください。 ターゲット コンピューターをドッキング ステーションから削除する必要がある場合は、まずカーネル デバッグを無効にします。 ターゲット コンピューターでカーネル デバッグを無効にするには、管理者としてコマンド プロンプトを開き、コマンド bcdedit /debug off を入力します。 ターゲット コンピューターを再起動します。

デバッグ セッションを開始する

ホスト コンピューターのネットワーク アダプターが、適切なネットワーク ケーブルを使用してネットワーク ハブまたはスイッチに接続されていることを確認します。

ホスト コンピューターで WinDbg を開きます。 [ファイル] メニューの [カーネル デバッグ] を選択します。 [カーネル デバッグ] ダイアログで、[ネット] タブを開きます。ポート番号とキーを入力します。 [OK] を選択します。

コマンド プロンプトを開き、次のコマンドを入力することで、WinDbg とのセッションを開始することもできます。ここで、n はポート番号、MyKey はターゲット コンピューターのセットアップ時に BCDEdit によって自動的に生成されたキーです。

windbg -k net:port=<n>,key=<MyKey>

ファイアウォールを介してポートにアクセスすることを WinDbg に許可するよう求めるダイアログが表示された場合は、WinDbg が 3 種類のすべてのネットワークに対してポートにアクセスすることを許可します。

KD を使用する

ホスト コンピューターで、コマンド プロンプトを開きます。 次のコマンドを入力します。ここで、n はポート番号、MyKey はターゲット コンピューターの設定時に BCDEdit によって自動的に生成されたキーです。

kd -k net:port=<n>,key=<MyKey>

ファイアウォールを介してポートにアクセスすることを WinDbg に許可することに関するダイアログが表示されたら、WinDbg が 3 種類のすべてのネットワークに対してポートにアクセスすることを許可します。

ターゲット PC を再起動する

デバッガーが接続され、接続待ち状態になったら、ターゲット コンピューターを再起動します。 PC を再起動する 1 つの方法は、管理者のコマンド プロンプトから次のコマンドを使用することです。

shutdown -r -t 0

ターゲットが再起動されると、ホスト OS のデバッガーは接続されるはずです。

ホスト上のターゲットに接続した後、デバッガーの [中断] を押すとデバッグを開始できます。

ファイアウォール経由でデバッガーを許可する

最初にネットワーク デバッグ接続を確立しようとすると、ファイアウォール経由でデバッグ アプリケーション (WinDbg または KD) へのアクセスを許可するよう求めるダイアログが表示される場合があります。 Windows のクライアント バージョンではプロンプトが表示されますが、Windows のサーバー バージョンではプロンプトは表示されません。 プロンプトに応答するには、3 種類のすべてのネットワーク (ドメイン、プライベート、パブリック) のボックスをすべてチェックします。

プロンプトが表示されない場合、またはプロンプトが表示されたときにボックスをチェックしなかった場合は、コントロール パネルを使用して、デバッガーが実行されているホスト PC 上でファイアウォール経由のアクセスを許可する必要があります。 [コントロール パネル] > [システムとセキュリティ] を開き、[Windows ファイアウォールによるアプリケーションの許可] を選びます。

  • (WinDbg) アプリケーションの一覧で、"WinDbg エンジン プロセス (TCP) (すべて)" を見つけます。

  • (クラシック WinDbg) アプリケーションの一覧で、Windows GUI シンボリック デバッガーWindows カーネル デバッガーを見つけます。

チェックボックスを使用して、ファイアウォール経由でこれらのアプリケーションを許可します。 デバッグ アプリケーション (WinDbg または KD) を再起動します。

暗号化キー

ターゲット コンピューターを常にセキュリティで保護するには、ホスト コンピューターとターゲット コンピューターの間を移動するパケットを暗号化する必要があります。 自動的に生成される暗号化キー (ターゲット コンピューターの構成時に BCDEdit で提供される) を使用する必要があります。 自動的に生成された暗号化キーの使用は、より安全であり、特定のターゲットへの接続を確立する際に使用される一意の値が提供されるため、推奨されます。

ネットワーク デバッグでは、ピリオドで区切られた 4 つの 64 ビット値 (36 進数) として指定される 256 ビット キーを使用します。 64 ビット値はそれぞれ、最大 13 文字を使用して指定されます。 有効な文字は、a から z の文字と 0 から 9 の数字です。 特殊文字は使用できません。

独自のキーを指定するには、ターゲット コンピューターで管理者特権のコマンド プロンプトを開きます。 次のコマンドを入力します。ここで、w.x.y.z はホスト コンピューターの IP アドレス、n はポート番号、key はキーです。

bcdedit /dbgsettings net hostip:w.x.y.z port:n key:Key

dbgsettings が変更されたら、ターゲット コンピューターを必ず再起動する必要があります。

トラブルシューティングのヒント

デバッグ アプリケーションはファイアウォール経由で許可する必要がある

最初にネットワーク デバッグ接続を確立しようとすると、ファイアウォール経由でデバッグ アプリケーション (WinDbg または KD) へのアクセスを許可するよう求めるダイアログが表示される場合があります。 Windows のクライアント バージョンではプロンプトが表示されますが、Windows のサーバー バージョンではプロンプトは表示されません。 プロンプトに応答するには、3 種類のすべてのネットワーク (ドメイン、プライベート、パブリック) のボックスをすべてチェックします。

プロンプトが表示されない場合、またはプロンプトが表示されたときにボックスをチェックしなかった場合は、コントロール パネルを使用してファイアウォール経由のアクセスを許可する必要があります。 [コントロール パネル] > [システムとセキュリティ] を開き、[Windows ファイアウォールによるアプリケーションの許可] を選びます。

  • (WinDbg) アプリケーションの一覧で、"WinDbg エンジン プロセス (TCP) (すべて)" を見つけます。

  • (WinDbg (クラシック)) アプリケーションの一覧で、Windows GUI シンボリック デバッガーWindows カーネル デバッガーを見つけます。

チェックボックスを使用して、ファイアウォール経由でこれらのアプリケーションを許可します。 下にスクロールし、[OK] を選択してファイアウォールの変更を保存します。 デバッガーを再起動してください。

ポート番号はネットワーク ポリシーで許可されている範囲内で設定する必要がある

ネットワーク デバッグに使用できるポート番号の範囲は、会社のネットワーク ポリシーによって制限される場合があります。 ネットワーク デバッグに使用できるポートの範囲が会社のポリシーで制限されているかどうかを確認するには、ネットワーク管理者に問い合わせてください。 ターゲット コンピューターで、管理者としてコマンド プロンプトを開き、コマンド bcdedit /dbgsettings を入力します。 出力は次のようになります。

C:\> bcdedit /dbgsettings
key                     XXXXXX.XXXXX.XXXXX.XXXXX
debugtype               NET
hostip                  169.168.1.1
port                    50085
dhcp                    Yes
The operation completed successfully.

前の出力では、ポートの値は 50085 です。 ポートの値がネットワーク管理者によって許可されている範囲外にあたる場合は、次のコマンドを入力します。 値 w.x.y.z はホスト コンピューターの IP アドレスで、YourDebugPort は許容範囲内のポート番号です。

bcdedit /dbgsettings net hostip:w.x.y.z port:YourDebugPort

ターゲット コンピューターのデバッガー設定を変更したら、新しいポート設定でホスト コンピューター上のデバッガーを再実行し、ターゲット コンピューターを再起動します。

ping を使用して接続をテストする

デバッガーが接続しない場合は、ターゲット PC の ping コマンドを使用して接続を確認します。

C:\>Ping <HostComputerIPAddress>

Note

ホスト コンピューターがネットワーク上で検出できるように構成されていない場合、ファイアウォールで ping 要求がブロックされる可能性があるため、これが機能しない場合があります。 ファイアウォールで ping 要求がブロックされると、ホストに ping を実行しても応答を得られません。

デバッガーがターゲット コンピューターの IP アドレスを取得する方法

ターゲット コンピューター上の KDNET は動的ホスト構成プロトコル (DHCP) を使用して、デバッグに使用されているネットワーク アダプターのルーティング可能な IP アドレスを取得しようとします。 KDNET が DHCP で割り当てられたアドレスを取得すると、ネットワーク上の任意の場所にあるホスト コンピューターでターゲット コンピューターをデバッグできます。 KDNET は、DHCP で割り当てられたアドレスを取得できなかった場合、自動プライベート IP アドレス指定 (APIPA) を使用してローカル リンク IP アドレスを取得します。 ローカル リンク IP アドレスはルーティング不可能なため、ホストとターゲットはローカル リンク IP アドレスを使用してルーター経由で通信することができません。 その場合、ホスト コンピューターとターゲット コンピューターを同じネットワーク ハブまたはスイッチに接続すると、ネットワーク デバッグが機能します。

PCI ベースの NIC を使用して物理マシンで KDNET を設定する場合は、必ず busparams を指定します

PCI または PCIe ベースの NIC を使用して物理マシン上で KDNET を設定する場合は、KDNET に使用する NIC の busparams を必ず指定する必要があります。 バス パラメーターを指定するには、デバイス マネージャーを開き、デバッグに使用するネットワーク アダプターを見つけます。 ネットワーク アダプターのプロパティ ページを開き、[全般] タブの [場所] に表示されるバス番号、デバイス番号、関数番号を書き留めます。管理者特権のコマンド プロンプトで、次のコマンドを入力します。ここで、bdf は、10 進形式で表されるバス番号、デバイス番号、関数番号です。

bcdedit /set "{dbgsettings}" busparams b.d.f

デバッガーがホスト コンピューターで実行され、接続待ちの状態の場合は、次のコマンドを使用してターゲット コンピューターを再起動します。

shutdown -r -t 0

BCDEdit エントリを手動で削除する

通常は手動で削除する必要はありませんが、ここでは、通常とは異なる状況に対応するトラブルシューティング手順として説明しておきます。

KDNET ユーティリティを使用する場合、エントリを手動で削除する必要はありません。 詳細については、「KDNET ネットワーク カーネル デバッグの自動設定」を参照してください。

bcdedit –deletevalue を使用する場合は、有効な bcd 要素名を指定する必要があります。 詳細については、「BCDEdit /deletevalue」を参照してください。

bcdedit エントリを手動で削除するには、次の手順を実行します。

  1. ターゲット コンピューターで、管理者としてコマンド プロンプトを開きます。

  2. たとえば、次のコマンドを入力して、ホスト IP アドレスの BCDEdit デバッグ エントリを削除します。

    bcdedit -deletevalue {dbgsettings} hostip
    

hostip を削除するときは、デバッガーのコマンド ラインで target= を指定する必要があります。

  1. 別の例として、次のコマンドを使用してポート エントリを削除します。

    bcdedit -deletevalue {dbgsettings} port
    

ポート エントリを削除すると、KDNET は既定の ICANN に登録されているデバッガー ポート 5364 を使用します。

Hyper-v を設定する

ターゲット コンピューターに Hyper-V の役割をインストールする場合は、「仮想マシン ホストのネットワーク デバッグの設定」を参照してください。

Hyper-V 仮想マシン (VM) のデバッグの詳細については、「仮想マシンのネットワーク デバッグの設定 - KDNET」を参照してください。

外部ネットワーク接続を使用して VM を実行している Hyper-V ホストで KDNET を有効にする

VM のネットワークが動作を停止する状況が発生することがあります。

  • Hyper-V は PC 上で有効になっており、外部ネットワーク スイッチが作成されてコンピューター内の物理 NIC に向けられ、VM はネットワークでその外部スイッチを使用するように構成されています。

  • その後、外部ネットワーク スイッチによって向けられているものと同じ物理 NIC を使用して、Hyper-V ホスト OS で KDNET を有効にします。 ホストが再起動されます。

  • 以前構成された外部スイッチを使用していた VM はすべて、再起動後にネットワーク接続を失います。

この接続停止は仕様であり、KDNET が使用するように構成されている NIC を排他的に制御するために生じます。 その NIC のネイティブ NDIS ミニポートは、OS では読み込まれません。 その後、外部ネットワーク スイッチはネイティブ NDIS ミニポート ドライバーと通信できなくなり、動作を停止します。 この状況を回避するには、次を実行します。

  1. Hyper-V マネージャーから仮想スイッチ マネージャーを開き、既存の仮想スイッチを選びます。 Microsoft カーネル デバッグ ネットワーク アダプターに変更するには、ドロップダウン メニューから外部ネットワーク NIC を選び、[仮想スイッチ マネージャー] ダイアログで [OK] を選択します。

  2. 仮想スイッチ NIC を更新したら、VM をシャットダウンして再起動します。

KDNET デバッグがオフになっている場合、NIC のネイティブ NDIS ミニポートに外部スイッチを再度向けるには、同じ手順に沿って対応する必要があります。 そうしないと、デバッグが無効になった後でコンピューターが再起動されると、VM の接続が失われます。

IPv6

IPv6 のサポートは、Windows バージョン 1809 で追加されました。

デバッガーで IPv6 を使用するには、次の手順を実行します。

  1. <debughostname> に ping を実行し、出力行からの応答で報告された IPv6 アドレスを書き留めます。 x:y:z:p:d:q:r:n の代わりに、この IPv6 アドレスを使用します。

  2. BCDEdit を使用して、dbgsettings 内の既存の IP アドレス値を削除します。

    bcdedit -deletevalue {dbgsettings} hostip
    
  3. ホストの IPv6 アドレスを設定します。 hostipv6=s:t:u:v:w:x:y:z 文字列にスペースを含めることはできません。 <YourPort> は、このターゲット コンピューターに使用するネットワーク ポート番号です。 <YourKey> は 4 部構成のセキュリティ キーです。 <b.d.f> は、KDNET に使用する NIC のバス デバイス関数の場所番号です。

    bcdedit /dbgsettings net hostipv6:s:t:u:v:w:x:y:z port:<YourPort> key:<YourKey> busparams:<b.d.f>
    
  4. このコマンドを入力して、dbgsettings が正しく設定されていることを確認します。

    C:\> bcdedit /dbgsettings
    busparams               0.25.0
    key                     2steg4fzbj2sz.23418vzkd4ko3.1g34ou07z4pev.1sp3yo9yz874p
    debugtype               NET
    hostipv6                  2001:db8:0:0:ff00:0:42:8329
    port                    50010
    dhcp                    Yes
    The operation completed successfully.
    
  5. ホスト コンピューターで、次のコマンドを使用してデバッガーを起動します。

    Windbg -k net:port=<yournetworkportnumber>,key=<key_output_from_kdnet>,target=::<YourIPv6Address> 
    
  6. デバッガーがホスト コンピューターで実行され、接続待機になったら、ターゲット コンピューターを再起動します。

  7. デバッガーは、起動時の早い段階でホスト デバッガーに接続する必要があります。 接続されたメッセージで報告される IP アドレスは IPv4 アドレスではなく IPv6 アドレスであるため、KDNET が IPv6 接続を使用していることがわかります。

メモ

  • hostip の指定を許可するすべてのデバッガー bcd 設定には、対応する hostipv6 要素があります。 3 種類あります。

    IPv4 IPv6 使用方法
    hostip hostipv6 ブートとカーネルのデバッグ用
    targethostip targethostipv6 カーネル デバッグに固有
    hypervisorhostip hypervisorhostipv6 Hyper-V デバッグ用
  • このような種類のデバッグに対して hostipv6 スタイル アドレスを設定すると、IPv6 が必要であり、取得することになります。

  • このような種類のデバッグに対して hostip スタイル アドレスを設定すると、IPv4 が必要であり、取得することになります。

  • ターゲットでは IPv4 または IPv6 のみが実行され、両方が同時に実行されることはありません。 使用される IP プロトコルのバージョンは、ターゲット コンピューターの dbgsettings によって制御されます。 hostip が設定されている場合、ターゲットでは IPv4 を使用します。 hostipv6 が設定されている場合、ターゲットでは IPv6 を使用します。

  • ホスト デバッガーは通常、IPv4 または IPv6 の使用を自動選択します。 既定では、デバッガーは IPv4 ソケットと IPv6 ソケットの両方でリッスンし、どちらか 1 つのソケットでターゲット コンピューターに自動的に接続します。

  • ホスト上のデバッガーで IPv6 を強制的に使用するが、デバッガーでターゲットからの接続をリッスンする場合は、デバッガーのコマンド ラインに target=:: を追加できます。 :: は 0 の IPv6 アドレスです。

  • ホスト上のデバッガーで IPv4 を強制的にデバッグするが、デバッガーでターゲットからの接続をリッスンする場合は、デバッガーのコマンド ラインに target=0.0.0.0 を追加できます。 0.0.0.0 は 0 の IPv4 アドレスです。

  • デバッガーのコマンド ラインで target= を指定し、コンピューター名を使用する場合、デバッガーはそのコンピューター名を IPv4 アドレスと IPv6 アドレスに変換します。 その後、デバッガーは両方で接続を試みます。

  • デバッガーのコマンド ラインで target= を指定し、IP アドレスを使用すると、IP アドレスに : 文字が含まれている場合、デバッガーはそれを IPv6 アドレスであると見なし、その接続に対して IPv6 を強制的に使用します。 IP アドレスに . 文字が含まれている場合、デバッガーはそれを IPv4 アドレスであると見なし、その接続に IPv4 を強制的に使用します。

  • ターゲットで IPv6 を設定し、デバッガーのコマンド ラインで IPv4 を強制的に使用した場合、接続されません。

  • ターゲットで IPv4 を設定し、デバッガーのコマンド ラインで IPv6 を強制的に使用した場合も、接続されません。

関連項目