共用方式為


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

針對某些通用序列匯流排 (USB) 裝置,您可以安裝 WinUSBWinusb.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 檔案中的 IncludesDirectives

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

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