V4 驅動程式設定概念
重要
新式列印平臺是 Windows 與印表機通訊的慣用方法。 我們建議您使用Microsoft的 IPP 收件匣類別驅動程式,以及列印支援應用程式 (PSA),自定義 Windows 10 和 11 中的列印體驗,以進行印表機裝置開發。
如需詳細資訊,請參閱 新式列印平臺 和 列印支援應用程式設計指南。
v4 列印驅動程式模型會使用新的安裝模型來改善用戶體驗並降低支援成本。
v4 列印驅動程式會直接從驅動程式存放區執行,這可消除檔案衝突的可能性,並改善安裝效能。 v4 安裝模型會繼續使用 INF 檔案,但也採用新的指令清單檔案來擷取印表機特定的安裝指示詞。
裝置標識碼
CompatibleIDS
CompatibleID 是列印類別驅動程式的重要概念,因為它們可讓驅動程序支援在新版 Windows 發行后發行的裝置,而不需要更新驅動程式。 這是可能的,因為 CompatibleID 可讓裝置公告支援比 HardwareID 少的列印驅動程式。
如果列印類別驅動程式已經支援特定的 CompatibleID,v4 列印驅動程式不應該再次指定它。 如果列印驅動程式的日期比列印類別驅動程式的日期還新,列印驅動程式就會從 Windows Update 網站自動下載。
裝置應該在其 1284ID 字串中包含 CompatibleID。 如果現有的列印類別驅動程式支援裝置,則列印驅動程式應該使用該 CompatibleID,否則建議您使用下列格式。
1284_CID_<manufacturer identifier>_<PDL identifier>_device family identifier
例如:
1284_CID_FA_PCL5e_Laser
如果已在現有裝置中實作 CompatibleID,列印驅動程式應該會繼續使用這些 CompatibleID。
在 TCP/IP 型列印裝置的安裝中不會使用 CompatibleID。 因此,使用者只需要使用驅動程式的名稱來識別適當的驅動程式。 如果涉及列印類別驅動程式,我們建議製造商在其網站上針對列印類別驅動程式所支援的任何裝置提供相容性清單。 如需如何在硬體中實作 CompatibleID 的詳細資訊,包括規則和限制的完整清單,請參閱 如何在列印裝置中實作相容的標識碼。
Microsoft支援數個標準 CompatibleID,以支援數個製造商中性(標準)列印類別驅動程式。 下表顯示這些標準 CompatibleID 及其相關聯的 PDL 檔類型。
PDL 檔案類型 | Standard CompatibleID |
---|---|
XPS | 1284_CID_MS_XPS |
OpenXPS (ECMA-388) | 1284_CID_MS_OXPS |
PCL6 | 1284_CID_MS_PCL6 |
PS | 1284_CID_MS_PS |
這些標準列印類別驅動程式僅支援一小組功能,因此選擇使用這些類別驅動程式的製造商應實作增強的驅動程式設定,使用 Bidi 來新增更特定的紙張大小和設定。 下表顯示標準列印類別驅動程式所支援的功能和相關聯選項。
功能 | 選項。 |
---|---|
紙張大小 | 字母,A4 |
解決方法 | 300dpi、600dpi |
媒體類型 | 純紙 |
N-Up | 1, 2, 4, 6, 9, 16 |
PrinterDriverID
PrinterDriverID 是新的標識符,用來判斷驅動程式之間的相容性以進行印表機共用,以及驅動程式與印表機延伸模組之間的相容性。 例如,如果伺服器上的驅動程式在其指令清單檔中指定 PrinterDriverID,然後共用驅動程式,則連接到此印表機的用戶端會搜尋本機驅動程式市集和 Windows Update,以尋找驅動程式 INF 中指定相同 PrinterDriverID 的驅動程式。 如果找到相符專案,將會使用該驅動程式建立連線。 用戶端電腦不會使用驅動程式名稱來篩選比對結果。
必須以下列方式為所有相容的驅動程式指定 PrinterDriverID:
在 v4 指令清單中使用 PrinterDriverID 指示詞。
作為 v4 驅動程式 INF 中的 HardwareID。
若要讓兩個不同的驅動程序共用相同的 PrinterDriverID,它們必須與共用相容。 若要讓連線一律成功,這兩個驅動程式必須能夠執行下列動作:
支援相同的 PDL
使用相同的組態檔類型 (GPD 或 PPD)
能夠轉譯伺服器驅動程式 GPD、PPD 和/或條件約束 JS 檔案中指定的任何功能或選項
支援相同的印表機延伸模組
多任務緩衝處理器不會驗證這些限制,而且完全依賴 PrinterDriverID 來指出兩個驅動程式是否相容於共用。 如果對上述任何項目進行變更,製造商必須務必變更驅動程式的 PrinterDriverID。
印表機延伸模組也可以透過PrinterDriverID與驅動程序相關聯。 因此,共用 PrinterDriverID 的兩個驅動程式都必須使用相同的印表機延伸模組。 安裝的最後一個印表機擴充功能將會使用目標 PrinterDriverID 覆寫所有裝置的任何先前印表機擴充功能,因此必須使用相同的應用程式正常運作。
使用 GUID 的最佳做法
GUID 會透過 v4 列印驅動程式模型廣泛使用,尤其是 PrinterDriverID,以及 PrinterExtensionID、EventID 和 ModelID。 這些專案可用來唯一識別系統中的不同專案,或為了維護、共用等目的,將它們識別為相同專案。
建立新的 GUID 時,請一律使用 GUID 產生器,例如Microsoft Visual Studio 中包含的 GUID 或 SDK 中包含的 GUID 產生器。 手動製作的 GUID 和 GUID 已錯誤複製並貼上,很容易發生衝突。
安裝行為
列印佇列名稱
針對 v3 驅動程式,列印佇列名稱會先由驅動程式名稱指定,然後由使用者指定。 隨著列印類別驅動程式的引進,驅動程式名稱對於用戶辨識裝置的用處要少得多。 Windows 會自動為安裝以執行 v4 列印驅動程式的任何 隨插即用 裝置重新命名佇列,如下所示:
一開始,列印佇列名稱會設定為驅動程式名稱。
如果驅動程式是 v4 列印驅動程式,Windows 會使用 Bidi 查詢裝置。
如果指定了 \Printer.DeviceInfo:FriendlyName,它將會作為新的佇列名稱。
否則,Windows 會查詢 \Printer.DeviceInfo:Manufacturer、\Printer.DeviceInfo:ModelName。
如果同時指定兩者,Windows 會將它們串連到 “Manufacturer ModelName”。
如果只有其中一個 Bidi 查詢失敗,Windows 會使用其他查詢的成功傳回作為佇列名稱。
如果所有 Bidi 查詢都失敗,則 Windows 會使用 IEEE 1284ID 來判斷製造商和型號名稱。
如果指定 DESCRIPTION 或 DES,則會使用它作為新的佇列名稱。
否則,Windows 會搜尋 MANUFACTURER 或 MANUFACTURER 和 MODEL 或 MDL。
如果同時指定兩者,Windows 將會將它們串連到「製造商型號」中。
如果其中一個失敗,Windows 會使用來自其他索引鍵的值作為佇列名稱。
新增印表機精靈
驅動程式名稱將繼續是 [新增印表機精靈] 中選擇驅動程式的使用者唯一可用的標識碼。 TCP/IP 型裝置應實 作埠監視器 MIB (PWG 5107.1-2005) 以支援 TCP/IP 自動偵測。 使用硬體識別碼 (HWID) 對應新增至列印類別驅動程式的現有裝置可能會另外使用裝置特定的型號名稱。
變更埠並處理印表機開發節點
為了提供一致的UI體驗,所有列印佇列都會獲得軟體裝置節點(devnode)。 這就是在UI中探索印表機的方式,它允許虛擬印表機、共用印表機的連線,以及以與 隨插即用 (PnP) 印表機相同的方式來列舉和存取網路印表機。 實體 PnP 印表機的軟體開發節點會繼承觸發建立佇列的 PnP devnode 屬性。
當兩個不同的對象相關時,UI 會將 devnode 分組到裝置容器中。 此群組可讓多功能印表機 (MFP) 在 [裝置和印表機] 資料夾中顯示為一個圖示。 MFP 中所有函式的容器標識碼必須相同,函式才能全部出現在相同的圖示下。 這會自動針對 PnP 裝置完成。
變更與佇列相關聯的埠將會變更與佇列開發節點相關聯的容器標識碼。 這會導致佇列不再群組在與實體裝置其餘 PnP 物件的相同裝置容器下。 操作系統中沒有足夠的資訊,無法正確清除佇列和 PnP 物件被分隔的情況。 在某些情況下,這是用戶的實際意圖。 只有變更埠名稱的使用者或應用程式知道預期的結果,而且由使用者/應用程式清除佇列埠變更后留下的任何令人困惑的狀態。 以下是兩個範例情況,指示示範如何適當地清除。
IT 系統管理員設定印表機 – IT 系統管理員會使用 WS 探索在網路上尋找印表機,並將埠變更為 TCP/IP,因為它們喜歡其 TCP/IP 管理程式。
期望 – 裝置和印表機資料夾中只有一個「裝置」。
解決方案 – IT 系統管理員會從裝置和印表機資料夾移除 WSD PnP devnode。
IHV 安裝軟體 – IHV 會與自定義埠監視器一起安裝驅動程式(v4 中不允許自定義埠監視器,但相同的開發節點處理適用於 v3 驅動程式)。 IHV 會將列印佇列的 USB 埠變更為裝置製造商所建立的埠。
期望 – 裝置和印表機資料夾中只有一個「裝置」。
解決方案 1 – 仍然需要 PnP devnode:安裝程式會變更佇列 devnode 的容器識別碼,以符合 PnP 物件。
解決方案 2 – PnP devnode 是多餘的:安裝程式會移除原始的 PnP 裝置。
驅動程式排名
v4 列印驅動程序的引進不會修改 隨插即用 排名行為。 當裝置插入時,將會選取具有最高分數的可用驅動程式。 如果選取的驅動程式是列印類別驅動程式,而且 Windows Update 網站上有較佳的排名、相符的驅動程式,則下次使用者下載 Windows 更新時,會自動取代選取的驅動程式。
如需驅動程式排名的詳細資訊,請參閱 Windows 排名驅動程式的方式。
驅動程式設定最佳做法
包裝
V4 列印驅動程式不會採用 需求 ,並 包含 INF 檔案指示詞或核心驅動程式技術,以處理共用檔案。 因此,v4 列印驅動程式必須是獨立式驅動程式,但只有少數例外狀況。
V4 列印驅動程式可能會繼續相依於 Windows 提供的一般檔案。 其中包括 NTPrint.INF 或 NTPrint4.INF 中的檔案。 驅動程式可以在 v4 指令清單檔中指定 RequiredFiles 指示詞來包含這些檔案。
如果有現有的列印類別驅動程式提供您裝置或 PDL 的基本轉譯功能,則也有使用 RequiredClass 指示詞對類別驅動程式產生相依性的機制。 這個指示詞會讓 Windows 使用 v4 列印驅動程式和所需列印類別驅動程式的檔案來建置驅動程式。 GPD 和 PPD 檔案會合併,其中最特定的檔案優先於較不特定的檔案。 下圖說明用來合併 GPD/PPD 檔案的邏輯,也包含從 Bidi 取得的增強驅動程式組態檔。 驅動程式套件中不會合併其他驅動程式檔案,例如 JavaScript 條件約束。
印表機模型行
隨插即用 會維護模型行上所有 HardwareID 和 CompatibleID 的隱含排名。 因此,Microsoft建議合作夥伴應使用下列最佳做法,以避免在排名方面發生無法預測的行為。
V4 列印驅動程式
V4 列印驅動程式 INFs 必須定義兩種不同的模型行:
HardwareID 行:「驅動程式名稱」 = INSTALL_SECTION,總線編號器\HardwareID
PrinterDriverID 行:“驅動程序名稱” = INSTALL_SECTION,{GUID}
V4 列印驅動程式 INFs 必須在個別線路上定義總線特定的 HardwareID:
“Driver name” = INSTALL_SECTION,WSDPRINT\HardwareID
“Driver name” = INSTALL_SECTION,USBPRINT\HardwareID
“Driver name” = INSTALL_SECTION,LPTENUM\HardwareID
列印類別驅動程式
列印類別驅動程式 INFs 必須定義三種不同類型的模型行:
HardwareID 行:「驅動程式名稱」 = INSTALL_SECTION,HardwareID
PrinterDriverID 行:“驅動程序名稱” = INSTALL_SECTION,{GUID}
CompatibleID 行:“Print Class Driver name” = INSTALL_SECTION,1284_CID_CompatID
列印類別驅動程式 INFs 不得定義任何匯流列舉值(例如 WSDPRINT)