V4 プリンター ドライバのデバッガアタッチ方法
V4 プリンター ドライバをデバッグするときに、どのようにデバッガをアタッチすればよいか困ったことはありませんか?
明けましておめでとうございます!WDK サポートチームの石沢です。
今回は V4 プリンタドライバのレンダリングフィルタに Visual Studio をアタッチする方法をまとめたいと思います。
なお、ドライバパッケージの作成に関しては、まさかたさんの以下の記事を参考にしてください。今回はすでにドライバパッケージが出来上がっているものとして進めます。
プリンター用デバイスアプリのサンプルを動かしてみる
https://blogs.msdn.microsoft.com/jpwdkblog/2013/05/21/12427/
プリンタドライバのデバッグ方法については、基本的には A 尾さんの以下の記事が元となっているのですが、実際にレンダリングフィルタのソースコード上でブレイクするところまでやってみたいと思います。
プリンタドライバやスプーラ コンポーネントをデバッグする
https://blogs.msdn.microsoft.com/jpwdkblog/2009/06/26/1246-2/
具体的なデバッグまでの道のりは以下となります。
<デバッグまでの道のり>
1. V4 プリンター ドライバのインストール
2. PrintFilterPipelineSvc サービスのタイムアウト時間の設定
3. アプリケーションからの印刷 その 1
4. PrintFilterPipelineSvc サービスにデバッガをアタッチ
5. アプリケーションからの印刷 その 2
なお、今回動作を確認した環境は以下です。
・OS: Windows 10 x86 Enterprise
・デバッガ: Visual Studio 2015 Enterprise
では実際に進めてみましょう!
■ 1. V4 プリンター ドライバのインストール
それでは最初に皆様が作成された V4 プリンター ドライバのパッケージをインストールしましょう。
ここでは Visual Studio の 「Printer Driver V4」テンプレートを基にして作成したドライバを使用しています。
コントロールパネルから、「デバイスとプリンターの表示」を選択し、さらの「プリンターの追加」を選択。
さらに、プリンター ドライバのパッケージからインストールするため、表示されたウィンドウの「プリンターが一覧にない場合」を選択します。
ローカル プリンターとしてインストールするため、「ローカルプリンターまたはネットワーク プリンターを手動設定で追加する」を選択して次に進みます。
次にプリンター ポートの設定ですが、ここでは、「既存のポートを使用」を選択し、「FILE: (ファイルへ出力)」を選択します。
次のウィンドウで「ディスクを使用」からドライバパッケージ内の INF ファイルを選択して、想定通りのドライバが表示されれば OK です!
次にすすんで
後はずんずん進んで以下のウィンドウが表示されればインストール完了です。
■ 2. PrintFilterPipelineSvc サービスのタイムアウト時間の設定
次に、アタッチ先であるPrintFilterPipelineSvc サービスのタイムアウト時間を変更しておきましょう。
詳細については、前述の A 尾さんの記事 (プリンタ ドライバやスプーラ コンポーネントをデバッグする) をご参考ください。
ここでは以下のようにタイムアウト時間を 10 分に設定しました。
■ 3. アプリケーションからの印刷 その 1
それでは PrintFilterPipelineSvc サービスを動作させましょう。
方法は簡単です。メモ帳などのアプリケーションからインストールしたプリンターを選択して印刷しましょう。
印刷後、タスク マネージャーに Print Filter Pipeline Host というプロセスが表示されれば OK です!
■ 4. PrintFilterPipelineSvc サービスにデバッガをアタッチ
それでは実際にアタッチしてみます。
Visual Studio を起動して、メニューの「デバッグ」から「プロセスにアタッチ」を選択。
表示されたウィンドウの「すべてのユーザーからのプロセスを表示する」にチェックを入れ、一覧の中から ”printerpipelinesvc.exe” を選択。
[アタッチ] をクリックしてアタッチ完了です。
Visual Studio を実行しているユーザー権限によっては以下のようなメッセージが表示される場合があります。
その場合は「異なる資格情報で再起動」を選択してから、もう一度アタッチしてみてください。
ついでにブレイクポイントも設定しておきましょう。
ここでは Printer Driver V4 テンプレートで実装されている RenderFilter クラスのコンストラクタに仕掛けておくことにします。
■ 5. アプリケーションからの印刷 その 2
では改めて手順 3 と同じようにメモ帳から印刷を行いましょう。
はい!ブレイクしましたね。
これでプリンター ドライバも煮るなり焼くなり好きに料理できるようになりました。今回はここまでとなります。
今回ご案内差し上げた内容は、知らないと途方に暮れてしまうかもしれないのですが、知っていればそれほど難しい内容ではないかと思います。
皆様も是非お試しいただけますと幸いです。
WDK サポートチーム 石沢 望夢