印表機驅動程序隔離
重要
新式列印平臺是 Windows 與印表機通訊的慣用方法。 我們建議您使用Microsoft的 IPP 收件匣類別驅動程式,以及列印支援應用程式 (PSA),自定義 Windows 10 和 11 中的列印體驗,以進行印表機裝置開發。
如需詳細資訊,請參閱 新式列印平臺 和 列印支援應用程式設計指南。
印表機驅動程式隔離可藉由讓印表機驅動程式在與列印多任務緩衝處理器執行進程分開的進程中執行,藉此改善 Windows 印表服務的可靠性。
支援印表機驅動程式隔離是在 Windows 7、Windows Server 2008 R2 和更新版本的作業系統中實作。
從 Windows 7 和 Windows Server 2008 R2 開始,收件匣印表機驅動程式必須支援印表機驅動程式隔離,而且能夠在隔離程式中執行。
在舊版 Windows 中,印表機驅動程式一律在與多任務緩衝處理程式相同的進程中執行。 在多工作緩衝處理程式中執行的印表機驅動程式元件包括下列各項:
列印驅動程式設定模組
列印處理器
轉譯模組
單一列印驅動程式元件的失敗可能會導致列印子系統失敗、停止所有使用者和所有列印元件的列印作業。
從 Windows 7 和 Windows Server 2008 R2 開始,系統管理員可以選擇將印表機驅動程式設定為在隔離的進程中執行,也就是與多任務緩衝處理程式分開的進程。 藉由隔離驅動程式,系統管理員可以防止驅動程式元件中的錯誤停止列印服務。
如需多任務緩衝處理程式函式的詳細資訊,請參閱 多任務緩衝處理程式元件函式和結構。
INF 檔案中的驅動程式隔離支援
根據預設,如果安裝印表機驅動程式的 INF 檔案未指出驅動程式支援驅動程式隔離,則列印機類別安裝程式會將驅動程式設定為在多任務緩衝處理程式中執行。 不過,如果 INF 檔案指出驅動程式支援驅動程式隔離,安裝程式會將驅動程式設定為在隔離進程中執行。 系統管理員可以覆寫這些組態設定,並針對每個驅動程式指定在多任務緩衝處理程式或隔離進程中執行驅動程式。
為了支持驅動程式隔離,安裝印表機驅動程式的 INF 檔案可以使用 DriverIsolation 關鍵詞來指出驅動程式是否支援印表機驅動程式隔離。 設定 DriverIsolation=2 表示驅動程式支援驅動程序隔離。 設定 DriverIsolation=0 表示驅動程式不支援驅動程序隔離。 省略 INF 檔案中的 DriverIsolation 關鍵詞與設定 DriverIsolation=0 的效果相同。
驅動程式隔離設定的後台處理程式函式
下表顯示系統管理員可用來設定驅動程式隔離設定的後台處理程式功能。
函式名稱 | 作業 |
---|---|
GetPrinterDataEx | 取得印表機的驅動程式隔離設定。 |
SetPrinterDataEx | 設定印表機的驅動程式隔離設定。 |
EnumPrinterDataEx | 列舉印表機的驅動程式隔離設定。 |
FindFirstPrinterChangeNotification、 FindNextPrinterChangeNotification | 要求印表機驅動程式隔離設定變更的通知。 |
資料的格式如下所示:
每個群組中的驅動程式會以 『\』 分隔
每個驅動程式群組都會以 『\\』 分隔
第一個群組會將驅動程式載入多任務緩衝處理程式。 每個後續群組都會在每個群組的隔離進程中載入驅動程式。 第二個群組會被視為預設載入其他支援隔離的驅動程式的「共用」群組。
透過系統管理設定驅動程式隔離模式
計算機管理員可以使用 Windows 列印管理主控台,或呼叫 Windows 多任務緩衝處理程式函式,為電腦上安裝的每個印表機驅動程式設定驅動程式隔離設定。 系統管理員會將驅動程式設定為使用下表所列的其中一個設定。
驅動程式隔離模式 | 意義 |
---|---|
共用 | 在與其他印表機驅動程式共用的進程中執行驅動程式,但與多任務緩衝處理程式不同。 |
隔離式方案 | 在與多任務緩衝處理程式分開的進程中執行驅動程式,而不會與其他印表機驅動程序共用。 |
無 | 在多任務緩衝處理程式中執行驅動程式。 |
在理想情況下,印表機驅動程式能夠以共用模式執行。 也就是說,它會在與其他印表機驅動程式共用的隔離進程中執行,但與多任務緩衝處理程式分開。 如果驅動程式可以在與多任務緩衝處理程式不同的進程中執行,但無法與其他驅動程式共用進程,則驅動程式可能需要以隔離模式執行。 例如,設計不佳的驅動程式可能具有與相關驅動程式或相同驅動程式不同版本衝突的檔名,或驅動程式可能會經常發生錯誤,或有記憶體流失,而干擾相同進程中執行之其他驅動程式的作業。
為了支援疑難解答,網域系統管理員可以在網域中的計算機上停用驅動程式隔離功能,或者系統管理員可以強制計算機上所有的印表機驅動程式以隔離模式執行。 在隔離模式中,每個驅動程式都必須在與多任務緩衝處理器和其他印表機驅動程式不同的進程中執行。
如果組策略停用驅動程式隔離,則所有印表機驅動程式都會關閉隔離。 如果已啟用隔離,則會檢查個別驅動程式。 如果驅動程式已設定隔離模式,則會根據登錄專案,以共用、隔離或無模式執行。 不過,如果驅動程式未設定隔離模式且與隔離相容,則會以共用模式執行。 如果驅動程式與模式不相容,組策略覆寫會決定驅動程式是以共用模式或無模式執行。
下圖顯示選擇驅動程式隔離模式的決策對應:
驅動程式隔離下允許的多任務緩衝處理程式函式
在驅動程式隔離下只允許特定函式。
Spoolss.dll函式
下列函式會由 spoolss.dll 導出,並可透過連結至 spoolss.lib 來提供給多任務緩衝處理程式外掛程式外掛程式。
WinSpool.drv 函式
下列函式會由 winspool.drv 匯出,並可透過連結至 Winspool.h 來提供給多任務緩衝處理程式外掛程式。