共用方式為


Windows 中的 USB 主機端驅動程式

本文提供通用序列總線 (USB) 驅動程式堆疊架構的概觀。

下圖顯示適用於 Windows 的 USB 驅動程式堆疊架構區塊圖。 此圖顯示 USB 2.0 和 USB 3.0 的個別 USB 驅動程式堆疊。 當裝置連接到 xHCI 控制器時,Windows 會載入 USB 3.0 驅動程式堆疊。

USB 2.0 和 3.0 驅動程式堆疊的架構區塊圖。

Windows 會載入連接至 eHCI、oHCI 或 uHCI 控制器之裝置的 USB 2.0 驅動程式堆疊。 USB 2.0 驅動程式堆疊隨附於 Windows XP 中,隨附 Service Pack 1 (SP1) 和更新版本的 Windows 操作系統。

USB 3.0 驅動程式堆疊

Microsoft使用內核模式驅動程式架構 (KMDF) 介面建立 USB 3.0 驅動程式。 KMDF 驅動程式模型可降低複雜性並改善穩定性。

USB 3.0 主機控制器驅動程式 (Usbxhci.sys)

xHCI 驅動程式是USB 3.0主機控制器驅動程式。 xHCI 驅動程式的責任包括初始化 XHCI 控制器硬體的 MMIO 快取器和主機記憶體型數據結構、將上層驅動程式的傳輸要求對應至傳送要求區塊,以及將要求提交至硬體。 完成傳輸之後,驅動程式會處理來自硬體的傳輸完成事件,並將事件傳播至驅動程式堆疊。 它也會控制 xHCI 控制器裝置位置和端點內容。

Windows 會將 xHCI 驅動程式載入為主機控制器之裝置堆疊中的函式裝置物件 (FDO)。

USB 主機控制器擴充功能 (Ucx01000.sys)

USB 主機控制器擴充驅動程式(KMDF 的擴充功能)是基礎類別特定主機控制器驅動程式的新擴充功能,例如 xHCI 驅動程式。 新的驅動程式是可延伸的,其設計目的是支持未來要開發的其他類型的主機控制器驅動程式。 USB 主機控制器擴充功能可作為中樞驅動程式的通用抽象介面,提供一般機制來佇列主機控制器驅動程式的要求,並覆寫特定選取的函式。 由上層驅動程式起始的所有 I/O 要求都會在 xHCI 驅動程式之前到達主機控制器擴充驅動程式。 收到 I/O 要求後,主機控制器擴充功能會驗證要求,然後將要求轉送至與目標端點相關聯的適當 KMDF 佇列。 xHCI 驅動程式準備好進行處理時,會從佇列擷取要求。 USB 主機控制器擴充驅動程序的責任如下:

  • 將USB特定物件提供給 xHCI 驅動程式。
  • 提供 XHCI 驅動程式的 KMDF 事件回呼例程。
  • 管理和控制與主機控制器相關聯之根中樞的作業。
  • 實作客戶端驅動程式可設定的功能,例如鏈結的 MDL、數據流等等。

USB 中樞驅動程式 (Usbhub3.sys)

適用於 3.0 裝置的 USB 驅動程式堆疊中,新的中樞驅動程式會使用 KMDF 驅動程式模型。 中樞驅動程式主要會執行下列工作:

  • 管理 USB 中樞及其埠。
  • 列舉附加至其下游埠的裝置和其他中樞。
  • 建立列舉裝置和中樞的實體裝置物件(PDO)。

Windows 會將中樞驅動程式載入為中樞裝置堆疊中的 FDO。 新驅動程式中的裝置列舉和中樞管理是透過一組狀態機器實作。 中樞驅動程序依賴 KMDF 進行電源管理和 PnP 功能。 除了中樞管理之外,中樞驅動程式也會執行USB用戶端驅動程式層所傳送之特定要求的初步檢查和處理。 例如,中樞驅動程式會剖析選取組態要求,以判斷要求將設定哪些端點。 剖析信息之後,中樞驅動程式會將要求提交至USB主機控制器擴充功能或進一步處理。

