建置基本的 v4 印表機驅動程式
重要
新式列印平臺是 Windows 與印表機通訊的慣用方法。 我們建議您使用Microsoft的 IPP 收件匣類別驅動程式,以及列印支援應用程式 (PSA),自定義 Windows 10 和 11 中的列印體驗,以進行印表機裝置開發。
如需詳細資訊,請參閱 新式列印平臺 和 列印支援應用程式設計指南。
警告
此印表機驅動程式教學課程包含多個錯誤,目前無法使用。
使用 Visual Studio 2019 Microsoft驅動程式開發精靈來建置基本的 v4 印表機驅動程式,以選取要建立功能性印表機驅動程式的最低功能集。
本主題中的指示將著重於建置驅動程式所需的步驟,而且不會說明精靈中可用的許多印表機驅動程序選項。
本主題的意圖是在 Visual Studio 2019 中開發印表機驅動程式時,提供相關程式的簡介。
在探索精靈中的驅動程式選項中,會提供更詳細的印表機驅動程序選項。
必要條件
請遵循下載 Windows 驅動程式套件 (WDK) 中的指引,並確定您已完成下列專案:
使用 C++ 工作負載的桌面開發以及正確的 Windows 10 SDK 版本來安裝 Visual Studio 2019。
安裝 Windows 10 版本 2004 的 Windows Driver Kit (WDK)。
安裝適用於 Visual Studio 2019 的 Windows Driver Kit (WDK) 擴充功能。
選取基本驅動程式的功能
在 Visual Studio 的主功能表中,選取 [檔案>新>專案]。
在 [ 新增專案] 視窗的右上方搜尋方塊中,輸入 印表機驅動程式 v4 ,然後按 Enter。 這會擷取名稱包含搜尋文字的所有驅動程序範本。
在中間窗格中,選取 [ 印表機驅動程式 V4]。
在 [ 名稱 ] 欄位中輸入驅動程式的名稱,然後選取 [ 確定]。 例如,您可以輸入 MyV4PrintDriver。
在 [建立 v4 列印驅動程序精靈] 的 [選擇驅動程序轉譯類型]底下,選取 [具有自定義轉譯篩選器的 V4 列印驅動程式] (僅接受 XPS)。
保留所有其他選項的預設設定,然後選取 [ 下一步]。
在精靈的 [ 安裝資訊] 區段中,將所有選項保留為其預設設定,然後選取 [ 下一步]。
在精靈的 [ 安裝資訊(第 2 頁)] 區段中,將所有選項保留為其預設設定,然後選取 [ 下一步]。
Microsoft Visual Studio 會使用上述選取項目來產生 MyV4PrintDriver 的項目檔。
確認產生的驅動程式檔案
流覽至所產生驅動程式檔案的資料夾。 例如,如果您將專案 命名為 MyV4PrintDriver,則預設會將檔案儲存到下列位置: My Documents > Visual Studio 2019 > Projects > MyV4PrintDriver > MyV4PrintDriver。
確認資料夾包含下列檔案:
File name 檔案類型 MyV4PrintDriver.gpd 印表機描述檔 MyV4PrintDriver.inf 安裝資訊檔案 MyV4PrintDriver.vcxproj C++項目檔 MyV4PrintDriver.vcxproj.filters C++專案篩選檔案 MyV4PrintDriver-manifest.ini 組態設定檔 (列印驅動程式指令清單) V4PrintDriver-Intellisense.js Intellisense 的 JavaScript 檔案 V4PrintDriver-Intellisense-Windows8.1.js Intellisense 的 JavaScript 檔案
請注意,上表所建立的其中一個檔案是 INF 檔案。 請注意,Visual Studio 建立了必須完成的基本架構 INF 檔案,以便用來安裝驅動程式。
為驅動程式建立唯一的 PrinterDriverID
在 [Visual Studio 工具] 功能表中,選取 [ 建立 GUID]。
選取選項 4。登錄格式 ,然後選取 [ 複製] 按鈕。
在 Visual Studio 的 方案總管 中,展開 MyV4PrintDriver 節點。
選取 [ 驅動程式檔案],然後在 [ 屬性 ] 視窗中查看 [唯一 標識符 ] 字段的值。 將此值取代為您使用 [貼上] 產生的 GUID。
完成 INF 檔案
在 MyV4PrintDriver 專案中,驅動程式檔案應該有一個專案。 開啟此檔案,並列出 MyV4PrintDriver.inf 檔案。 開啟此檔案。
1.更新著作權聲明
INF 檔案的前 2 行是驅動程式套件的著作權聲明。
第 1 行包含貴公司的年份和名稱。 將 YYYYY 字元取代為目前的年份,並將製造商名稱取代 <為您公司的名稱> 。
第 2 行描述驅動程式 INF 的內容,包括製造商名稱和裝置型號資訊。 將製造商名稱取代為公司名稱>的字元<,並將印表機型號>的<字元取代為驅動程式支援的印表機型號名稱。
例如,如果年份是 2021,且公司的名稱是 Fabrikam,而列印裝置型號為 1234,您會輸入下列內容:
; Copyright (c) 2021 Fabrikam
; INF file for the Fabrikam 1234 print driver
2.確認 [版本] 區段正確
尋找包含 [Version] 的行。
檢查並確定您看到這一行:
ClassVer=4.0
檢查並確定您看到這一行:
Signature="$WINDOWS NT$"
3.設定 [SourceDisksFiles] 區段
尋找包含 [SourceDisksFiles] 的行。
在這裡下方輸入下列幾行:
MyV4PrintDriver.gpd=1
MyV4PrintDriver-manifest.ini=1
MyV4PrintDriverRenderFilter-PipelineConfig.xml=1
MyV4PrintDriverRenderFilter.dll=1
4.設定 [DriverFiles] 區段
尋找包含 [DriverFiles] 的行。
在這裡下方輸入下列幾行:
MyV4PrintDriver.gpd
MyV4PrintDriver-manifest.ini
MyV4PrintDriverRenderFilter-PipelineConfig.xml
MyV4PrintDriverRenderFilter.dll
5.設定 [Standard.NT$ARCH$] 區段
尋找包含 [Standard.NT$ARCH$] 的行。
本節會參考 Install
每個模型的 INF 區段。 例如,如果印表機的型號是 Fabrikam 1234,則您會輸入下列命令:
"Fabrikam 1234"=DriverInstall, USBPRINT\\Fabrikam1234
"Fabrikam 1234"=DriverInstall, WSDPRINT\\Fabrikam1234
6.將 PrinterDriverID 新增至 INF 檔案
在 Visual Studio 的 方案總管 中,展開 [MyV4PrintDriver] 節點。
選取 [ 驅動程式檔案],然後在 [ 屬性 ] 視窗中查看 [唯一 標識符 ] 字段的值。 這是驅動程式識別碼 (GUID)。 反白顯示並複製它。
在 INF 檔案的 [Standard.NT$ARCH$] 區段中,輸入下列這一行:
"Fabrikam 1234"=DriverInstall,
然後在逗號之後,貼上您在上一個步驟中複製的 GUID。 已完成 的 [Standard.NT$ARCH$] 區段看起來應該如下所示:
"Fabrikam 1234"=DriverInstall, {GUID}
"Fabrikam 1234"=DriverInstall, USBPRINT\Fabrikam1234
"Fabrikam 1234"=DriverInstall, WSDPRINT\Fabrikam1234
7. 設定 [字串] 區段
尋找包含 [Strings] 的行。
在此下方,您將找到 ManufacturerName 字串串的定義。 將製造商名稱取代為公司名稱>的字元<,以提供目標列印機的製造商名稱,並刪除包含的其餘行;TODO:
例如,如果您的公司名稱是 Fabrikam,您會輸入下列內容:
ManufacturerName="Fabrikam"
8.儲存 INF 檔案
當您完成 INF 檔案時,它看起來應該如下所示:
; Copyright (c) 2021 Fabrikam
; INF file for the Fabrikam 1234 print driver
[Version]
Signature="$Windows NT$"
Class=Printer
ClassGuid={4D36E979-E325-11CE-BFC1-08002BE10318}
Provider=%ManufacturerName%
CatalogFile=MyV4PrintDriver.cat
ClassVer=4.0
DriverVer=03/17/2014,1.0.0.0
PnpLockdown=1
[Manufacturer]
%ManufacturerName%=Standard,NT$ARCH$
[Standard.NT$ARCH$]
"Fabrikam 1234"=DriverInstall, {GUID}
"Fabrikam 1234"=DriverInstall, USBPRINT\Fabrikam1234
"Fabrikam 1234"=DriverInstall, WSDPRINT\Fabrikam1234
[DriverInstall]
CopyFiles=DriverFiles
[DriverFiles]
MyV4PrintDriver.gpd
MyV4PrintDriver-manifest.ini
MyV4PrintDriverRenderFilter-PipelineConfig.xml
MyV4PrintDriverRenderFilter.dll
[DestinationDirs]
DefaultDestDir = 66000
[SourceDisksNames]
1 = %DiskName%,,,""
[SourceDisksFiles]
MyV4PrintDriver.gpd=1
MyV4PrintDriver-manifest.ini=1
MyV4PrintDriverRenderFilter-PipelineConfig.xml=1
MyV4PrintDriverRenderFilter.dll=1
[Strings]
ManufacturerName="Fabrikam"
DiskName="MyV4PrintDriver Installation Disk"
更新驅動程式檔案清單
在 Visual Studio 的 方案總管 中,展開 MyV4PrinterDriver 節點。
選取 MyV4PrintDriver.gpd 檔案,並將其拖曳至 [驅動程序檔案 ] 節點。
使用 MyV4PrintDriver-manifest.ini 執行相同的動作。
將管線組態檔新增至驅動程式套件
在 方案總管 中,選取並按住 [或以滑鼠右鍵按兩下] MyV4PrintDriver 專案,然後選取 [屬性]。
在 [ MyV4PrintDriver 屬性頁] 視窗中,展開 左窗格中的 [組態屬性 ]。
展開 [ 驅動程式安裝],然後選取 [ 封裝檔案]。
在右窗格中,選取 ,然後按下 <列出的檔案中的 [編輯...]> 資料列。
以管線組態檔的相對路徑取代佔位元,例如
../MyV4PrintDriver Render Filter/MyV4PrintDriverRenderFilter-PipelineConfig.xml
,然後按兩下 [ 確定]。
將轉譯篩選的參考新增至驅動程式套件
在 Visual Studio 的 方案總管 中,展開 [MyV4PrinterDriver] 節點。
選取並按住 [參考] 節點,或以滑鼠右鍵按兩下 [參考 ] 節點 -> 選取 [ 新增參考]。
選取 MyV4PrintDriver 轉譯篩選的複選框,然後選取 [確定]。
設定用於偵錯和部署的驅動程序解決方案
在 方案總管 中,選取並按住 [或以滑鼠右鍵按兩下] MyV4PrintDriver 專案,然後選取 [屬性]。
在 [ MyV4PrintDriver 屬性頁] 視窗中,展開 左窗格中的 [組態屬性 ]。
展開 [ 驅動程式安裝],然後選取 [ 部署]。 在右窗格中執行下列動作:
確定已設定 目標計算機名稱 。 如果沒有,請選取 [...並遵循設定 裝置 精靈中的提示來設定遠端目標電腦。
在部署之前,請先檢查移除先前的驅動程式版本。
選取 [ 安裝/重新安裝並驗證],然後從下拉式方塊中選取 [預設印表機驅動程式套件安裝工作 ]。
在 [選擇性自變數] 字段中輸入驅動程序的名稱(不含名稱前後的任何引號)。
選取 [確定]。
設定驅動程序簽署
在 方案總管 中,選取並按住 [或以滑鼠右鍵按兩下] MyV4PrintDriver 專案,然後選取 [屬性]。
在 [ MyV4PrintDriver 屬性頁] 視窗中,展開 左窗格中的 [組態屬性 ]。
展開 [ 驅動程序簽署],然後選取 [ 一般]。
在右窗格中,確認 [簽署模式 ] 已設定為 [測試簽署]。
選取 [ 測試憑證],然後從下拉式方塊中選取 [建立測試憑證... ]。
選取 [TimeStampServer],然後從下拉式方塊中選取 [Verisign]。
選取 [確定]。
建置及部署驅動程式
在 方案總管 中,選取並按住 [方案 MyV4PrintDriver] [2 個專案],然後選取 [建置方案]。
當建置程式完成時,系統會自動安裝驅動程式。 請確定 [ 輸出 ] 視窗中沒有錯誤。
測試驅動程式
使用隨插即用或 新增印表機精靈建立列印佇列。
如需 v4 印表機驅動程式之 INF 檔案的詳細資訊,請參閱 V4 驅動程式 INF。
除了上表中的檔案之外,請注意 已建立 MyV4PrintDriver 轉譯篩選 資料夾。 這是轉譯篩選項目範本,可提供建置 XPS 轉譯篩選器和 XPS 篩選管線組態檔的良好基礎。 如需 XPS 轉譯篩選的詳細資訊,請參閱 XPSDrv 轉譯模組。