USB Development Kit (UsbDk) Design and Architecture 中文版


這是我對UsbDk官方文檔的翻譯,希望對大家有幫助,有錯誤之處還請諒解.
UsbDk開發套件是由一套軟件工具和模塊組成,它把USB設備從PNP管理器和設備驅動分離,並提供了一系列API供用戶層程序直接獨占的訪問USB設備,進行USB設備相關操作。
UsbDk一開始是用來為spice遠程桌面程序提供USB重定向的支持,然而它可以被用來做很多其他相關事情,通過UsbDk自帶的庫或者通過libusb(我們為libusb做了backend支持)

UsbDk開發套件包含以下模塊:

  1. UsbDk.sys – USB總線過濾驅動,用來獲取對USB設備的獨占訪問
  2. UsbDkHelper.dll – 輔助dll,用來安裝,卸載,設置驅動。並轉發USB請求到指定的USB設備
  3. UsbDkController.exe – 簡單的命令行程序,用來演示和驗證相關接口
    remote-viewer程序調用UsbDk接口,用來對USB設備進行發現,訪問和重定向的操作

系統架構總覽

UsbDk.sys 是一個USB過濾驅動,也是一個USB設備驅動。
安裝的時候,它被注冊為一個USB過濾驅動,當有USB設備或者USB Hubs設備被系統發現的時候,系統會調用它。在調用的時候,UsbDk.sys會檢查底層設備的標識並單獨為USB Hubs 創建過濾示例

作為一個USB Hub的過濾驅動,UsbDk.sys 接收來自USB設備棧上層設備的所有請求,包括PNP管理器所發送的枚舉請求(IRP_MJ_PNP/IRP_MN_QUERY_DEVICE_RELATIONS)。

等USB hub驅動完成對PNP管理器枚舉請求的處理,UsbDk.sys會掃描返回的子設備列表,假設有設備被標記為重定向(根據現有的配置)它會為這些設備生產過濾實例

因此,所有PNP管理器請求都將通過UsbDk.sys回調,后者根據需要會修改設備ID屬性以使PNP管理器識別該設備為通用USB設備。

除此之外,UsbDk.sys 標記下層設備對象為 raw PDO,這樣系統會分為這些設備對象分配驅動(創建他們的驅動,也就是UsbDk.sys)作為設備驅動

在此階段,所有對此vendor id的特定設備請求都將被轉發到UsbDk.sys,UsbDk.sys會根據需求修改或者傳遞相關設備的請求

UsbDkHelper.dll提供了一個單獨的API,用來把指定USB設備從USB設備棧中分類,而不需要獲取對設備的實際訪問。(隱藏API)

這個API可能對一些安全程序很有用,比如根據安全策略阻止對USB設備的訪問,防止Windows顯示僅由UsbDk管理的設備的“發現新硬件”彈窗。當UsbDk.sys在枚舉階段發現要隱藏的設備標識,它會在處理(IRP_MJ_PNP/IRP_MN_QUERY_DEVICE_RELATIONS)的時候從USB bus driver返回的設備列表中擦除相關設備,這有效的把設備從PNP管理器和系統的驅動棧中隱藏了起來。

UsbDk安裝后的設備棧結構
—————————————————————

QUERY_DEVICE_RELATIONS 請求流程圖
—————————————————————

設備獲取訪問流程圖
—————————————————————

**重定向后 QUERY_DEVICE_RELATIONS 請求流程圖 **
—————————————————————

重定向生效后的設備棧架構
—————————————————————


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM