WinUSB (Winusb.sys) 開發人員安裝

針對某些通用序列匯流排 (USB) 裝置,您可以安裝 WinUSB (Winusb.sys) ,而不是實作驅動程式。

Important

本文適用於程式設計人員。 如果您是客戶遇到 USB 問題,請參閱 修正 Windows 中的 USB-C 問題

自動安裝 WinUSB,無需 INF 檔案

身為 OEM 或獨立硬體廠商 (IHV) ,您可以建置裝置,讓 Winusb.sys 自動安裝。 這類裝置稱為 WinUSB 裝置,而且不需要您撰寫參考內建 Winusb.inf 的自定義 INF 檔案。

當您連接 WinUSB 裝置時,Windows 會讀取裝置資訊並自動載入 Winusb.sys 。

如需詳細資訊,請參閱 WinUSB 裝置。

指定系統提供的裝置類別來安裝 WinUSB

當您連接設備時,您可能會注意到 Windows 會自動加載 Winusb.sys 。 否則,請按照以下說明載入驅動程式:

  1. 將裝置插入主機系統。
  2. 開啟 裝置管理員 並找到裝置。
  3. 以滑鼠右鍵按一下裝置,然後從內容功能表中選取更新 驅動程式軟體... 。
  4. 在精靈中,選取 [瀏覽我的電腦以取得驅動程式軟體]。
  5. 從電腦上的設備驅動器清單中選取 [讓我挑選]。
  6. 從裝置類別清單中,選取 [通用序列匯流排裝置]。
  7. 精靈會顯示 WinUsb 裝置。 選擇它以加載驅動程序。

如果 通用序列匯流排裝置 未出現在裝置類別清單中,則您必須使用自定義 INF 來安裝驅動程式。 上述程式不會為應用程式 (UWP 應用程式或 Windows 傳統型應用程式) 新增裝置介面 GUID 以存取裝置。 您必須手動新增 GUID,請遵循以下程序。

  1. 如上述程序所述載入驅動程式。

  2. 使用 guidgen.exe等工具,為您的裝置產生裝置介面 GUID。

  3. 在此機碼下尋找裝置的登錄機碼:

    HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Enum\USB\<VID_vvvv&PID_pppp>

  4. 在 [裝置參數] 索引鍵下,新增名為 DeviceInterfaceGUID 的字串登錄專案,或名為 DeviceInterfaceGUIDs 的多字串專案。 將值設定為您在步驟 2 中產生的 GUID。

  5. 拔除裝置與系統的連線,然後重新連線至相同的實體埠。

    Note

    如果您變更實體埠,則必須重複步驟 1 到 4。

為 WinUSB 安裝撰寫自訂的 INF 文件

作為驅動程式套件的一部分,您會提供 .inf 檔案,以將 Winusb.sys 安裝為 USB 裝置的函式驅動程式。

以下是通用 INF 檔案的範例,適用於執行 Windows 10 或更新版本的 x64 和 ARM64 平臺。 此範例不包含共安裝器,因此符合 硬體開發人員中心儀表板 入口網站的簽署資格。

;
; Universal INF file for WinUsb installation
;

[Version]
Signature   = "$Windows NT$"
Class       = USBDevice
ClassGUID   = {88BAE032-5A81-49f0-BC3D-A4FF138216D6}
Provider    = %ManufacturerName%
CatalogFile = WinUSBInstallation.cat
DriverVer   = 09/04/2012,13.54.20.543
PnpLockdown = 1

; ========== Manufacturer and Models sections ===========

[Manufacturer]
%ManufacturerName% = Standard,NTamd64,NTarm64

[Standard.NTamd64]
%DeviceName% =USB_Install, USB\VID_0547&PID_1002

[Standard.NTarm64]
%DeviceName% =USB_Install, USB\VID_0547&PID_1002

; =================== Installation ===================

[USB_Install]
Include = winusb.inf
Needs   = WINUSB.NT

[USB_Install.Services]
Include =winusb.inf
Needs   = WINUSB.NT.Services

[USB_Install.HW]
AddReg=Dev_AddReg

[Dev_AddReg]
HKR,,DeviceInterfaceGUIDs,0x10000,"{9f543223-cede-4fa3-b376-a25ce9a30e74}"

; =================== Strings ===================

[Strings]
ManufacturerName="Contoso"
ClassName="Universal Serial Bus devices"
DeviceName="Fx2 Learning Kit Device"
REG_MULTI_SZ = 0x00010000

此通用 INF 檔案可在多個 Windows 平臺 (x64 和 ARM64) 上使用,而且符合 硬體開發人員中心儀錶板 入口網站簽署的資格。

若要只安裝新的自定義裝置安裝類別,請在裝置 INF 檔案中包含 ClassInstall32 區段。 已安裝類別中裝置的 INF 檔案,無論是系統提供的裝置安裝類別還是自定義類別,都不得包含 ClassInstall32 區段。

除了清單中所述的裝置特定值和一些問題之外,您可以使用這些區段和指令來安裝任何 USB 裝置的 WinUSB。 這些列表項目描述之前 .inf 檔案中的 Includes 和 Directives。

  • USB_Install:安裝 WinUSB 需要 USB_Install 區段中的 Include 和 Needs 指示詞。 您不應該修改這些指令。

  • USB_Install.Services:USB_Install.Services 區段中的 Include 指示詞包含系統提供的 WinUSB .inf (Winusb.inf)。 如果此 .inf 檔案尚未位於目標系統上,Windows 會安裝此 .inf 檔案。 Needs 指示詞會指定 Winusb.inf 內的區段,其中包含將 Winusb.sys 安裝為裝置函式驅動程式所需的資訊。 您不應該修改這些指令。

  • USB_Install.HW:此區段是 .inf 檔案中的索引鍵。 它會指定設備介面的全域唯一識別碼(GUID)。 AddReg 指示詞會在標準登錄值中設定指定的介面 GUID。 當 Winusb.sys 載入為裝置的函式驅動程式時,它會讀取登錄值 DeviceInterfaceGUIDs 機碼,並使用指定的 GUID 來代表裝置介面。 您應該將此範例中的 GUID 替換為您專為裝置創建的 GUID。 如果裝置的通訊協定變更,請建立新的裝置介面 GUID。

    Note

    使用者模式軟體必須呼叫 SetupDiGetClassDevs ,以列舉與 DeviceInterfaceGUIDs 索引鍵下指定的其中一個裝置介面類別相關聯的已註冊裝置介面。 SetupDiGetClassDevs 會傳回裝置的裝置控制碼,然後使用者模式軟體必須傳遞至 WinUsb_Initialize 常式,以取得裝置介面的 WinUSB 控制碼。 如需這些常式的詳細資訊,請參閱 如何使用 WinUSB 函式存取 USB 裝置。

每次載入 Winusb.sys 時,它都會註冊裝置介面,其中包含在 DeviceInterfaceGUIDs 機碼下登錄中指定的裝置介面類別。

HKR,,DeviceInterfaceGUIDs, 0x10000,"{D696BFEB-1734-417d-8A04-86D01071C512}"

如何建立安裝 Winusb.sys 的驅動程式套件

若要使用 WinUSB 作為裝置的函式驅動程式,您可以建立驅動程式套件。 以下是建立安裝 Winusb.sys驅動程式套件的步驟:

  1. 下載 Windows 驅動程式套件 (WDK) 並將其安裝在您的計算機上。

  2. 在連接 USB 裝置的系統上建立驅動程式套件資料夾,例如 C:\UsbDevice。

  3. 撰寫 .inf 檔案,將 Winusb.sys 安裝為 USB 裝置的函式驅動程式,並將它儲存在驅動程式套件資料夾中。 如需如何撰寫此檔案的範例,請參閱本檔的 撰寫 WinUSB 安裝的自定義 INF 一節。

  4. 建立套件的已簽署目錄檔案。 在 Windows 上安裝 WinUSB 需要此檔案。 您可以在 Windows 開發人員中心 - 硬體網站上的 Kernel-Mode 程式碼簽署逐步解說 中找到如何建立和測試已簽署目錄檔案的詳細資訊。

    顯示 WinUSB 驅動程式安裝套件內容的圖表

  5. 將 USB 裝置連接到您的電腦。

  6. 開啟電腦上的 裝置管理員 。 請遵循 更新驅動程式軟體 精靈上的指示,然後選擇手動安裝。 出現提示時,提供驅動程式套件資料夾的位置以完成安裝。