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 使用內核模式驅動程式 Framework (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 主機控制器擴充驅動程序的責任如下:

  • 提供 XHCI 驅動程式的 USB 特定物件。
  • 提供 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 裝置,如 USB 2.0 規格中所定義。

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

在 Windows 8 中,Microsoft 提供的資訊 (INF) 檔案 WinUSB,Winusb.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 用戶端驅動程式可以根據驅動程式的需求,在使用者模式或核心模式中執行。 您可以使用 KMDF、UMDF 或 WDM 例程來撰寫 USB 用戶端驅動程式。

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

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

  • Usbd.sys

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

  • Usbdex.lib

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

  • Winusb.dll

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