Hyper-V 仮想マシンへのネットワーク経由のカーネルデバッガ接続方法

Hyper-V 仮想マシンに仮想 COM ポート経由のカーネルデバッガ接続方法では、レスポンスが遅く感じられたことはありませんか?今回は、Hyper-V 仮想マシンへのネットワーク経由のカーネルデバッガ接続方法をご案内します。これにより、読者の方のデバッグの作業効率が上がれば幸いです。

 

今回は、例として、WinDbg を動作させるホストPC では Windows 10 1803 x64、カーネルデバッガを接続される仮想マシンではWindows 10 1803 x86 が動作しています。ホストPC 側には、WDK 10 1803 がインストールされているものとします。仮想マシンは、第一世代のものを使用しています。

 

    1. ホストPC と仮想マシンをネットワーク接続します。

 

仮想スイッチは、以下の図のように、以下の3点を満たす必要があります。

・外部ネットワーク

・「管理オペレーティングシステムにこのネットワークアダプターの共有を許可する」にチェック

・VLAN ID を無効

 

clip_image002

 

この仮想スイッチ(図の例では、External という名前にしています) を、仮想マシンのネットワークアダプタ―に設定しています。

 

clip_image004

 

    1. ホストPC のIP アドレスを確認します。

 

ホストPC 側でコマンドプロンプトを起動し、ipconfig を実行してIP アドレスを確認します。

 

>ipconfig

 

Windows IP 構成

 

 

イーサネット アダプター vEthernet (External):

 

...

 

   IPv4 アドレス . . . . . . . . . . . .: <ホスト PC の IP アドレス>

 

...

 

仮想マシン側でコマンドプロンプトを起動し、ping< ホストPC のIP アドレス> を実行して、Ping が通ることを確認します。

 

 

    1. 仮想マシン上に kdnet.exe と VerifiedNICList.xml をコピーします。

 

Kdnet.exe とVerifiedNICList.xml は、WDK 10 のインストールフォルダの下のDebuggers\<architecture> フォルダにあります。<architecture> フォルダは、x86, x64, arm のいずれかですが、仮想マシンの CPU アーキテクチャに一致するものを使用します。今回の例では、仮想マシンが x86 なので、ホストPC 上のC:\Program Files (x86)\Windows Kits\10\Debuggers\x86 のものを使用します。これらを、仮想マシン上の任意のフォルダにコピーします。今回は C:\kdnet フォルダを作成して、そこにコピーします。

 

 

    1. 仮想マシン上で管理者権限のコマンドプロンプトを実行し、以下のコマンドを実行します。

 

// cd コマンドで c:\kdnet にカレントディレクトリを移動します。

C:\Windows\system32>cd \kdnet

 

// オプションなしで kdnet.exe を実行すると、ターゲット PC の NIC がカーネルデバッガを接続するのに使用できるかどうかがわかります。

// 今回はターゲット PC が Hyper-V の仮想マシンなので、以下のように表示されます。

C:\kdnet>kdnet

 

Network debugging is supported by this Microsoft Hypervisor Virtual Machine.

 

// kdnet.exe <ホスト PC の IP アドレス> <ポート番号> を実行します。

// ポート番号は、50000 から 50039 の間の値を使用します。

// 今回の例では 50010 を使用します。

// これにより、ネットワーク経由のカーネルデバッガ接続のための、仮想マシン側の設定が完了し、次のアクションの指示が表示されます。

C:\kdnet>kdnet XXX.XXX.XXX.XXX 50010

 

Enabling network debugging on Microsoft Hypervisor Virtual Machine.

Key=31oes04t2njsd.rudxy2apusd.2rad4d7rox9q4.1gjwywsdyiosm

 

To debug this vm, run the following command on your debugger host machine.

windbg -k net:port=50010,key=31oes04t2njsd.rudxy2apusd.2rad4d7rox9q4.1gjwywsdyiosm

 

Then restart this VM by running shutdown -r -t 0 from this command prompt.

 

 

// デバッグ設定を確認します。

C:\kdnet>bcdedit /dbgsettings

key                     31oes04t2njsd.rudxy2apusd.2rad4d7rox9q4.1gjwywsdyiosm

debugtype               NET

hostip                  XXX.XXX.XXX.XXX

port                    50010

dhcp                    Yes

この操作を正しく終了しました。

 

 

 

    1. ホストPC 上で管理者権限のコマンドプロンプトを実行し、以下のコマンドを実行します。

 

// windbg.exe のあるディレクトリに移動します。

C:\WINDOWS\system32>cd "\Program Files (x86)\Windows Kits\10\Debuggers\x86"

 

// WinDbg をネットワーク経由でカーネルデバッガ接続します。

// windbg -k net:port=<ポート番号>,key=<key>

// 手順4で表示された上記形式のコマンドをコピー&ペーストすると便利です。

C:\Program Files (x86)\Windows Kits\10\Debuggers\x86> windbg -k net:port=50010,key=31oes04t2njsd.rudxy2apusd.2rad4d7rox9q4.1gjwywsdyiosm

 

コピー&ペーストするためには、以下の図のように、仮想マシンの[表示] の[拡張セッション] にチェックが入っていることを確認してください。

 

clip_image006

 

上記で windbg を実行すると、以下のようにファイアウォールのブロックを解除することを求められるので、ドメイン、プライベート、パブリックの3 つすべてにチェックを入れて、[アクセスを許可する] をクリックします。

 

clip_image008

 

WinDbg が接続を待機します。

 

 

    1. 仮想マシンを再起動します。

 

手順4 の仮想マシン上のコマンドプロンプトで、そのまま以下を実行します。

 

shutdown -r -t 0

 

すると、ホストPC 側のWinDbg に以下の通りブレークインしてきます。

 

clip_image010

 

 

    • 参考文献

 

Setting Up Network Debugging of a Virtual Machine - KDNET

< /en-us/windows-hardware/drivers/debugger/setting-up-network-debugging-of-a-virtual-machine-host >

 

Setting Up KDNET Network Kernel Debugging Automatically

< /en-us/windows-hardware/drivers/debugger/setting-up-a-network-debugging-connection-automatically >

 

Kdnet.exe が、ホストPC がWindows 7 以降、ターゲットPC が Windows 8 以降であれば使えるとの記載があります。

The computer that runs the debugger is called the host computer, and the computer being debugged is called the target computer. The host computer must be running Windows 7 or later, and the
target computer must be running Windows 8 or later.

 

Debug Drivers - Step by Step Lab (Sysvad Kernel Mode)

< /en-us/windows-hardware/drivers/debugger/debug-universal-drivers--kernel-mode- >

 

上記の内容が、ドライバを開発される方のお役に立てば幸いです。

 

WDK サポートチーム 津田