Установить драйвер с помощью devcon.exe

2388
hedgar2017

Я разработал HID-драйвер для нескольких устройств, который состоит из двух устройств: драйвера виртуальной мыши и прокси-сервера для него.

Прокси-сервер необходим для приема выходных отчетов от клиентов, поскольку мыши открываются исключительно ядром Windows.

Это мой дескриптор отчета:

HID_REPORT_DESCRIPTOR g_reportDescriptor[] = { 0x05, 0x01, // USAGE_PAGE (Generic Desktop) 0x09, 0x02, // USAGE (Mouse) 0xA1, 0x01, // COLLECTION (Application) 0x85, REPORT_ID_MOUSE_INPUT, 0x09, 0x01, // USAGE_PAGE (Pointer) 0xA1, 0x00, // COLLECTION (Physical) 0x05, 0x09, // USAGE_PAGE (Buttons) 0x19, 0x01, // USAGE_MINIMUM (1) 0x29, 0x03, // USAGE_MAXIMUM (3) 0x15, 0x00, // LOGICAL_MINIMUM (0) 0x25, 0x01, // LOGICAL_MAXIMUM (1) 0x95, 0x03, // REPORT_COUNT (3) 0x75, 0x01, // REPORT_SIZE (1) 0x81, 0x02, // INPUT (Data, Variable, Absolute) 0x95, 0x01, // REPORT_COUNT (1) 0x75, 0x05, // REPORT_SIZE (5) 0x81, 0x01, // INPUT (Constant) 0x05, 0x01, // USAGE_PAGE (Generic Desktop) 0x09, 0x30, // USAGE (X) 0x09, 0x31, // USAGE (Y) 0x15, 0x81, // LOGICAL_MINIMUM (-127) 0x25, 0x7F, // LOGICAL_MAXIMUM (127) 0x75, 0x08, // REPORT_SIZE (8) 0x95, 0x02, // REPORT_COUNT (2) 0x81, 0x06, // Input (Data, Variable, Relative) 0xC0, // END_COLLECTION 0xC0, // END_COLLECTION(8)  0x05, 0x01, // USAGE_PAGE (Generic Desktop) 0x09, 0x00, // USAGE (Undefined) 0xa1, 0x01, // COLLECTION (Application) 0x85, REPORT_ID_MOUSE_OUTPUT, 0x15, 0x00, // LOGICAL_MINIMUM (0) 0x26, 0xff, 0x00, // LOGICAL_MAXIMUM (255) 0x95, 0x0b, // REPORT_COUNT (11) 0x75, 0x08, // REPORT_SIZE (8) 0x09, 0x00, // USAGE (Undefined) 0x91, 0x02, // OUTPUT (Data, Variable, Absolute) 0xc0 // END_COLLECTION }; 

У меня проблема с установкой драйвера с помощью devcon.exe.

Это всегда терпит неудачу, независимо от того, что я делаю. Я *.infвечно играю с моим файлом и не знаю, что делать дальше. Вот так я бегаю devcon.exe:

.\devcon.exe install .\hidriver.inf "ROOT\UNKNOWN\0000" 

Выход:

Device node created. Install is complete when drivers are installed... Updating drivers for ROOT\UNKNOWN\0000 from D:\share\opt\KMDFDriver\hidriver.inf. devcon.exe failed. 

В результате операции создается новое устройство с именем Unknown deviceбез дочерних элементов .

Когда я устанавливаю драйвер из Device Manager -> Add Legacy Hardware, все в порядке, и создается новое устройство SampleClass с двумя дочерними элементами (универсальная мышь и HID-совместимое устройство), поэтому я не думаю, что это так, потому что в моем *.infфайле чего-то не хватает.

Вот мой *.infфайл:

[Version] Signature="$WINDOWS NT$" Class=%ClassName% ClassGuid= Provider=%ProviderName% CatalogFile=hidriver.cat DriverVer=01/07/2018  [ClassInstall32] Addreg=ClassReg [ClassReg] HKR,,,0,%ClassName% HKR,,Icon,,-24  [SourceDisksNames] 1=%DiskName%,,, [SourceDisksFiles] hidriver.sys=1 [DestinationDirs] DefaultDestDir=12  [Manufacturer] %ManufacturerName%=Microsoft,NT$ARCH$.6.1 [Microsoft.NT$ARCH$.6.1] %DeviceName%=DefaultInstall,root\hidriver  [DefaultInstall.NT] CopyFiles=Files [Files] hidriver.sys  [DefaultInstall.NT.HW] AddReg=HWAddReg [HWAddReg] HKR,,"LowerFilters",0x00010008,"hidriver"  [DefaultInstall.NT.Services] AddService=hidriver,0x00000000,hidriverService AddService=mshidkmdf,0x00000002,mshidkmdfService [hidriverService] DisplayName=%ServiceName% ServiceType=1 StartType=3 ErrorControl=1 ServiceBinary=%12%\hidriver.sys [mshidkmdfService] ServiceType=1 StartType=3 ErrorControl=1 ServiceBinary=%12%\mshidkmdf.sys  [DefaultInstall.NT.Wdf] KmdfService=hidriver,KmdfLibrary [KmdfLibrary] KmdfLibraryVersion=$KMDFVERSION$  [Strings] DeviceName="VARIABLE_1" DiskName="VARIABLE_2" ProviderName="VARIABLE_3" ManufacturerName="VARIABLE_4" ServiceName="VARIABLE_5" ClassName="VARIABLE_6" 

Я также пытался запечатлеть Device managerактивность с помощью Process Monitor, но она работает с DrvInst.exeдюжиной временных файлов, поэтому я не думаю, что это правильный путь.

Что мне делать, ребята?

[Обновление на следующий день]

Я также попробовал pnputil.exe:

pnputil.exe /add-driver D:\share\opt\KMDFDriver\hidriver.inf /install

Microsoft PnP Utility  Adding driver package: hidriver.inf Driver package added successfully. Published Name: oem40.inf Driver package installed on matching devices.  Total driver packages: 1 Added driver packages: 1 

Несмотря на сладкий вывод, это не имеет никакого эффекта.

[Обновление после первого ответа]

devcon.exe install hidriver.inf root\hidriverработает на win10 и win8.1, но имеет небольшую проблему на win7. На win7 дочерние классы устройств не определяются автоматически, поэтому я получаю два дочерних неизвестных устройства.

В то время как мой HID-прокси может принимать отчеты о неизвестном устройстве, мышь не работает. Чтобы исправить это, я должен вручную установить драйвер для мыши ребенка через

Update driver -> Browse for driver software on this computer -> Let me pick from a list of device drivers on this computer -> Mice and pointing devices -> Microsoft -> HID-compliant mouse 

Есть ли надежный способ добавить такие инструкции в INF-файл, чтобы сделать его автоматическим?

[Обновление через некоторое время] Я запечатлел Device managerдействия пользователя procmonи получил DrvInst.exe:

DrvInst.exe "2" "211" "HID\VARIABLE_6&COL01\1&1302B6B5&12&0000" "C:\Windows\INF\msmouse.inf" "msmouse.inf:MSMfg.NTamd64:HID_Mouse_Inst:6.1.7600.16385::hid_device_system_mouse" "6fe2f36b3" "0000000000000060" "00000000000005F8" "00000000000005F0" 

Я сообщу результаты эксперимента через некоторое время.

[Скриншот устройства]

No HWID here, only the device instance path

[Обновить с помощью setupapi.dev.log]

Я полностью удалил драйвер, затем удалил журнал, затем установил драйвер и скопировал все содержимое журнала.

setupapi.dev.log

3
Вы бы лучше поддержали [OSR Online] (http://www.osronline.com/page.cfm?name=ListServer) (список NTDEV) guest-vm 5 лет назад 1
Спасибо, я тоже там напишу. hedgar2017 5 лет назад 0
Не могли бы вы опубликовать сообщения для вашей установки из `% windir% \ inf \ setupapi.dev.log`? harrymc 5 лет назад 0
Угу, выложено на pastebin. Ссылка выше. hedgar2017 5 лет назад 0

2 ответа на вопрос

1
guest-vm

*.infне имеет цели для ROOT\UNKNOWN\0000использованияdevcon install hidriver.inf root\hidriver


На VirtualBox 5.2.8 + Win7 Pro SP1 x64 я установил EcoTUIODriver (на основе vmulti ), и установка прошла успешно без любого неизвестного устройства. Далее я собрал vmulti с WDK 7.1.0 (без Visual Studio), и установка также прошла успешно. Я предлагаю проверить вашу среду сборки и тестирования.

Просмотр устройств по подключению:

Извините, я не разработчик. Я ответил на основании опыта с установщиком inf-моддированных драйверов. Проверьте этот драйвер HID на [github] (https://github.com/djpnewton/vmulti) для стартера (inf выглядит как vmulti / sys / vmulti.inx). guest-vm 5 лет назад 1
У ОП были [проблемы] (https://social.msdn.microsoft.com/Forums/en-US/179420f2-96fe-43d3-9f62-7c4b14215335/windows-virtual-mouse-driver?forum=wdk) сборка драйверов с помощью WDK10 для Win7. Перечисленные HID дочерние устройства не имеют HwID, и установка не удалась. guest-vm 5 лет назад 0
1
harrymc

Различные части вашего inf файла кажутся несколько сомнительными, но я не знаю достаточно, чтобы предложить исправление. Но может быть другой способ создания жизнеспособного файла inf из вашего проекта.

Я бы предложил использовать Visual Studio 2017, пробную версию, если это необходимо, а затем создать файл inf из вашего решения, как описано в статье Microsoft « Создание пакета драйверов» . Driver Kit для Windows (WDK) должен быть установлен после установки Visual Studio.

Если у вас есть два таких пакета, которые нужно установить как один, вы можете объединить их, как описано в разделе Использование файла INF расширения .

Я использую именно MVS2017 Community и WDK 10. Я предполагаю, что создание INF-файла недоступно в версии Community. В любом случае, спасибо за вашу подсказку, я посмотрю на это. Я знаю, что проблема с INF, но я не знаю, как это исправить. hedgar2017 5 лет назад 0