Installez un pilote avec devcon.EXE

J'ai développé un pilote HID multi-périphériques, qui se compose de deux périphériques: un pilote de souris virtuelle et un proxy pour celui-ci.

Le proxy est requis pour accepter les rapports de sortie des clients, car les souris sont ouvertes exclusivement par le noyau Windows.

Ceci est mon descripteur de rapport:

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
};

J'ai des problèmes avec l'installation de mon pilote avec devcon.exe.

Ça échoue toujours, peu importe ce que je fais. J'ai joué avec mon *.inf file pour l'éternité et je ne sais pas quoi faire ensuite. C'est comme ça que je cours devcon.exe:

.devcon.exe install .hidriver.inf "ROOTUNKNOWN000"

Sortie :

Device node created. Install is complete when drivers are installed...
Updating drivers for ROOTUNKNOWN000 from D:shareoptKMDFDriverhidriver.inf.
devcon.exe failed.

À la suite de l'opération, il crée un nouveau périphérique nommé Unknown device sans enfants.

Lorsque j'installe mon pilote à partir de Device Manager -> Add Legacy Hardware, tout va bien et un nouveau périphérique SampleClass avec deux enfants (une souris générique et un périphérique compatible HID) est créé, donc je ne pense pas que ce soit parce que mon fichier *.inf manque de quelque chose.

Voici mon *.inf fichier:

[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"

J'ai également essayé de capturer l'activité de Device manager avec Process Monitor, mais cela fait de la magie avec DrvInst.exe et une douzaine de fichiers temporaires, donc je ne pense pas que ce soit la bonne voie à suivre.

Que dois-je faire, les gars?

[Mise à jour le lendemain]

J'ai aussi essayé 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

Malgré la sortie douce, cela n'a aucun effet.

[Mise à jour après la première réponse]

devcon.exe install hidriver.inf roothidriver fonctionne sur win10 et win8.1, mais a un petit numéro sur win7. Sur win7, les classes d'appareils enfants ne sont pas détectées automatiquement, donc je me retrouve avec deux appareils enfants inconnus.

Alors que mon proxy HID est capable d'accepter que les rapports soient un périphérique inconnu, la souris ne fonctionne pas. Pour résoudre ce problème, je dois définir manuellement le pilote pour l'enfant de la souris via

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

Existe-t-il un moyen robuste d'ajouter de telles instructions au fichier INF pour le rendre automatique?

[Mise à jour après un certain temps] J'ai capturé l'activité de Device manager par procmon et je j'ai un 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"

Je rapporterai les résultats de l'expérience après un certain temps.

[Capture d'écran de l'appareil]

No HWID here, only the device instance path

[Mise à jour avec setupapi.dev.log]

J'ai complètement supprimé le pilote, puis supprimé le journal, puis installé le pilote et copié tout le contenu du journal.

Setupapi.dev.log

demandé sur