inf-файл без PID для нескольких продуктов с одним и тем же VID

Я пытаюсь создать «общий» USB-драйвер для Windows (на самом деле просто файл .inf), который можно было бы использовать для нескольких продуктов одних и тех же производителей. Я хотел бы указать только идентификаторы поставщиков (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

Но я не могу заставить его работать без идентификатора продукта (PID), связанного с перечисленными VID, например:

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

Когда я пытаюсь вручную выбрать inf-файл, который я создал для своих устройств в диспетчере устройств, я получаю следующую ошибку:

Указанная вами папка не содержит совместимого программного драйвера для вашего устройства. Если папка содержит драйвер, убедитесь, что он предназначен для работы с Windows для систем на базе x64.

Но если я использую файл .inf, в котором я указал PID некоторых своих устройств, он работает. Проблема в том, что я не могу перечислить все разные PID, потому что драйвер должен быть совместим со случайным устройством от перечисленных производителей. Кто-нибудь знает, как я могу обойти это?


person fhilip    schedule 03.05.2017    source источник


Ответы (1)


Это очень плохая идея, потому что в будущем эти производители могут выбрать разные типы устройств, и ваш драйвер может затруднить использование этих устройств людьми, если он имеет приоритет над официальными драйверами.

Кроме того, это не сработает, потому что «PID» является частью строки, которую Windows использует для поиска драйверов, как вы видели в своих экспериментах.

Вы можете попробовать просмотреть устройства в диспетчере устройств, чтобы узнать, есть ли у них «совместимый идентификатор», который вы можете использовать для сопоставления вместо номеров VID / PID.

Еще одна вещь, которую вы можете сделать, это проинструктировать своих пользователей, как вручную установить драйвер для определенного подключенного USB-устройства. Для этого они могут открыть Диспетчер устройств, щелкнуть правой кнопкой мыши соответствующее USB-устройство, выбрать «Обновить программное обеспечение драйвера...», выбрать «Выполнить поиск драйвера на моем компьютере», выбрать «Позвольте мне выбрать из списка драйверы устройств на моем компьютере», а затем оттуда они смогут найти предоставленный вами INF-файл.

Кроме того, вы можете использовать такую ​​утилиту, как Zadig, для установки WinUSB для этих устройств.

person David Grayson    schedule 03.05.2017