调试 XPSDrv 打印机驱动程序

重要

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

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

带有 XPSDrv 打印机驱动程序的打印队列由 spoolsv.exe 进程托管。 但与基于 GDI 的打印机驱动程序不同的是,XPSDrv 打印机驱动程序的筛选器托管在 printfilterpipelinesvc.exe 进程中,而该进程与 spoolsv.exe 进程是分开的。 因此,必须将调试器附加到 printfilterpipelinesvc.exe 进程,才能调试 XPSDrv 打印机驱动程序中的筛选器。

配置 printfilterpipelinesvc.exe 进程超时

当打印作业通过 XPSDrv 打印机驱动程序发送到打印队列时,printfilterpipelinesvc.exe 进程就会启动。 进程会在注册表中的值定义的一段时间内处于非活动状态后退出。 printfilterpipelinesvc.exe 进程的间歇性使得将调试器连接到 printfilterpipelinesvc.exe 来调试 XPSDriv 打印机驱动程序中的筛选器并非易事。

但是,可以在注册表中配置非活动超时时间。 注册表中 HKEY_LOCAL_MACHINE\System\CurrentControlSet\Control\Print 子项下的 PipelineHostTimeout 值定义了 printfilterpipelinesvc.exe 进程的超时时间,单位为毫秒。 此值可以增大,以方便对 XPSDrv 打印机驱动程序进行调试。 请注意,启动 printfilterpipelinesvc.exe 进程是为了解析配置文件,因此即使没有为驱动程序定义筛选器,也会启动该进程。

配置系统以进行调试

要调试 XPSDrv 打印机驱动程序,则必须:

  1. 将使用要调试的驱动程序的打印队列分配到文件端口。

  2. 将 PipelineHostTimeout 值设置为能为调试问题提供足够时间的值。

  3. 向步骤 1 中创建的打印队列发送打印作业,以便启动 Printfilterpipelinesvc.exe 进程。

  4. 将调试器连接到 Printfilterpipelinesvc.exe 进程并开始调试。

连接调试器后,就可以在筛选器模块中设置断点,然后开始调试打印机驱动程序。

如果要调试的打印机驱动程序导致 printfilterpipelinesvc.exe 进程在连接调试器之前退出,则可以执行以下操作:

  1. 创建一个配置文件中未定义任何筛选器的 XPSDrv 打印机驱动程序。

  2. 使用上一步创建的打印机驱动程序来创建打印队列。

  3. 将使用要调试的驱动程序的打印队列分配到文件端口。

  4. 将 PipelineHostTimeout 值设置为能为调试问题提供足够时间的值。

  5. 向步骤 2 中创建的打印队列发送打印作业。

  6. 将调试器连接到 Printfilterpipelinesvc.exe 进程。

  7. 在要调试的打印机驱动程序中设置断点。

  8. 使用要调试的驱动程序打印到打印队列。