列印驅動程式版本控制
重要
新式列印平臺是 Windows 與印表機通訊的慣用方法。 我們建議您使用Microsoft的 IPP 收件匣類別驅動程式,以及列印支援應用程式 (PSA),自定義 Windows 10 和 11 中的列印體驗,以進行印表機裝置開發。
如需詳細資訊,請參閱 新式列印平臺 和 列印支援應用程式設計指南。
Unidrv 型和 Pscript5 型印表機迷你驅動程式,以及整合型印表機驅動程式(完全由 IHV 開發的驅動程式),應該使用印表機驅動程式版本設定,Microsoft Windows XP 和更新版本。 Windows XP 和更新版本的列印多任務緩衝處理器會使用版本控制資訊,在安裝新的操作系統版本或 Service Pack 時,或是建立新的點和列印連線時,選取正確的驅動程式檔案。
Windows 2000 或舊版 NT 操作系統版本不支援印表機驅動程式版本控制。 在這些操作系統版本中,列印後台處理程式會根據是否只取代檔案時間戳上的特定驅動程式檔案做為其決策。 較新的檔案一律會優先選擇舊檔案,即使具有較新日期的檔案可能有舊的功能集也一樣。 因為變更檔案的日期很容易,所以這可以防止多任務緩衝處理程式在選擇的檔案中做出正確的選擇。
若要確保已安裝正確的驅動程式檔案版本,只要將版本號碼新增至那些檔案即可。 若要這樣做,您可以對 pdrvver.h 進行次要修改(隨附於 Windows 驅動程式套件),並將該檔案包含在印表機驅動程式 DLL 資源檔中。 使用 INF 型安裝來設定整合型驅動程式也受益於驅動程式版本控制,因為較新的 DLL 不會覆寫較舊的 DLL,即使較舊的 DLL 可能有較新的時間戳也一樣。
pdrvver.h 標頭幾乎只包含預處理器 #define 指示詞。 前兩個不能修改VER_FILETYPE和VER_FILESUBTYPE,表示檔案是驅動程式的資源檔,特別是列印機驅動程式。 VFT_DRV和VFT2_DRV_VERSIONED_PRINTER常數會以VER_FILETYPE和VER_FILESUBTYPE顯示,如VS_FIXEDFILEINFO結構所述。 您需要變更的動作是最後四個,如下所示:
VER_FILEVERSION
這個常數應該設定為四個逗號分隔的 WORD 值序列。 第三個和第四個 WORD 分別用來設定VS_FIXEDFILEINFO結構的 dwFileVersionLS 成員的高和低 WORD。
以下說明四個 WORD 的每個意義。
第一個 WORD
已保留。 此值應設定為 0。
第二個 WORD
表示驅動程式的主要版本。 針對使用者模式驅動程式,請將此設定為 0x0003。 針對內核模式驅動程式,請將此設定為 0x0002。
第三個 WORD
表示具有高位元組和低位元組的功能集編號。
高位元組
代表主要功能集版本。 假設較新版本具有舊版功能的超集。 使用每個新的主要版本遞增此值。
針對在 Windows XP 和更新版本上執行的 Unidrv 和 Pscript5 型迷你驅動程式,包括 Windows Update 和 Service Pack,這應該設定為 0x05。
低位元組
代表次要功能集版本 - 相同程式代碼基底或架構的新版本。 使用每個新的次要版本遞增此值。
針對在下列操作系統版本上執行的 Unidrv 和 Pscript5 型迷你驅動程式,應該設定此位元組,如下所示:
Windows XP:設定為 0x01。
第一個 Windows XP Service Pack:設定為 0x01。 (特定錯誤修正編號出現在第四個 WORD 中。
第一個 Windows Update:設定為 0x02。
第四個 WORD
表示錯誤修正或 Service Pack 版本。 當它是 Bug 修正或 Service Pack 的集合時,在發行新二進位檔時遞增此值。
以下是整合型驅動程式範例:
#define VER_FILEVERSION 0, 3, 0X0100, 0X0002
依序,由左至右,第一個 WORD 值是零,它必須是。 第二個 WORD 的值是三個,表示這是使用者模式驅動程式。 在第三個 WORD 中,高位元組的值(0X01)表示這是第一個主要版本,而相同 WORD (0x00) 的低位元組表示到目前為止沒有次要版本。 第四個 WORD (0x0002) 表示這是第二個 Bug 修正或 Service Pack 版本。 (這些版本類型之間沒有區別。
以下是一些 Unidrv-/Pscript5 型迷你驅動程式範例:
#define VER_FILEVERSION 0, 3, 0X0501, 0X0001
依序,從左至右,第一個 WORD 值是零,如同之前一樣。 第二個 WORD 的值是三個,表示這是使用者模式驅動程式。 第三個 WORD 中,高位元組和低位元組值(分別0X05和0x01)表示這是 Windows XP 的版本。 第四個 WORD (0x0001) 表示這是第一個 Bug 修正或 Service Pack 版本。
#define VER_FILEVERSION 0, 3, 0X0502, 0X0000
和之前一樣,第一個 WORD 是零,而第二個 WORD 表示這是使用者模式迷你驅動程式。 第三個 WORD (0x0502) 表示這是 Windows XP 之後發行的第一個 Windows Update 版本。 第四個 WORD (0x0000) 表示這不是錯誤修正或 Service Pack 版本。
VER_FILEDESCRIPTION_STR
這個常數應該設定為識別驅動程序的名稱,如下列範例所示。
#define VER_FILEDESCRIPTION_STR "Sample Printer Driver Resource DLL"
VER_INTERNALNAME_STR
將此常數設定為名稱,指定檔案的內部名稱(不包括路徑),如下列範例所示。
#define VER_INTERNALNAME_STR "SAMPLERES.DLL"
VER_ORIGINALFILENAME_STR
將此常數設定為名稱,指定檔案的原始名稱(不包括路徑),如下列範例所示。
#define VER_ORIGINALFILENAME_STR "SAMPLERES.DLL"