日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > windows >内容正文

windows

windows虚拟显示器开发(三)USB显示器

發布時間:2023/12/10 windows 29 豆豆
生活随笔 收集整理的這篇文章主要介紹了 windows虚拟显示器开发(三)USB显示器 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

? ? ? ? 我們常用的顯示器接口有HDMI、VGA等接口,這些接口是直接在顯卡上的,當顯示器插在顯卡上,顯卡就直接可以將顯示信號輸出到顯示器了。

? ? ? ? 關于USB顯示器跟HDMI之類的顯示器有本質區別,我們需要實現的有兩個:

  • 在USB上插入一個顯示器,怎么讓windows系統能識別到顯示器
  • 如何讓USB顯示器顯示對應的屏幕內容。
  • WDDM驅動框架

    ????????WDDM(Windows Display Driver Model)是微軟最新的顯卡驅動模型,最先被運用在Vista系統中,它提供了一系列函數原型,顯卡驅動需要實現其中的函數,在系統運行過程中,Windows操作系統會根據程序的請求調用對應的函數。

    ????????WDDM驅動的框架主要如圖1所示。由圖可知,WDDM中的顯卡驅動主要分成兩部分:用戶態驅動(User-Mode Display Driver)和內核態驅動(Display MiniportDriver)。其中用戶態驅動以動態鏈接庫的形式存放在system32文件夾中,當程序調用D3D函數時,系統會自動加載用戶態驅動到自己的運行空間中。用戶態驅動中的函數大致和Direct3D中的API是一一對應的關系,因此每次程序調用顯卡相關的函數(如3D函數),一般會被D3D Runtime轉換到用戶態驅動中對應的函數中,由用戶態驅動完成實際的功能。而內核態驅動則在系統啟動時由系統自動加載到內核態內存空間中,它主要用于實現與顯卡硬件之間交互,如顯存的分配、顯卡中斷處理等。

    圖1 WDDM框架示意圖

    WDDM與Dxgknrl的交互分析

    ????????關于WDDM框架的分析,我們需要從入口函數分析,我們就拿我們比較熟悉的win10 QXL驅動來進行底層逆向分析,win10的QXL驅動是WDDM Displayonly的驅動,其與Dxgknrl的通信方式及獲取入口地址的原理與常規WDDM是一致的,我們逆向的到的原理如圖2所示。

    圖2 WDDM與Dxgkrnl交互原理

    步驟

    操作

    備注

    1

    WDDM驅動向Dxgkrnl發送DeviceIOControl,請求入口函數地址

    2

    Dxgkrnl返回入口函數地址給WDDM驅動

    3

    驅動實現各個miniport回調函數,復制給結構體

    4

    驅動調用入口函數,將miniport的回調函數傳遞進去

    5

    Dxgkrnl開始調用miniport的回調函數,驅動開始工作

    WDDM 內核態hook原理

    ????????從上述原理,我們可以對內核態WDDM進行過濾,編寫過濾驅動DisplayProxy掛載在Dxgkrnl上層,此時WDDM驅動在將IO碼發送給Dxgkrnl之前先經過DisplayProxy,Dxgkrnl返回的入口函數地址也先經過DisplayProxy,DisplayProxy就可以對該入口函數進行替換,替換成自己的,然后再在函數內部調用原始的入口函數。

    步驟

    操作

    備注

    1

    WDDM驅動向Dxgkrnl發送DeviceIOControl,請求入口函數地址

    2-3-4

    Dxgkrnl返回入口函數地址DpiInitialize給WDDM驅動,被DisplayProxy攔截,替換成自己的函數proxyDpiInitialize

    5

    驅動實現各個miniport回調函數,復制給結構體

    6

    驅動調用入口函數proxyDpiInitialize,將miniport的回調函數傳遞進去

    7-8

    displayproxy將wddm傳遞進來的回調函數攔截,替換成自己的回調函數,然后調用原始的入口函數DpiInitialize

    9

    Dxgkrnl調用proxy的回調

    10-11

    走到了我們定義的回調函數中,我們做一些自定義操作,比如增加顯示器等,然后再調用原生的miniport回調

    WDDM過濾驅動指責劃分

    ????????WDDM驅動框架分用戶態驅動和內核態驅動,對WDDM過濾驅動我們要對其用戶態驅動和內核態驅動都要進行過濾,兩個模式的過濾驅動分別實現不同的功能:

  • WDDM內核態過濾驅動用來實現虛擬顯示器、普通類型圖片(無需進行GPU硬件加速或渲染的圖片,如桌面、文件窗口等)、鼠標位置、鼠標形狀的捕獲。
  • WDDM用戶態過濾驅動用來實現3D全屏、Aero、GPU硬件加速或渲染類型圖片(如窗口化3D、視頻等)的捕獲。
  • 增加過濾驅動后,整個WDDM顯示框架變成了如圖4所示。

    圖4 wddm過濾驅動框架

    windows7下的虛擬顯示器效果

    總結

    以上是生活随笔為你收集整理的windows虚拟显示器开发(三)USB显示器的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。