打印机驱动程序隔离

重要

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

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

打印机驱动程序隔离使打印机驱动程序能够在独立于打印后台处理程序运行的进程中运行,从而提高了 Windows 打印服务的可靠性。

在 Windows 7、Windows Server 2008 R2 及更高版本的操作系统中实现了打印机驱动程序隔离支持。

从 Windows 7 和 Windows Server 2008 R2 开始,收件箱打印机驱动程序必须支持打印机驱动程序隔离,并且能够在隔离的进程中运行。

在早期版本的 Windows 中,打印机驱动程序始终在与后台处理程序相同的进程中运行。 在后台处理程序进程中运行的打印机驱动程序组件包括:

  • 打印驱动程序配置模块

  • 打印处理器

  • 呈现模块

单个打印驱动程序组件失败可能会导致打印子系统失败,从而停止所有用户和所有打印组件的打印操作。

从 Windows 7 和 Windows Server 2008 R2 开始,管理员可以选择将打印机驱动程序配置为在隔离的进程中运行,即独立于后台处理程序进程的进程。 通过隔离驱动程序,管理员可以阻止驱动程序组件故障中止打印服务。

有关后台处理程序函数的详细信息,请参阅后台处理程序组件函数和结构

INF 文件中的驱动程序隔离支持

默认情况下,如果安装打印机驱动程序的 INF 文件未指示驱动程序支持驱动程序隔离,则打印机类安装程序会将驱动程序配置为在后台处理程序进程中运行。 但是,如果 INF 文件指示驱动程序支持驱动程序隔离,安装程序会将驱动程序配置为在隔离的进程中运行。 管理员可以覆盖这些配置设置,并为每个驱动程序指定是在后台处理程序进程中还是隔离的进程中运行驱动程序。

为了支持驱动程序隔离,安装打印机驱动程序的 INF 文件可以使用 DriverIsolation 关键字,指示驱动程序是否支持打印机驱动程序隔离。 设置 DriverIsolation=2 表示驱动程序支持驱动程序隔离。 设置 DriverIsolation=0 表示驱动程序不支持驱动程序隔离。 省略 INF 文件中的 DriverIsolation 关键字与设置 DriverIsolation=0 具有相同的效果。

用于驱动程序隔离设置的后台处理程序函数

下表显示了管理员可用于配置驱动程序隔离设置的后台处理程序函数。

函数名 操作
GetPrinterDataEx 获取打印机的驱动程序隔离设置。
SetPrinterDataEx 设置打印机的驱动程序隔离设置。
EnumPrinterDataEx 枚举打印机的驱动程序隔离设置。
FindFirstPrinterChangeNotificationFindNextPrinterChangeNotification 请求打印机驱动程序隔离设置更改通知。

数据的格式如下:

  • 每个组中的驱动程序均由“\”分隔

  • 每个驱动程序组均由“\\”分隔

第一个组会将驱动程序加载到后台处理程序进程中。 每个后续组都会在每个组的独立进程中加载驱动程序。 第二个组被视为默认情况下加载其他支持隔离的驱动程序的“共享”组。

通过管理配置驱动程序隔离模式

计算机管理员可以使用 Windows 打印管理控制台或调用 Windows 后台处理程序函数,为计算机上安装的每个打印机驱动程序配置驱动程序隔离设置。 管理员将驱动程序配置为使用下表中列出的设置之一。

驱动程序隔离模式 含义
共享 在与其他打印机驱动程序共享但独立于后台处理程序进程的进程中运行驱动程序。
隔离 在独立于后台处理程序进程且未与其他打印机驱动程序共享的进程中运行驱动程序。
在后台处理程序进程中运行驱动程序。

理想情况下,打印机驱动程序能够在共享模式下运行。 也就是说,它在与其他打印机驱动程序共享但独立于后台处理程序进程的隔离进程中运行。 如果驱动程序可以在独立于后台处理程序进程的进程中运行,但很难与其他驱动程序共享进程,则驱动程序可能需要以隔离模式运行。 例如,设计不佳的驱动程序可能具有与相关驱动程序或同一驱动程序不同版本冲突的文件名,或者驱动程序可能会频繁出错,或者内存泄漏会干扰在同一进程中运行的其他驱动程序的操作。

为了支持故障排除,域管理员可以在域中的计算机上禁用驱动程序隔离功能,或者管理员可以强制计算机上的所有打印机驱动程序以隔离模式运行。 在隔离模式下,每个驱动程序都必须在独立于后台处理程序和其他打印机驱动程序的进程中运行。

如果组策略禁用了驱动程序隔离,则所有打印机驱动程序都会关闭隔离。 如果启用了隔离,则会检查各个驱动程序的模式。 如果驱动程序设置了隔离模式,则会根据注册表项在共享、隔离或无模式下运行。 但是,如果驱动程序未设置隔离模式并且它与隔离兼容,则它会在共享模式下运行。 如果驱动程序与模式不兼容,组策略覆盖将确定驱动程序是以共享模式还是无模式运行。

下图显示了用于选择驱动程序隔离模式的决策映射:

用于选择驱动程序隔离模式的流程图。

驱动程序隔离下允许的后台处理程序函数

仅在驱动程序隔离下才允许特定功能。

Spoolss.dll 函数

以下函数由 spoolss.dll 导出,可通过链接到 spoolss.lib 来供后台处理程序插件使用。

WinSpool.drv 函数

以下函数由 winspool.drv 导出,可通过链接到 Winspool.h 来供后台处理程序插件使用。

另请参阅

后台处理程序组件函数和结构