2017-05-03 226 views
0

我試圖創建一個「通用」Windows USB驅動程序(實際上只是一個.inf文件),可用於同一製造商下的幾種產品。我想這樣做的是隻列出了廠商ID(VID)的不同製造商,這樣我可以使用不同的模型相同的驅動程序從同一個生產廠家,這樣的事情:inf文件沒有PID在同一VID下的多個產品

[Version] 
Signature=$WINDOWS NT$ 
Class=visaUsbDevice 
ClassGUID={A3330EDF-239D-4206-833B-1D58952613D5} 
Provider=%Vendor% 
DriverVer=05/03/2017,1.0 
CatalogFile=test.cat 

;=========================================================================== 
; Default Installer 
;=========================================================================== 

[DefaultInstall] 
CopyINF=test.inf 

[DestinationDirs] 

[SourceDisksNames] 

[SourceDisksFiles] 

;=========================================================================== 
; Class Installer 
;=========================================================================== 

[ClassInstall32] 
AddReg=AddClass_AddReg 

[AddClass_AddReg] 
HKR,,,0,%DeviceClassString% 
HKR,,Icon,,"-20" 

;=========================================================================== 

[Manufacturer] 
%Vendor%=USBList,NTamd64 

[USBList] 
%USB\VID_12D1.DeviceDesc%=WinUsb_Inst, USB\VID_12D1 
%USB\VID_1004.DeviceDesc%=WinUsb_Inst, USB\VID_1004 
%USB\VID_18D1.DeviceDesc%=WinUsb_Inst, USB\VID_18D1 
%USB\VID_0BB4.DeviceDesc%=WinUsb_Inst, USB\VID_0BB4 
%USB\VID_04E8.DeviceDesc%=WinUsb_Inst, USB\VID_04E8 
%USB\VID_22B8.DeviceDesc%=WinUsb_Inst, USB\VID_22B8 
%USB\VID_054C.DeviceDesc%=WinUsb_Inst, USB\VID_054C 
%USB\VID_2A70.DeviceDesc%=WinUsb_Inst, USB\VID_2A70 

[USBList.NTamd64] 
%USB\VID_12D1.DeviceDesc%=WinUsb_Inst, USB\VID_12D1 
%USB\VID_1004.DeviceDesc%=WinUsb_Inst, USB\VID_1004 
%USB\VID_18D1.DeviceDesc%=WinUsb_Inst, USB\VID_18D1 
%USB\VID_0BB4.DeviceDesc%=WinUsb_Inst, USB\VID_0BB4 
%USB\VID_04E8.DeviceDesc%=WinUsb_Inst, USB\VID_04E8 
%USB\VID_22B8.DeviceDesc%=WinUsb_Inst, USB\VID_22B8 
%USB\VID_054C.DeviceDesc%=WinUsb_Inst, USB\VID_054C 
%USB\VID_2A70.DeviceDesc%=WinUsb_Inst, USB\VID_2A70 

[PreCopySection] 
HKR,,NoSetupUI,,1 

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

[WinUsb_Inst.hw] 
AddReg=WinUsb_Inst_HW_AddReg 

[WinUsb_Inst.Services] 
Addservice = WinUsb, 0x00000002, WinUsb_AddService 

[WinUsb_AddService] 
DisplayName = %WinUsb_Service_DisplayName% 
ServiceType = %SERVICE_KERNEL_DRIVER% 
StartType  = %SERVICE_DEMAND_START% 
ErrorControl = %SERVICE_ERROR_NORMAL% 
ServiceBinary = %12%\WinUSB.sys 

[WinUsb_Inst_HW_AddReg] 
HKR,,DeviceInterfaceGUIDs, 0x10000,"{761ED34A-CCFA-416b-94BB-33486DB1F5D5}" 

[Strings] 
Vendor="TEST" 
USB\VID_12D1.DeviceDesc="HUAWEI" 
USB\VID_1004.DeviceDesc="LGE" 
USB\VID_18D1.DeviceDesc="GOOGLE" 
USB\VID_0BB4.DeviceDesc="HTC" 
USB\VID_04E8.DeviceDesc="SAMSUNG" 
USB\VID_22B8.DeviceDesc="MOTOROLA" 
USB\VID_054C.DeviceDesc="SONY" 
USB\VID_2A70.DeviceDesc="ONEPLUS" 
DeviceClassString="NI-VISA USB Devices" 
WinUsb_Service_DisplayName="WinUSB Driver" 

SERVICE_BOOT_START = 0x0 
SERVICE_SYSTEM_START = 0x1 
SERVICE_AUTO_START = 0x2 
SERVICE_DEMAND_START = 0x3 
SERVICE_DISABLED = 0x4 

SERVICE_KERNEL_DRIVER = 0x1 
SERVICE_ERROR_IGNORE = 0x0 
SERVICE_ERROR_NORMAL = 0x1 
SERVICE_ERROR_SEVERE = 0x2 
SERVICE_ERROR_CRITICAL = 0x3 

但我做不到「不像是會得到它,而不必連接到上市的VID產品ID(PID),工作如:

%USB\VID_1004&PID_631C.DeviceDesc%=WinUsb_Inst, USB\VID_1004&PID_631C 

當我嘗試手動選擇我爲我的設備在設備管理器中創建的INF文件,它給我下面的錯誤:

The folder you specified doesn't contain a compatible software driver for your device. If the folder contains a driver, make sure it is designed to work with Windows for x64-based systems.

但是,如果我使用的.inf文件,我已經指定了我的一些設備PID,它的工作原理。問題是我無法列出所有不同的PID,因爲驅動程序需要與列出的製造商的隨機設備兼容。誰知道我能如何解決這個問題?

回答

0

這是一個非常糟糕的主意,因爲這些製造商可能會選擇將不同類型的設備在未來,驅動程序可能很難讓人們使用這些設備,如果它的優先級高於官方驅動。

而且,它不會工作,因爲「PID」是字符串的一部分,Windows用來尋找驅動程序,你在實驗中所看到的。

你可以嘗試尋找在設備管理器的設備看他們是否有「兼容ID」你可以使用匹配,而不是VID/PID號碼。

你可以做的另一件事是指導用戶如何手動安裝驅動程序特定連接的USB設備。要做到這一點,他們可以打開設備管理器,右鍵點擊有問題的USB設備,選擇「更新驅動程序軟件...」,選擇「瀏覽我的電腦驅動程序軟件」,選擇「讓我從列表中選擇設備驅動程序在我的電腦上「,然後從那裏他們應該能夠找到你提供的INF文件。

另外,也可以使用像查第格的實用程序來安裝了WinUSB這些設備。