AddPrinterDriverEx 函数

AddPrinterDriverEx 函数安装本地或远程打印机驱动程序,并链接配置、数据和驱动程序文件。 除了具有 AddPrinterDriver 的功能外,它还具有允许严格升级、严格降级、仅复制较新文件和复制所有 (而不考虑文件时间戳) 的选项。

注意

不再建议在没有驱动程序包的情况下安装打印机驱动程序。 请改用 InstallPrinterDriverFromPackage

语法

BOOL AddPrinterDriverEx(
  _In_    LPTSTR pName,
  _In_    DWORD  Level,
  _Inout_ LPBYTE pDriverInfo,
  _In_    DWORD  dwFileCopyFlags
);

parameters

pName [in]

指向以 null 结尾的字符串的指针,该字符串指定应安装驱动程序的服务器的名称。 如果此参数为 NULL,则该函数将在本地计算机上安装驱动程序。

级别 [in]

pDriverInfo 指向的结构的版本。 此值可以是 2、3、4、6 或 8。

pDriverInfo [in, out]

指向包含打印机驱动程序信息的 结构的指针。 可以是以下项之一。

Level 的值 DRIVER_INFO_* 结构
2
DRIVER_INFO_2
3
DRIVER_INFO_3
4
DRIVER_INFO_4
6
DRIVER_INFO_6
8
DRIVER_INFO_8

如果 pDriverInfo 指向的结构的 pEnvironment 成员为 NULL,则该函数使用调用方/客户端的当前环境,而不是目标/服务器的环境。

dwFileCopyFlags [in]

用于复制驱动程序文件的选项。 此参数的取值可为下列值之一:

含义
APD_COPY_ALL_FILES
添加打印机驱动程序并复制 printer-driver 目录中的所有文件。 使用此选项忽略文件时间戳。
APD_COPY_FROM_DIRECTORY
使用 在 DRIVER_INFO_6 结构中指定的完全限定文件名添加打印机驱动程序。 此标志是 ORed 与其他复制标志之一。 如果设置了此标志,则如果DRIVER_INFO_6结构指定存在的文件不存在,则 AddPrinterDriverEx 将失败。 无需将文件复制到系统的打印机驱动程序目录。 请参阅备注。
Windows 2000: 不支持此标志。
APD_COPY_NEW_FILES
添加打印机驱动程序,并复制打印机驱动程序目录中比当前使用的任何相应文件更新的文件。 此标志模拟 AddPrinterDriver 的行为。
APD_STRICT_DOWNGRADE
仅当打印机驱动程序目录中的所有文件都早于当前使用的任何相应文件时,才添加打印机驱动程序。
APD_STRICT_UPGRADE
仅当打印机驱动程序目录中的所有文件都比当前使用的任何相应文件更新时,才添加打印机驱动程序。

返回值

如果函数成功,则返回值为非零值。

如果函数失败,则返回值为零。

如果已知打印机驱动程序在使用操作系统时出现问题, 则 AddPrinterDriverEx 将失败并显示以下错误代码之一:

错误代码 含义
ERROR_PRINTER_DRIVER_BLOCKED 驱动程序在操作系统上不起作用。
ERROR_PRINTER_DRIVER_WARNED 驱动程序在操作系统上不可靠。 但是,如果指定了APD_INSTALL_WARNED_DRIVER,则会安装驱动程序,并且不会发出警告。

有关详细信息,请参阅“备注”部分。

备注

注意

这是一个阻塞或同步函数,可能不会立即返回。 此函数的返回速度取决于运行时因素,例如网络状态、打印服务器配置以及编写应用程序时难以预测的打印机驱动程序实现因素。 从管理与用户界面交互的线程调用此函数可能会使应用程序看起来无响应。

调用方必须具有 SeLoadDriverPrivilege

在调用 AddPrinterDriverEx 函数之前,必须将驱动程序所需的所有文件复制到系统的打印机驱动程序目录。 若要检索此目录的名称,请调用 GetPrinterDriverDirectory 函数。

若要确定当前安装的打印机驱动程序,请调用 EnumPrinterDrivers 函数。

如果已成功添加打印机驱动程序,该函数将调用 DrvDriverEvent (DRIVER_EVENT_INITIALIZE、Level、DRIVER_INFO_*、lparam ) 函数,以允许驱动程序在安装打印机驱动程序期间执行所需的任何初始化。 有关 DrvDriverEvent 的详细信息,请参阅 Microsoft Windows 驱动程序开发工具包 (DDK)

在调用 DrvDriverEvent 期间,驱动程序不应使用 UI 调用。 若要执行与 UI 相关的作业,安装程序应使用打印机的 .inf 文件中的 VendorSetup 条目,或者对于即插即用设备,安装程序可以使用特定于设备的辅助安装程序。 有关 VendorSetup 的详细信息,请参阅 DDK。

DRIVER_INFO_6 结构中引用的文件必须是从中发出调用的计算机的本地文件。 只要 UNC 名称是本地计算机,文件名就可以是 UNC 名称。

要求

要求
最低受支持的客户端
Windows 2000 Professional [仅限桌面应用]
最低受支持的服务器
Windows 2000 Server [仅限桌面应用]
标头
Winspool.h (包括 Windows.h)

Winspool.lib
DLL
Winspool.drv
Unicode 和 ANSI 名称
AddPrinterDriverExW (Unicode) 和 AddPrinterDriverExA (ANSI)

另请参阅

打印

打印后台处理程序 API 函数

AddPrinterDriver

DRIVER_INFO_2

DRIVER_INFO_3

DRIVER_INFO_4

DRIVER_INFO_6

DeletePrinterDriverEx

EnumPrinterDrivers

GetPrinterDriverDirectory