間接顯示驅動程式概觀
間接顯示驅動程式 (IDD) 模型提供簡單的使用者模式驅動程式模型,以支援未連線到傳統 GPU 顯示器輸出的監視器。 需要 IDD 的一些典型案例包括:
- 透過網路將顯示輸出串流至遠端用戶端(遠端顯示)。
- 為虛擬桌面環境等應用程式建立虛擬監視器(虛擬顯示器)。
- 透過具有一般監視器(VGA、DVI、HDMI、DP 等)連線到計算機的電腦。
IDD 實作
IDD 是裝置的第三方提供的 UMDF 驅動程式。 您可以使用 IddCx (間接顯示驅動程式類別 eXtension) 所公開的功能來開發 IDD,以下列方式與 Windows 圖形子系統進行介面:
- 建立代表間接顯示裝置的圖形配接器。
- 報告與系統連線和中斷連線的監視器。
- 提供線上之監視器的描述。
- 提供可用的顯示模式。
- 支援其他顯示功能,例如硬體滑鼠游標、gamma、I2C 通訊,以及受保護的內容。
- 處理桌面影像以在監視器上顯示。
由於IDD是UMDF驅動程式,因此也會負責實作所有 UMDF 功能,例如裝置通訊、電源管理、隨插即用等等。
IDD 會在會話 0 中執行,而沒有任何元件在用戶會話中執行,因此任何驅動程式不穩定都不會影響整個系統的穩定性。
下圖提供架構概觀。
使用者模式模型
IDD 是僅限使用者模式的模型,不支持內核模式元件。 因此,驅動程式可以使用任何 DirectX API 來處理桌面映像。 事實上,IddCx 會提供桌面影像,以在 DirectX 介面中編碼。
驅動程式不應該呼叫不適合驅動程式使用的使用者模式 API,例如 GDI、視窗 API、OpenGL 或 Vulkan。
IDD 應建置為 通用 Windows 驅動程式 ,以便在多個 Windows 平臺上使用。
在建置階段:
- UMDF IDD 會宣告其所建置的 IddCx 版本。
- OS 可確保載入驅動程式時,會載入正確的 IddCx 版本。
IddCx 回呼和函式命名慣例
前置詞 | 類型 | 備註 |
---|---|---|
EVT_IDD_CX_XXX | IDD 回呼函式 | IDD 會實作iddCx特定的回呼,例如EVT_IDD_CX_ADAPTER_COMMIT_MODES,以及相關的WDF回呼,例如EVT_WDF_DEVICE_D0_EXIT。 |
IddCxXxx | 函式 | 系統提供的IddCx類別擴充函式,IDD可以呼叫;例如,IddCxAdapterInitAsync。 |
PFN_IDDCX_XXX | IddCx 函式的指標 | IDD 不會使用這些指標。 相反地,驅動程式應該使用對等 的 IddCxXxx 函式。 |
範例指令碼
Microsoft提供 Windows 驅動程式範例 GitHub 上的 IDD 實作範例。 此範例示範如何連接監視器、如何回應模式集,以及如何接收畫面格。