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