Установите драйвер с devcon.exe
Я разработал драйвер 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 "ROOTUNKNOWN000"
Вывод:
Device node created. Install is complete when drivers are installed...
Updating drivers for ROOTUNKNOWN000 from D:shareoptKMDFDriverhidriver.inf.
devcon.exe failed.
В результате операции создается новое устройство с именем Unknown device
без детей.
Когда я устанавливаю свой драйвер из Device Manager -> Add Legacy Hardware
, все в порядке, и создается новое устройство SampleClass с двумя дочерними устройствами (универсальная мышь и устройство, совместимое с HID), поэтому я не думаю, что это потому, что в моем файле *.inf
чего-то не хватает.
Вот мой *.inf
файл:
[Version]
Signature="$WINDOWS NT$"
Class=%ClassName%
ClassGuid={78A1C341-4539-11d3-B88D-00C04FAD5171}
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,roothidriver
[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:shareoptKMDFDriverhidriver.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 roothidriver
работает на 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" "HIDVARIABLE_6&COL011&1302B6B5&12&0000" "C:WindowsINFmsmouse.inf" "msmouse.inf:MSMfg.NTamd64:HID_Mouse_Inst:6.1.7600.16385::hid_device_system_mouse" "6fe2f36b3" "0000000000000060" "00000000000005F8" "00000000000005F0"
Я сообщу о результатах эксперимента через некоторое время.
[Снимок экрана устройства]
[Обновление с помощью setupapi.dev.log]
Я полностью удалил драйвер, затем удалил журнал, затем установил драйвер и скопировал все содержимое журнала.