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

歡迎訪問 生活随笔!

生活随笔

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

windows

windows虚拟显示器开发(二)WDDM hook(USB转HDMI驱动、USB手写屏开发)

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

很久沒有繼續研究wddm hook了,最后一次研究還在3年前,不得不說雖然應用的少,但是wddm hook卻是很有技術含量的一項技術,而且實用性很高,我們除了做虛擬顯示器還能做很多的東西,比如高效的截屏(因為直接從驅動層面截屏,所以效率和實現效果秒殺mirror driver和DXGI)、視頻重定向(視頻硬件加速的時候可以直接獲取原始碼流)、修改原始的顯示器廠商信息、修改顯示器支持分辨率,等等騷操作wddm hook都可以實現。

去年,深圳某硬件公司找到我,他們正在做usb轉HDMI或者USB轉VGA的硬件連接線,這種線市面上很常見,當然也比較實用,但是芯片卻一直被少數幾個廠商壟斷著,比較有名的兩個,displaylink和fresco logic。我們知道顯示器一般是直接插在顯卡的HDMI或VGA等輸出上,但是我們現在要做的是顯示器插在電腦的USB上,并非由顯卡直接輸出,如何做到顯示器接收顯卡的輸出?

其實芯片的實現難度還好,主要就是將圖片信息轉換成HDMI或VGA信號,關鍵在于如何在windows層面做到查到USB上跟插在顯卡的VGA或者HDMI輸出上一樣的效果,display link類的實現原理如下:

芯片受制于人畢竟不是好事,畢竟大部分利潤都被芯片公司賺走了,所以該硬件公司找到我,他們已經可以做出將圖片轉換成VGA和HDMI信號的芯片了,萬事俱備,只欠東風,現在就需要有個人幫他們做一個驅動,該公司的劉總尋了很多年,終于找到了我,很是興奮,跟我初步聊完,第二天就從深圳飛到我所在的城市,聊完技術細節,很快的就簽了開發協議,協議的需求就是要兼容市面上win7及以上Windows系統,并輸出屏幕圖片,由于公司芯片采用usb2.0傳輸,帶寬有限,需要圖片的變化區域而不是整屏數據。

需要支持win7、win8及win10,不用多說,wddm hook肯定是跑不掉了,看來我又要重抄舊業,說起wddm hook,在兼容性這塊我真的有點后怕, 我在2017年到2018年間做過一個win7的虛擬顯示器采用的便是wddm hook技術,當時解決了公司VDI顯卡透傳上的幾個難題,年底還拿了公司的技術突破獎。因為公司的顯卡場景比較少,當時我們用的是AMD的消費級顯卡,只需兼容這一款就夠了,對其他顯卡的兼容性沒有做過多的測試,所以如果使用在usb轉HDMI這種個人用戶,需要市場上各種類型的顯卡,我是很沒有底氣的,是什么讓我有這么大的勇氣來簽這個協議,是對技術的追求還是喜歡有挑戰性的工作?都不是,是因為窮!

關于調試和逆向
說來慚愧,我剛開始在做wddm hook的時候還不會基本的內核態windbg調試,當時的調試還是采用最原始的打日志方式,舉個很簡單的例子,有條分支走錯了,可能我需要把每條可能走到這條分支的點都需要加上日志,要是分支多的話就需要打很多了,如果我會內核態windbg調試,我直接給函數加個斷點,然后單步調試,看下哪部邏輯錯了,順便能看下每個變量是什么,程序為什么出錯很快就能一清二楚了。

其次,我曾經遇到一個問題,系統在安裝我的驅動后,在關機的時候卡死了,這時候怎么辦呢?當初使用的方法是一點點屏蔽代碼,用排除法的方法來看下是哪段代碼出問題,簡直是弱爆了。

還有一點是自己研究還不如借鑒友商的實現,我曾經在osr論壇上看到有位大佬說,wddm hook他們從開始做到穩定使用,花費了10人年,可想而知這個的難度,所以我一個人自己去閉門造車的話肯定不行,再花個10年,等我做穩定了技術早就被淘汰了,那么你又沒有源碼怎么借鑒呢?經過這幾年在公司修電腦的歷練,已經熟練的學會了逆向技術,對一個工程進行逆向,有兩個必不可少的條件:1.你需要對整個工程的實現原理有個大概的了解;2.你需要熟練的使用逆向工具。所以我完全可以憑借以前的wddm hook經驗再加最近幾年的IDA逆向經驗,成功的把市面上成熟的技術給逆向出來,事實證明,我用了不到2個月就把代碼逆的七七八八了,至于逆的哪個我就不說了,肯定是那個兼容性最好的,誰兼容性最好我就借鑒誰的。

實現的USB手寫屏的效果如下:

usb顯示器

總結

以上是生活随笔為你收集整理的windows虚拟显示器开发(二)WDDM hook(USB转HDMI驱动、USB手写屏开发)的全部內容,希望文章能夠幫你解決所遇到的問題。

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