打印提供程序简介

警告

从Windows 10开始,支持第三方打印提供程序的 API 已弃用。 Microsoft 不建议对第三方打印提供商进行任何投资。 此外,在提供 v4 打印驱动程序模型的Windows 8和较新的产品上,第三方打印提供程序不得创建或管理使用 v4 打印驱动程序的队列。

打印提供商负责将打印作业定向到本地或远程打印设备。 他们还负责打印队列管理操作,例如启动、停止和枚举服务器的打印队列。 打印提供程序定义打印服务器的高级、与计算机无关、操作系统无关的视图。

所有打印提供程序都实现一组通用的 打印提供程序功能。 这些功能由一组 API 函数定义,这些函数由后台处理程序的路由器 (Spoolss.dll) 调用。

由打印提供程序定义的大多数函数都需要打印机句柄作为输入。 后台处理程序客户端通过在 Winspool.drv 中调用 OpenPrinter 来获取打印机句柄,后者调用 API 服务器 (Spoolsv.exe) 。 后台处理程序的路由器 (Spoolss.dll) 调用每个打印提供程序的 OpenPrinter 函数,直到其中一个提供打印机句柄和指示打印提供程序识别指定打印机名称的返回值。 然后,路由器将自己的句柄返回到 API 服务器。 路由器的句柄包括打印机句柄和提供程序句柄。 此句柄将返回到应用程序,以便可以将来自应用程序的后续调用定向到正确的提供程序和打印机。

Microsoft 为 Windows 2000 及更高版本提供以下打印提供程序:

Localspl.dll
本地打印提供程序。 处理定向到从本地服务器管理的打印机的所有打印作业。

Win32spl.dll
Windows 网络打印提供程序。 处理定向到远程 Win32 (基于 NT 的操作系统或 Windows for 工作组) 服务器的打印作业。 当作业到达远程服务器时,它将传递给服务器的本地打印提供程序。

Nwprovau.dll
Novell NetWare 打印提供程序。 处理定向到 Novell NetWare 打印服务器的打印作业。

Inetpp.dll
HTTP 打印提供程序。 处理发送到 URL 的打印作业。

供应商可以创建其他网络打印提供商。 有关详细信息,请参阅 编写网络打印提供程序

下图演示了涉及这些打印提供程序的可能流路径。

打印提供程序流路径。

查看关系图时,应考虑以下几点:

  • 如果打印机由客户端系统管理,则打印作业由 本地打印提供程序 (Localspl.dll) 处理。 由 Localspl.dll 管理的打印机不必是客户端的物理本地打印机;可以直接连接到网卡。

  • 如果打印机位于基于 NT 的操作系统服务器上,则网络提供商 (Win32spl.dll) 使用 RPC 将来自客户端路由器的呼叫重定向到服务器的 Spoolsv.exe 进程。 由于打印机是服务器的本地打印机,因此服务器的本地打印提供程序将处理打印作业。

  • 如果打印机位于某种其他类型的服务器上,则可以由本地打印提供程序或支持该服务器类型的网络打印提供程序使用服务器支持的数据格式和网络协议进行访问。

  • 要使本地打印提供程序访问远程打印机,它必须包含可以使用远程打印机或服务器识别的网络协议的 端口监视器