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

< https://docs.microsoft.com/en-us/windows-hardware/drivers/debugger/setting-up-network-debugging-of-a-virtual-machine-host >

 

Setting Up KDNET Network Kernel Debugging Automatically

< https://docs.microsoft.com/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)

< https://docs.microsoft.com/en-us/windows-hardware/drivers/debugger/debug-universal-drivers--kernel-mode- >

 

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

 

WDK サポートチーム 津田

Skip to main content