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

Я пытаюсь создать "универсальный" драйвер Windows USB (на самом деле просто.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, потому что драйвер должен быть совместим со случайным устройством перечисленных производителей. Кто-нибудь, кто знает, как я могу обойти это?

1 ответ

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

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

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

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

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

Другие вопросы по тегам