USB 2.0 驅動程式堆疊

Windows 會載入連接至 eHCI、oHCI 或 uHCI 控制器之裝置的 USB 2.0 驅動程式堆疊。 USB 2.0 驅動程式堆疊中的驅動程式隨附於 Windows XP 中,並隨附 SP1 和更新版本的 Windows 操作系統。 USB 2.0 驅動程式堆疊的設計目的是為了方便 USB 2.0 規格中所定義的高速 USB 裝置。

USB 驅動程式堆疊底部是主機控制器驅動程式。 它包含埠驅動程式、Usbport.sys,以及同時執行的三個迷你埠驅動程式的一或多個。 當系統偵測到主機控制器硬體時,它會載入其中一個迷你埠驅動程式。 載入迷你埠驅動程序之後,會載入埠驅動程式,Usbport.sys。 埠驅動程式會處理與特定通訊協議無關之主機控制器驅動程式職責的各個層面。

Usbuhci.sys (通用主機控制器介面) 迷你埠驅動程式會取代隨附於 Windows 2000 的Uhcd.sys迷你類別驅動程式。 Usbohci.sys (開啟主機控制器介面) 迷你埠驅動程式會取代 Openhci.sys。 Usbehci.sys迷你埠驅動程序支援高速 USB 裝置,並在 Windows XP 中引進 SP1 和更新版本和 Windows Server 2003 和更新版本的作業系統。

在所有支援 USB 2.0 的 Windows 版本中,操作系統都能夠同時管理 USB 1.1 和 USB 2.0 主機控制器。 每當操作系統偵測到這兩種類型的控制器都存在時,它會建立兩個不同的裝置節點,每個主機控制器各一個。 Windows 接著會根據系統設定,針對符合 USB 2.0 規範的主機控制器硬體載入Usbehci.sys迷你埠驅動程式,並視系統設定而定,為符合 USB 1.1 規範的硬體Usbohci.sys或Openhci.sys。

埠驅動程式上方是 USB 總線驅動程式,Usbhub.sys也稱為中樞驅動程式。 這是系統上每個中樞的裝置驅動程式。

USB 通用類別泛型父驅動程式 (Usbccgp.sys)

USB 通用類別泛型父驅動程式是複合裝置Microsoft提供的父驅動程式。 如果 deviceClass 為 0 或 0xef,且 numInterfaces 大於裝置描述元中的 1,中樞驅動程式會列舉並載入父複合驅動程式。 中樞驅動程式會將父複合驅動程式的相容標識符產生為 「USB\COMPOSITE」。。 Usbccgp.sys使用 Windows 驅動程式模型 (WDM) 例程。

父複合驅動程式會列舉複合裝置中的所有函式,併為每個函式建立 PDO。 這會導致針對裝置中的每個函式載入適當的類別或客戶端驅動程式。 每個函式驅動程式 (子 PDO) 都會將要求傳送至父驅動程式,以將它們提交至 USB 中樞驅動程式。

Usbccgp.sys隨附於 Windows XP 與 SP1 和更新版本的 Windows 作業系統。 在 Windows 8 中,驅動程式已更新為實作函式暫止和遠端喚醒功能,如 USB 3.0 規格中所定義。

如需詳細資訊,請參閱USB泛型父驅動程式(Usbccgp.sys)。

WinUSB (Winusb.sys)

Windows USB (WinUSB) 是適用於 USB 裝置Microsoft提供的一般驅動程式。 WinUSB 架構是由內核模式驅動程式 (Winusb.sys) 和使用者模式動態連結庫 (Winusb.dll) 所組成。 對於不需要自定義函式驅動程式的裝置,Winusb.sys可以安裝在裝置的核心模式堆疊中作為函式驅動程式。 然後,使用者模式進程可以使用一組裝置 I/O 控制要求或呼叫 WinUsb_Xxx 函式,與Winusb.sys 通訊。 如需詳細資訊,請參閱 WinUSB for Developers 簡介。

