次の方法で共有


印刷フィルター パイプライン サービスにデバッガーを接続する

重要

Windows でプリンターとの通信手段として推奨されるのは、最新の印刷プラットフォームです。 プリンターデバイス開発におけるWindows 10および11での印刷体験をカスタマイズするために、MicrosoftのIPPインボックスクラスドライバーとPrint Support Apps (PSA)の使用を推奨します。

詳細については、最新の印刷プラットフォームに関する記事および「印刷サポート アプリの設計ガイド」を参照してください 。

XPSDrv ドライバー フィルターは、印刷フィルター パイプライン サービス (printfilterpipelinesvc.exe) によってホストされます。 印刷フィルター パイプライン サービスに Microsoft Windows Debugger (WinDbg) をアタッチする場合は、次の 2 つの方法があります。

  1. コマンド ラインから WinDbg を使用してプロセスを開始します。

  2. WinDbg を既存のプロセスにアタッチします。

フィルター パイプライン ホストは印刷スプーラーが開始する必要があるため、2 つ目のオプションを使用して WinDbg をプロセスにアタッチする必要があります。 ただし、フィルター パイプライン ホストは永続的でない場合があります。 アプリケーションがジョブを印刷キューに送信すると、サービスの新しいインスタンスが開始され、そのジョブが完了するとすぐにサービスは終了します。 印刷ジョブの送信後で、デバッグしようとしているフィルターの実行前は、特にフィルターの起動または初期化コードをデバッグする場合、WinDbg を printfilterpipelinesvc.exe にアタッチすることが困難な場合があります。

この問題を回避するには、印刷ジョブ完了後の printfilterpipelinesvc.exe の保持時間を変更します。 この値は、HKEY_LOCAL_MACHINE\System\CurrentControlSet\Control\Print レジストリ キーの PipelineHostTimeout 値で管理されます。

フィルター パイプライン サービスのタイムアウト値を変更するには、次の手順に従います。

  1. Microsoft Registry Editor (RegEdit) を実行し、HKEY_LOCAL_MACHINE\System\CurrentControlSet\Control\Print に移動します。

  2. PipelineHostTimeout REG_DWORD 値がまだ存在しない場合は、キーに追加します。

  3. PipelineHostTimeout をタイムアウト値 (ミリ秒単位) に設定します。 余裕を持ってプロセスをアタッチしてブレークポイントを設定できるよう十分な値を設定します。 たとえば、タイムアウト値を 1.5 分にする場合は、PipelineHostTimeout を 90000 に設定します。

PipelineHostTimeout 値を設定したら、次の手順に従って、WinDbg をパイプライン フィルター サービスにアタッチします。

  1. 管理者権限で WinDbg を実行しますが、プロセスへのアタッチは行わないでください。

  2. ドライバーに印刷ジョブを送信し、完了するまで待ちます。 フィルター パイプライン サービスは、指定されたタイムアウト値に対して実行を続けます。

  3. [WinDbgファイル] メニューから、[プロセスへのアタッチ] を選択します。

  4. WinDbg の [プロセスへのアタッチ] ダイアログ ボックスで、"printfilterpipelinesvc.exe" を選択し、[OK] をクリックします。 プロセスが "アクセス拒否" と表示されている場合は、WinDbg が管理者権限で実行されていない可能性があります。

  5. 必要に応じてブレークポイントを設定します。

  6. もう一度印刷ジョブを送信します。

フィルター ホスト プロセスは、最初のブレークポイントまたは最初の検証ツールの停止のいずれか早い方でデバッガーを中断する必要があります。 そこから、コードをステップ実行したり、変数を調べたりできます。