HID设备如何控制在Windows设备管理器中为其显示的描述?

eqoofvh9  于 2023-06-24  发布在  Windows
关注(0)|答案(1)|浏览(241)

我正在为USB HID设备编写固件。当它连接到Windows PC(运行Windows 8.1,如果有任何区别)时,它会在设备管理器中的“人机界面设备”下列为“符合HID的供应商定义设备”。出于显而易见的原因,最好给出更好的描述。
我猜该描述将取自USB字符串描述符表,可能取自设备描述符中指定的包含产品名称的条目。这似乎不可能发生。也许我的描述符中有一个错误,但是当我在枚举过程中连接USB分析器时,它可以正确地识别制造商名称、产品名称和序列号字符串。
稍微搜索一下,就会发现设备管理器的描述可以从驱动程序的.inf文件中控制,但是这个设备没有自己的驱动程序。
是我运气不好,还是HID设备有办法确定设备管理器是如何描述的?如果有,是什么?
(相关先前SO问题:Rename a USB HID device under Windows。这个问题的答案说你需要编写一个Windows设备驱动程序来完成这个任务,但是答案的注解表明这不应该适用于HID设备,回答者也承认了这一点。不幸的是,在那里找不到进一步的建议。这个问题可能实际上是试图问我本质上是一样的事情,但如果是这样的话,它的标题就不好了;我不想 * 重命名 * 任何东西。

pcrecxhr

pcrecxhr1#

Windows有HID输入设备的默认驱动程序。这是USB class of devices的主要优点。
Windows首先为USB设备安装驱动程序,然后为其每个USB interface安装驱动程序,并在USB设备下创建子设备节点。每个接口可以是HID device接口(USB_INTERFACE_DESCRIPTOR.bInterfaceClass中的0x03),在这种情况下,Windows解析HID设备描述符并为其每个top-level collection创建子设备节点:

但不幸的是,这个HID Top-Level Collection驱动程序只是根据设备的类型为设备设置DEVPKEY_Device_FriendlyName,它将类似于“HID兼容鼠标”,因为这意味着安装了鼠标使用类型(使用页面0x 0001,使用0x 0001)的驱动程序(更多信息请参见HID Spec)。
好消息是,HID感知应用程序可以使用HidD_GetManufacturerString/HidD_GetProductString/HidD_GetSerialNumberString函数从相应的USB_INTERFACE_DESCRIPTOR(或者USB_DEVICE_DESCRIPTOR,如果USB_INTERFACE_DESCRIPTOR.iInterface为零)获取设备字符串信息。还要注意,这些字符串可能为空(不是由制造商设置的)。
如果你真的想在设备树中为你的HID设备设置DEVPKEY_Device_FriendlyName,那么你必须为它创建一个特殊的驱动程序*.inf文件。您需要使用此硬件ID:

您可以查看在C:\Windows\INF\msmouse.inf中更改设备名称的inf文件示例。

相关问题