将调试器附加到打印筛选器管道服务
重要
新式打印平台是 Windows 与打印机通信的首选方式。 建议使用 Microsoft 的 IPP 收件箱类驱动程序以及打印支持应用 (PSA) 来自定义 Windows 10 和 11 中的打印体验,以便进行打印机设备开发。
有关详细信息,请参阅新式打印平台和打印支持应用设计指南。
XPSDrv 驱动程序筛选器由打印筛选器管道服务 (printfilterpipelinesvc.exe) 进行托管。 如果要将 Microsoft Windows 调试器 (WinDbg) 附加到打印筛选器管道服务,有两种基本方法:
使用命令行中的 WinDbg 启动进程。
将 WinDbg 附加到现有进程。
筛选器管道主机必须由打印后台处理程序启动,因此必须使用第二个选项将 WinDbg 附加到进程。 但是,筛选器管道主机可能并非持久性的。 当应用程序向打印队列提交作业时,服务的新实例就会启动,而作业完成后不久服务就会终止。 在打印任务提交后但要调试的筛选器开始运行前,将 WinDbg 附加到 printfilterpipelinesvc.exe 可能比较困难,尤其是要调试筛选器的启动或初始化代码时。
要解决这一问题,可以修改 printfilterpipelinesvc.exe 在打印任务完成后的持续时间。 该值由 HKEY_LOCAL_MACHINE\System\CurrentControlSet\Control\Print 注册表项的 PipelineHostTimeout 值进行控制。
使用以下步骤更改筛选器管道服务超时值:
运行 Microsoft 注册表编辑器 (RegEdit),并导航至 HKEY_LOCAL_MACHINE\System/CurrentControlSet\Control\Print。
在键中添加 PipelineHostTimeout REG_DWORD 值(如果尚不存在)。
将 PipelineHostTimeout 设置为超时值(以毫秒为单位)。 设置一个足够大的值,让自己有充足的时间附加进程和设置断点。 例如,如果希望超时值为 1.5 分钟,请将 PipelineHostTimeout 设置为 90000。
在设置 PipelineHostTimeout 值后,按照以下步骤将 WinDbg 附加到管道筛选器服务:
以升高的权限运行 WinDbg,但不要将其附加到进程中。
向驱动程序提交打印作业并等待完成。 筛选器管道服务会在指定超时值内继续运行。
从 WinDbg 文件菜单中选择“附加到进程”。
在“附加到进程”对话框中,选择 printfilterpipelinesvc.exe,然后单击“确定”。 如果进程被列为“拒绝访问”,则可能意味着 WinDbg 没有以升高的权限运行。
酌情设置断点。
再次提交打印作业。
筛选器主机进程应在第一个断点或第一个验证程序停止(以先到者为准)时进入调试器。 在这里,可以逐步浏览代码、检查变量等。