自定义的打印机安装操作

重要

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

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

要为使用 Ntprint.dll(默认的 Windows 2000 及更高版本打印机类安装程序)安装的打印机提供自定义的打印机设置操作,则可以在打印机的 INF 文件中包含一个 VendorSetup INF 条目。

注意

请注意,VendorSetup 现已被弃用,开发的任何新的 v3 或 v4 驱动程序都不应使用它。 本主题仅供参考,或用于维护已使用此 INF 指令的现有 v3 驱动程序。

如果计划在安装打印机驱动程序时显示用户界面元素,则必须使用 VendorSetup INF 条目。 但只有在必要时,才应使用 VendorSetup INF 条目。 它的一个明显缺点是,普通用户无法使用即插即用功能安装打印机(在这种情况下,用户必须是管理员)。

如果设备驱动程序未签名,或者(签名或未签名)驱动程序的 INF 文件包含 VendorSetup INF 条目,则无法使用服务器端安装程序来安装设备。 如果驱动程序未经签名,则安装程序会将 0x8000 添加到该驱动程序的秩上(如果它是已签名的驱动程序)。 如果驱动程序的 INF 文件中包含 VendorSetup 条目,则安装程序就会判断设备安装需要用户交互(这在服务器端安装中不可能发生),同时停止安装。

如果驱动程序的秩为 0x8000 或更大,则安装程序还会停止服务器端安装。 当具有管理权限的用户登录时,安装可以继续进行,此时安装程序会以客户端安装的方式重新启动设备安装。 对于秩为 0x1000 或更大的驱动程序,如果硬件 ID 不匹配,安装程序会在新设备 DLL 中启动“找到新的硬件向导”,提示用户安装驱动程序。

如果已签名驱动程序的 INF 文件包含 VendorSetup 条目,并且驱动程序的秩小于 0x1000,则安装程序不会启动“找到新的硬件向导”。 有关详细信息,请参阅安装程序如何选择驱动程序

VendorSetup 条目的格式如下:

VendorSetup= FileName, FunctionName

其中 FileName 是包含设置函数的 DLL 名称,而 FunctionName 是函数名称。 DLL 必须安装在 %windir%\system32 目录中。 只有通过即插即用或添加打印机向导安装打印机时,打印机类安装程序才会调用此 DLL 中的设置函数。 如果只安装了驱动程序(例如,使用添加打印机驱动程序向导),则不会调用设置功能。

要将一个或多个文件复制到 %windir%\system32 目录,可以在 INF DestinationDirs 部分中添加 INF 编写器定义的部分名称。 在以下示例中,OEMVendorFiles 部分列出了要复制的所有文件。

[DestinationDirs]
OEMVendorFiles = 11
...
[OEMVendorFiles]
vendor.dll

FunctionName 指定的函数必须符合以下原型:

VOID WINAPI FunctionName (HWND hWnd, HINSTANCE hInstance, LPSTR lpszCmdLine, UINT nCmdShow);

其中 FunctionName 是安装程序函数的名称。 函数的参数及其说明如下表所示。

参数 说明
hWnd 指定父窗口的句柄。
hInstance 指定调用进程的实例句柄。
lpszCmdLine 指定包含已安装打印机名称的 ANSI 字符串。 此字符串由 FunctionName 解析。
nCmdShow 指定如何显示窗口。 控制窗口显示方式的标志在 Winuser.h 中定义。

打印机类安装程序调用设置功能是安装操作的最后步骤之一。