印刷フィルター パイプライン サービスにデバッガーを接続する
重要
Windows でプリンターとの通信手段として推奨されるのは、最新の印刷プラットフォームです。 プリンターデバイス開発におけるWindows 10および11での印刷体験をカスタマイズするために、MicrosoftのIPPインボックスクラスドライバーとPrint Support Apps (PSA)の使用を推奨します。
詳細については、最新の印刷プラットフォームに関する記事および「印刷サポート アプリの設計ガイド」を参照してください 。
XPSDrv ドライバー フィルターは、印刷フィルター パイプライン サービス (printfilterpipelinesvc.exe) によってホストされます。 印刷フィルター パイプライン サービスに Microsoft Windows Debugger (WinDbg) をアタッチする場合は、次の 2 つの方法があります。
コマンド ラインから WinDbg を使用してプロセスを開始します。
WinDbg を既存のプロセスにアタッチします。
フィルター パイプライン ホストは印刷スプーラーが開始する必要があるため、2 つ目のオプションを使用して WinDbg をプロセスにアタッチする必要があります。 ただし、フィルター パイプライン ホストは永続的でない場合があります。 アプリケーションがジョブを印刷キューに送信すると、サービスの新しいインスタンスが開始され、そのジョブが完了するとすぐにサービスは終了します。 印刷ジョブの送信後で、デバッグしようとしているフィルターの実行前は、特にフィルターの起動または初期化コードをデバッグする場合、WinDbg を printfilterpipelinesvc.exe にアタッチすることが困難な場合があります。
この問題を回避するには、印刷ジョブ完了後の printfilterpipelinesvc.exe の保持時間を変更します。 この値は、HKEY_LOCAL_MACHINE\System\CurrentControlSet\Control\Print レジストリ キーの PipelineHostTimeout 値で管理されます。
フィルター パイプライン サービスのタイムアウト値を変更するには、次の手順に従います。
Microsoft Registry Editor (RegEdit) を実行し、HKEY_LOCAL_MACHINE\System\CurrentControlSet\Control\Print に移動します。
PipelineHostTimeout REG_DWORD 値がまだ存在しない場合は、キーに追加します。
PipelineHostTimeout をタイムアウト値 (ミリ秒単位) に設定します。 余裕を持ってプロセスをアタッチしてブレークポイントを設定できるよう十分な値を設定します。 たとえば、タイムアウト値を 1.5 分にする場合は、PipelineHostTimeout を 90000 に設定します。
PipelineHostTimeout 値を設定したら、次の手順に従って、WinDbg をパイプライン フィルター サービスにアタッチします。
管理者権限で WinDbg を実行しますが、プロセスへのアタッチは行わないでください。
ドライバーに印刷ジョブを送信し、完了するまで待ちます。 フィルター パイプライン サービスは、指定されたタイムアウト値に対して実行を続けます。
[WinDbgファイル] メニューから、[プロセスへのアタッチ] を選択します。
WinDbg の [プロセスへのアタッチ] ダイアログ ボックスで、"printfilterpipelinesvc.exe" を選択し、[OK] をクリックします。 プロセスが "アクセス拒否" と表示されている場合は、WinDbg が管理者権限で実行されていない可能性があります。
必要に応じてブレークポイントを設定します。
もう一度印刷ジョブを送信します。
フィルター ホスト プロセスは、最初のブレークポイントまたは最初の検証ツールの停止のいずれか早い方でデバッガーを中断する必要があります。 そこから、コードをステップ実行したり、変数を調べたりできます。