您现在的位置是:主页 > USB百科 >

USB设备硬件ID和兼容ID的生成规则介绍

发布时间:2022-11-15 16:52:17所属栏目:USB百科 已帮助编辑作者:【USB接口百科】

USB设备在插入电脑后,会触发一系列的操作,详见Windows下USB设备的枚举过程分析:https://www.usbzh.com/article/detail-420.html
当然这里更多是站在硬件或者USB层面来讲的,但是USB设备与驱动是怎么绑定的呢?
这里得先介绍一个概念叫做硬件ID和兼容ID.
我们在电脑中找一个USB设备,在设备管理器中查看其设备属性可以看到:
硬件ID
兼容ID

USB设备硬件ID

USB设备的硬件ID的生成规则:

    swprintf(Buffer, L"USB\\VID_%04X&PID_%04X&REV_%04X",
        FDODeviceExtension->MicParameter.VenderID,
        FDODeviceExtension->MicParameter.ProductID,
        FDODeviceExtension->MicParameter.VersionId);

可以看到VID,PID 和VER分别对应的是设备描述符中的厂商ID,产品ID和BCDDevice.

其实对于一些复合设备的,如以接口复合的设备,对其使用usbccgp.sys来驱动的话,其硬件ID会多一个MI_XX,这个XX其实代表的是其设备功能的接口描述符的ID,如:
MI_XX
这里的MI_00代表的接口描述符的bInterfaceNumber。

还有一种是HID独有的COL_XX,代表着HID设备的一个报告描述符中解析出了多个设备,如我们可以把键盘和鼠标的报告描述符合成一个报告描述符,那么HID设备会生成2个设备,一个是键盘,一个是鼠标,那么其COL分别为COL_01,COL_02,如如下的设备:
HID设备
其硬件ID分别为:
COL_01
COL_02

这个我们看REACTOS关于HIDCLASS.SYS的驱动的时候就可以看到:

    if (PDODeviceExtension->Common.DeviceDescription.CollectionDescLength > 1)
    {
        //
        // multi-tlc device
        //
        Offset = swprintf(&Buffer[Offset], L"HID\\Vid_%04x&Pid_%04x&Rev_%04x&Col%02x", PDODeviceExtension->Common.Attributes.VendorID, PDODeviceExtension->Common.Attributes.ProductID, PDODeviceExtension->Common.Attributes.VersionNumber, PDODeviceExtension->CollectionNumber) + 1;
        Offset += swprintf(&Buffer[Offset], L"HID\\Vid_%04x&Pid_%04x&Col%02x", PDODeviceExtension->Common.Attributes.VendorID, PDODeviceExtension->Common.Attributes.ProductID, PDODeviceExtension->CollectionNumber) + 1;
    }
    else
    {
        //
        // single tlc device
        //
        Offset = swprintf(&Buffer[Offset], L"HID\\Vid_%04x&Pid_%04x&Rev_%04x", PDODeviceExtension->Common.Attributes.VendorID, PDODeviceExtension->Common.Attributes.ProductID, PDODeviceExtension->Common.Attributes.VersionNumber) + 1;
        Offset += swprintf(&Buffer[Offset], L"HID\\Vid_%04x&Pid_%04x", PDODeviceExtension->Common.Attributes.VendorID, PDODeviceExtension->Common.Attributes.ProductID) + 1;
    }
USB设备兼容ID

不过我们在电脑中看到大部分的设备其实是免驱动,这是因为他们用了兼容ID的原因。满足某一类规范的设备可以使用其类驱动,这样就可以不关注PID,VID这些东西了。
如视频类的为0x0e,其兼容ID为:
视频类兼容ID
而HID类的必须就是03的了,至于这个编号的规范那就是usbif定义的了,可以参见 USB设备类型定义 https://www.usbzh.com/article/detail-221.html

参考文章:

USB的VendorID、ProductID和BcdDevice有什么作用 https://www.usbzh.com/article/detail-845.html

     以上就是USB接口百科为您提供USB设备硬件ID和兼容ID的生成规则介绍的解读,本文章链接: http://www.usb-hub.cn/usbbk/42141.html 欢迎分享转载,更多婚礼相关资讯请前往USB百科