将调试器附加到打印筛选器管道服务

重要

新式打印平台是 Windows 与打印机通信的首选方式。 建议使用 Microsoft 的 IPP 收件箱类驱动程序以及打印支持应用 (PSA) 来自定义 Windows 10 和 11 中的打印体验,以便进行打印机设备开发。

有关详细信息,请参阅新式打印平台打印支持应用设计指南

XPSDrv 驱动程序筛选器由打印筛选器管道服务 (printfilterpipelinesvc.exe) 进行托管。 如果要将 Microsoft Windows 调试器 (WinDbg) 附加到打印筛选器管道服务,有两种基本方法:

  1. 使用命令行中的 WinDbg 启动进程。

  2. 将 WinDbg 附加到现有进程。

筛选器管道主机必须由打印后台处理程序启动,因此必须使用第二个选项将 WinDbg 附加到进程。 但是,筛选器管道主机可能并非持久性的。 当应用程序向打印队列提交作业时,服务的新实例就会启动,而作业完成后不久服务就会终止。 在打印任务提交后但要调试的筛选器开始运行前,将 WinDbg 附加到 printfilterpipelinesvc.exe 可能比较困难,尤其是要调试筛选器的启动或初始化代码时。

要解决这一问题,可以修改 printfilterpipelinesvc.exe 在打印任务完成后的持续时间。 该值由 HKEY_LOCAL_MACHINE\System\CurrentControlSet\Control\Print 注册表项的 PipelineHostTimeout 值进行控制。

使用以下步骤更改筛选器管道服务超时值:

  1. 运行 Microsoft 注册表编辑器 (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. 在“附加到进程”对话框中,选择 printfilterpipelinesvc.exe,然后单击“确定”。 如果进程被列为“拒绝访问”,则可能意味着 WinDbg 没有以升高的权限运行。

  5. 酌情设置断点。

  6. 再次提交打印作业。

筛选器主机进程应在第一个断点或第一个验证程序停止(以先到者为准)时进入调试器。 在这里,可以逐步浏览代码、检查变量等。