调试 XPSDrv 打印机驱动程序

重要

建议使用 Microsoft 的 IPP 收件箱类驱动程序,以及 Print Support Apps (PSA) ,在 Windows 10 和 11 中自定义打印体验,以便进行打印机设备开发。

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

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

配置printfilterpipelinesvc.exe进程Time-Out

使用 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. 使用要调试的驱动程序打印到打印队列。