針對某些通用序列匯流排 (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 。 否則,請按照以下說明載入驅動程式:
- 將裝置插入主機系統。
- 開啟 裝置管理員 並找到裝置。
- 以滑鼠右鍵按一下裝置,然後從內容功能表中選取更新 驅動程式軟體... 。
- 在精靈中,選取 [瀏覽我的電腦以取得驅動程式軟體]。
- 從電腦上的設備驅動器清單中選取 [讓我挑選]。
- 從裝置類別清單中,選取 [通用序列匯流排裝置]。
- 精靈會顯示 WinUsb 裝置。 選擇它以加載驅動程序。
如果 通用序列匯流排裝置 未出現在裝置類別清單中,則您必須使用自定義 INF 來安裝驅動程式。 上述程式不會為應用程式 (UWP 應用程式或 Windows 傳統型應用程式) 新增裝置介面 GUID 以存取裝置。 您必須手動新增 GUID,請遵循以下程序。
如上述程序所述載入驅動程式。
使用 guidgen.exe等工具,為您的裝置產生裝置介面 GUID。
在此機碼下尋找裝置的登錄機碼:
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Enum\USB\<VID_vvvv&PID_pppp>
在 [裝置參數] 索引鍵下,新增名為 DeviceInterfaceGUID 的字串登錄專案,或名為 DeviceInterfaceGUIDs 的多字串專案。 將值設定為您在步驟 2 中產生的 GUID。
拔除裝置與系統的連線,然後重新連線至相同的實體埠。
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驅動程式套件的步驟:
下載 Windows 驅動程式套件 (WDK) 並將其安裝在您的計算機上。
在連接 USB 裝置的系統上建立驅動程式套件資料夾,例如 C:\UsbDevice。
撰寫 .inf 檔案,將 Winusb.sys 安裝為 USB 裝置的函式驅動程式,並將它儲存在驅動程式套件資料夾中。 如需如何撰寫此檔案的範例,請參閱本檔的 撰寫 WinUSB 安裝的自定義 INF 一節。
建立套件的已簽署目錄檔案。 在 Windows 上安裝 WinUSB 需要此檔案。 您可以在 Windows 開發人員中心 - 硬體網站上的 Kernel-Mode 程式碼簽署逐步解說 中找到如何建立和測試已簽署目錄檔案的詳細資訊。
將 USB 裝置連接到您的電腦。
開啟電腦上的 裝置管理員 。 請遵循 更新驅動程式軟體 精靈上的指示,然後選擇手動安裝。 出現提示時,提供驅動程式套件資料夾的位置以完成安裝。