Windows 中的 USB 裝置端驅動程式
描述 USB 函式堆疊的架構。
在 USB 裝置上,當 ACPI 建立 USB 裝置實體裝置物件 (PDO) 時,USB 函式堆疊會參考 隨插即用 管理員所列舉的驅動程式群組。
在單一組態裝置中,USB 裝置可以定義一或多個介面。 例如,媒體傳輸通訊協定 (MTP) 用於將檔案傳送到裝置或從裝置傳輸檔案。 複合USB裝置可以在單一組態中支援多個介面。 USB 函式堆疊會為每個介面建立 PDO,而 PnP Manager 會載入類別驅動程式,以建立該介面的函式裝置物件 (FDO)。
USB 函式堆疊在此映射中概念化:
應用程式和服務
- 所有使用者模式要求都會傳送至Microsoft提供的核心模式類別驅動程式GenericUSBFn.sys。 您可以建立與GenericUSBFn.sys通訊的使用者模式服務,方法是傳送如 genericusbfnioctl.h 中所定義的 I/O 控制碼 (IOCTLs)。 如需這些 IOCTL 的詳細資訊,請參閱 從使用者模式服務與GenericUSBFn.sys通訊
USB 函式類別驅動程式
USB 函式類別驅動程式會在 USB 裝置上實作特定介面(或介面群組)的功能。 MTP 和 IpOverUsb 是系統提供類別驅動程式的範例。 類別驅動程式可以純粹實作為內核模式驅動程式,或是與系統提供的類別驅動程式配對的使用者模式服務GenericUSBFn.sys。
函式類別驅動程式會使用 USB 函式類別驅動程式將要求傳送至控制器,以傳送至 UFX 程式設計介面。
USB 函式類別延伸模組 (UFX)
USB 函式類別延伸模組 (UFX) 是內核模式驅動程式架構 (KMDF) 的系統提供擴充功能。 USB 是標準總線,具有一些必要的功能和功能。 UFX 負責實作所有 USB 函式控制器通用的 USB 函式邏輯,以及處理和/或從 USB 函式類別驅動程式分派要求。 特別是,UFX 會處理列舉裝置和處理標準控制傳輸的程式。 若要執行其中一些作業,UFX 必須知道總線的功能。 建立類別擴充介面時,這些功能會回報給UFX。
UFX 公開標準 IOCTL,上層層(USB 函式類別驅動程式和使用者模式服務)可用來將要求傳送至控制器。 此外,UFX 會通知上層有關從主機接收的標準要求。
USB 函式用戶端驅動程式
UFX 提供抽象介面,以一致的方式跨不同控制器運作。 不過,控制器具有不同的功能,但有限制,例如端點數目、端點類型、低功率、遠端喚醒。 例如,某些控制器支援 DMA,而其他控制器則不支援。 有些控制器會在硬體中實作數據流,而其他控制器則預期驅動程式會處理數據流。 基於這些原因,UFX 只會處理一般功能。 用戶端驅動程式會處理從控制器到控制器的傳輸、電源管理、串流支援和其他功能。
USB 函式用戶端驅動程式負責實作控制器特定的作業。 其中包括實作端點數據傳輸、USB 裝置狀態變更(重設、暫停、繼續)、附加/中斷連結偵測、埠/充電器偵測。 用戶端驅動程式也負責處理電源管理和 PnP 事件。
函式用戶端驅動程式會使用 USB 函式類別驅動程式撰寫為 Kernel-Mode Driver Framework (KMDF) 驅動程式至 UFX 程式設計介面。
Microsoft提供 ChipIdea 和 Synopsys 控制器的內建函式用戶端驅動程式(UfxChipidea.sys、Ufxsynopsys.sys)。
USB 較低的篩選驅動程式
如果函式控制器使用現成的 Synopsys 和 ChipIdea 驅動程式,USB 較低篩選器驅動程式支援偵測充電器。 篩選驅動程式會從 USB 埠偵測開始管理 USB 充電。 它必須針對它支援的每個充電器類型發佈 GUID,以及該充電器的屬性清單。 如果可設定特定的充電器,則較低的 USB 篩選驅動程式會定義支援的 PropertyID 清單及其可傳送至它的對應實值類型,以設定充電器。 驅動程式也會通知電池堆疊何時可以開始充電,以及裝置可繪製的最大目前數量。 針對 Synopsys 和 ChipIdea 驅動程式以外的用戶端驅動程式,可以在用戶端驅動程式中實作充電邏輯。
函式類別驅動程式會使用 程式設計介面來支援專屬充電器,將要求傳送至UFX。