在 Windows 8 中,WinUSB、Winusb.inf Microsoft提供的資訊 (INF) 檔案會以裝置標識符字串的形式包含 USB\MS_COMP_WINUSB。 這可讓Winusb.sys自動載入為 MS OS 描述元中具有相符 WinUSB 相容識別碼之裝置的函式驅動程式。 這類裝置稱為 WinUSB 裝置。 硬體製造商不需要發佈其 WinUSB 裝置的 INF 檔案,讓終端使用者的驅動程式安裝程式更簡單。 如需詳細資訊,請參閱 WinUSB 裝置

USB 用戶端驅動程式

每個USB裝置,複合或非複合,都是由客戶端驅動程式管理。 USB 用戶端驅動程式是 USB 驅動程式堆疊客戶端的類別或設備驅動器。 這類驅動程式包括來自Microsoft或第三方廠商的類別和裝置特定驅動程式。 若要查看Microsoft所提供的類別驅動程式清單,請參閱 支援的USB裝置類別的驅動程式。 用戶端驅動程式會呼叫 USB 驅動程式堆疊公開的公用介面,以建立與裝置通訊的要求。

複合裝置的用戶端驅動程式與非複合裝置的用戶端驅動程式並無不同,但驅動程式堆疊中的位置除外。

非複合裝置的用戶端驅動程式會直接分層在中樞驅動程式上方。

對於公開多個函式且沒有父類別驅動程式的複合 USB 裝置,Windows 會在中樞驅動程式與用戶端驅動程式層之間載入 USB 一般父驅動程式(Usbccgp.sys)。 父驅動程式會為複合裝置的每個函式建立個別的 PDO。 用戶端驅動程式 (函式的 FDO) 會載入至泛型父驅動程式上方。 廠商可能會選擇為每個函式提供個別的用戶端驅動程式。

根據驅動程式的需求,USB 用戶端驅動程式可以在使用者模式或核心模式中執行。 USB 用戶端驅動程式可以使用 KMDF、UMDF 或 WDM 例程來撰寫。

用戶端驅動程式的協助程式連結庫

Microsoft提供下列協助程序連結庫,協助核心模式驅動程式和應用程式與 USB 驅動程式堆棧通訊:

  • Usbd.sys

    Microsoft提供導出 USB 用戶端驅動程式例程的Usbd.sys連結庫。 協助程式例程可簡化用戶端驅動程式的操作工作。 例如,藉由使用協助程式例程,USB 用戶端驅動程式可以針對特定作業建置 USB 要求區塊(URB), 例如選取組態,並將這些 URB 提交至 USB 驅動程式堆疊。

  • Usbdex.lib

    此協助程序連結庫是 Windows 8 的新功能。 連結庫會主要導出用於配置和建置 URB 的例程。 這些例程會取代Usbd.sys導出的一些舊版例程。 新的例程需要客戶端驅動程式向 USB 驅動程式堆疊註冊,以維護註冊的句柄。 該句柄用於呼叫其他Usbdex.lib例程。 新例程所配置的特定 URB 內容具有 USB 驅動程式用來改善追蹤和處理的 URB 內容。 如需詳細資訊,請參閱 配置和建置 URL

  • Winusb.dll

    Winusb.dll是一種使用者模式 DLL,會公開 WinUSB 函 式以與Winusb.sys通訊,其會在核心模式中載入為裝置的函式驅動程式。 應用程式會使用這些函式來設定裝置、擷取裝置的相關信息,以及執行 I/O 作業。 如需使用這些函式的相關信息,請參閱 如何使用 WinUSB Functions 存取 USB 裝置。