ドライバー開発に欠かせないデバッガー
続いて、他のデバイスでドライバーを開発したくなったときのために、デバッガーを紹介しておきましょう。「ドライバー開発とかしない!」「マネージコードしか見たくない!」という方はこのページは飛ばしちゃってください。
デバッグには、前回の記事でインストールしたWDK(Windows Driver Kit)に含まれる「Windows Driver Framework Verifier Control Application」(WdfVerifier)を使います。スタートメニューには登録されないので、直接C:\WinDDK\7600.16385.0\tools\WDF\i386\WdfVerifier.exeを開いて実行してください。あ、上記パスのi386は自分のOSにあわせて読み替えてくださいね。
起動したらタブから「User Mode Driver Framework Settings」を選択します。WdfVerifierには、ドライバーのホストプロセスが起動したタイミングでデバッガーを自動起動してくれる機能がありますので、ウィンドウの最下段にある「Automatically Launch user-mode debugger when requested」にチェックを入れて有効にしておきます。ちなみにこのチェックボックスは「OK」や「適用」を押さなくてもすぐに反映されます。
また、ドライバーDLLのロード時に遅延時間も設定できます。遅延時間は「Have Host Process at driver load time, wait」の後のテキストボックスに秒数を指定します。
起動される側のデバッガーとしては通常、「WinDbg」というツールが使われます。「Tool Preferences」のタブを見ると、User Mode Debugger Preferencesに「Use WinDbg」というラジオボタンがあり、デフォルトで選択されていると思います。
YUREXの場合は以下のような設定になりました。
ではさっそくYUREXを接続してみましょう。WdfVerifierは起動した状態にしておいてください。YUREXの接続を検知すると、Host Processes for UMDF 1.9.0の欄にドライバーのプロセスが表示され、WinDbgが起動するはずです。
とりあえずブレークポイントを設定してみます。WinDbgのメニューのFile→Open Source Fileからソースファイルをひとつ選択して開きます。テストとして、最初にアクセスされるエントリーポイントのファイルを開いてみます。「dllsup.cpp」がそれです。詳しくは説明しませんが、必ず通る「DllMain」にブレークポイントを仕掛けてみます。
行にカーソルを置いてF9キーを押すとブレークポイントを設定できます。この状態で再度YUREXを挿し直してみてください。
ちゃんとブレークポイントで止まりましたね。F10、F11でそれぞれステップ実行、ステップイン(関数の中まで追いかけて実行)ができます。あとはウォッチウィンドウで変数の状態を見ていれば、基本的なことは大体できると思います。
F5を押せば次のブレークポイントが現れるか、エラーが起きるまで先に進みます。