使用 devcon.exe 安装驱动程序

使用 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 "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 devicewithout children 的新设备。

当我从 安装我的驱动程序时Device Manager -> Add Legacy Hardware,一切都很好,并且创建了一个带有两个子设备(一个通用鼠标和一个 HID 兼容设备)的新 SampleClass 设备,所以我不认为这是因为我的*.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,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"

我稍后会报告实验的结果。

[设备截图]

这里没有 HWID,只有设备实例路径

[使用 setupapi.dev.log 更新]

我完全删除了驱动程序,然后删除了日志,然后安装了驱动程序并复制了所有日志内容。

设置api.dev.log

答案1

*.inf没有目标ROOT\UNKNOWN\0000,使用devcon install hidriver.inf root\hidriver


在 VirtualBox 5.2.8 + Win7 Pro SP1 x64 上,我安装了生态TUIO驱动程序(基于多重),并且设置成功,没有任何未知设备。我进一步构建多重WDK 7.1.0(不使用 Visual Studio),安装也成功了。我建议检查你的构建和测试环境。

按连接查看设备:

答案2

您的 inf 文件的各个部分似乎有些可疑,但我不知道该如何建议修复。但可能还有其他方法可以从您的项目中生成可行的 inf 文件。

我建议使用 Visual Studio 2017, 试用版 如果需要,请按照 Microsoft 文章中的说明从解决方案中创建 inf 文件 创建驱动程序包。 这 Windows 驱动程序工具包 安装Visual Studio后需要安装(WDK)。

如果你有两个这样的软件包需要安装,你可以按照以下方法组合它们 使用扩展 INF 文件

相关内容