打印驱动程序版本控制

基于 Unidrv 和 Pscript5 的打印机微型驱动程序以及单一打印机驱动程序 (完全由 IHV) 开发的驱动程序,应使用 Microsoft Windows XP 及更高版本的打印机驱动程序版本控制。 Windows XP 及更高版本的打印后台处理程序使用版本控制信息,以便在安装新的操作系统版本或 Service Pack 期间或建立新的点和打印连接时选择正确的驱动程序文件。

Windows 2000 或以前基于 NT 的操作系统版本不支持打印机驱动程序版本控制。 在这些操作系统版本中,打印后台处理程序基于是否仅在文件的时间戳上替换特定驱动程序文件的决定。 较新的文件始终优先于较旧的文件,即使具有较新日期的文件可能具有旧功能集。 由于更改文件的日期很容易,因此这可以防止后台处理程序在所选文件中做出正确的选择。

若要确保安装了正确的驱动程序文件版本,只需将版本号添加到这些文件。 你可以通过对 pdrvver.h (进行轻微修改来执行此操作,后者附带 Windows 驱动程序工具包 [WDK]) ,并在打印机驱动程序 DLL 资源文件中包括该文件。 使用基于 INF 的安装设置整体驱动程序也受益于驱动程序版本控制,因为较新的 DLL 不会被较旧的 DLL 覆盖,即使较旧的 DLL 可能具有较新的时间戳。

pdrvver.h 标头几乎只包含预处理器#define指令。 前两个,VER_FILETYPE和VER_FILESUBTYPE,不能修改,指示该文件是驱动程序的资源文件,特别是打印机驱动程序。 (VER_FILETYPE和VER_FILESUBTYPE显示的常量VFT_DRV和VFT2_DRV_VERSIONED_PRINTER,请参阅VS_FIXEDFILEINFO结构的Microsoft Windows SDK文档。) 需要更改的常量是最后四个,如下所示:

VER_FILEVERSION
此常量应设置为四个逗号分隔的 WORD 值序列。 第三个和第四个 WORD 分别用于设置VS_FIXEDFILEINFO结构的 dwFileVersionLS 成员的高和低 WORD。 下表描述了四个 WORD 中每个 WORD 的含义:

含义

第一个 WORD

保留。 此值应设置为 0。

第二个 WORD

表示驱动程序的主要版本。 对于用户模式驱动程序,请将此项设置为0x0003。 对于内核模式驱动程序,请将此项设置为0x0002。

第三个 WORD

表示特征集编号。

高字节

表示主要功能集版本。 假定较新版本具有上一版本的功能的超集。 使用每个新的主要版本递增此值。

对于在 Windows XP 及更高版本(包括 Windows 汇报 和 Service Pack)上运行的基于 Unidrv 和 Pscript5 的微型驱动程序,应将其设置为0x05。

低字节

表示次要功能集版本 - 同一代码库或体系结构中的新版本。 使用每个新的次要版本递增此值。

对于在以下操作系统版本中运行的基于 Unidrv 和 Pscript5 的微型驱动程序,应按如下所示设置此字节:

Windows XP:设置为0x01。

第一个 Windows XP Service Pack:设置为0x01。 (第四个 WORD.) 中会显示特定 bug 修复编号

第一个Windows 更新:设置为0x02。

第四个 WORD

表示 bug 修复或 Service Pack 版本。 当它是 bug 修复或 Service Pack 的集合时,在发布新二进制文件时递增此值。

下面是一个整体驱动程序示例:

#define VER_FILEVERSION    0, 3, 0X0100, 0X0002

为了从左到右,第一个 WORD 值为零,它必须是零。 第二个 WORD 的值为 3,表示这是用户模式驱动程序。 在第三个 WORD 中,高字节的值 (0X01) 表示这是第一个主要版本,而同一 WORD (0x00) 的低字节表示目前没有次要版本。 第四个 WORD (0x0002) 指示这是第二个 bug 修复或 Service Pack 版本。 (不区分这些类型的 releases.)

下面是一些基于 Unidrv-/Pscript5 的微型驱动程序示例:

#define VER_FILEVERSION    0, 3, 0X0501, 0X0001

为了从左到右,第一个 WORD 值为零,如前所述。 第二个 WORD 的值为 3,表示这是用户模式驱动程序。 第三个 WORD 中,高字节和低字节值分别 (0X05和0x01,) 表示这是 Windows XP 的一个版本。 第四个 WORD (0x0001) 指示这是第一个 bug 修复或 Service Pack 版本。

#define VER_FILEVERSION    0, 3, 0X0502, 0X0000

与以前一样,第一个 WORD 为零,第二个 WORD 表示这是用户模式微型驱动程序。 第三个 WORD (0x0502) 表示这是 Windows XP 之后发布的第一个Windows 更新版本。 第四个 WORD (0x0000) 指示这既不是 bug 修复,也不是 Service Pack 版本。

VER_FILEDESCRIPTION_STR
此常量应设置为标识驱动程序的名称,如以下示例所示。

#define VER_FILEDESCRIPTION_STR    "Sample Printer Driver Resource DLL"

VER_INTERNALNAME_STR
将此常量设置为指定文件的内部名称的名称, (不包括路径) ,如以下示例所示。 有关详细信息,请参阅 Windows SDK 文档。

#define VER_INTERNALNAME_STR    "SAMPLERES.DLL"

VER_ORIGINALFILENAME_STR
将此常量设置为指定文件的原始名称的名称, (不包括路径) ,如以下示例所示。 有关详细信息,请参阅 Windows SDK 文档。

#define VER_ORIGINALFILENAME_STR    "SAMPLERES.DLL"