自定义的打印机安装操作

重要

建议使用 Microsoft 的 IPP 收件箱类驱动程序,以及 Print Support Apps (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= FileNameFunctionName

其中 ,FileName 是包含安装函数的 DLL 的名称, FunctionName 是函数的名称。 DLL 必须安装在 %windir%\system32 目录中。 仅当即插即用或“添加打印机向导”安装打印机时,打印机类安装程序才会调用此 DLL 中的安装程序。 当仅安装驱动程序时,不会调用安装函数 (例如,通过使用添加打印机驱动程序向导) 。

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

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

FunctionName 指定的函数必须与以下原型匹配:

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

其中 FunctionName 是安装函数的名称。 下表显示了函数的参数及其说明。

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

打印机类安装程序调用安装函数作为安装操作的最后步骤之一。