USB通用驱动源码分析
+ -

USBCCGP 复合USB设备的枚举

2021-09-15 1296 0

当新的 USB 设备连接到主机计算机时,USB 总线驱动程序创建设备的物理设备对象 (PDO),并生成报告新 PDO 的即插即用事件。 操作系统然后,查询的硬件 Id 与 PDO 相关联的总线驱动程序。

对于所有 USB 设备、 USB 总线驱动程序报告设备 ID具有以下格式:

USB\VID_xxxx&PID_yyyy

请注意

xxxx和yyyy直接取自idVendor并idProduct设备描述符字段分别。

总线驱动程序还会报告为兼容的标识符 (ID) 的USB\COMPOSITE,并且设备满足以下要求:
1.设备描述符的设备类字段 (bDeviceClass) 必须为零值或者设备描述符字类 (bDeviceClass),子类 (bDeviceSubClass),设备协议 (bDeviceProtocol) 字段必须为 0xEF、 0x02 和 0x01 。
2.设备必须具有多个接口。
3.设备必须具有单个配置。

总线驱动程序还会检查设备类 (bDeviceClass),子类 (bDeviceSubClass),和协议 (bDeviceProtocol) 的设备描述符字段。 如果这些字段均为零,则该设备是复合设备,总线驱动程序报告的 USB\COMPOSITE 用于 PDO 复合。

在检索之后的硬件和兼容 Id 对新创建的PDO,操作系统搜索 INF 文件。
如果一个 INF 文件包含设备 ID 的匹配项,Windows 将加载该 INF 文件指示驱动程序和泛型父驱动程序不起作用。
如果没有 INF 文件包含设备 ID 和 PDO 具有兼容 ID,Windows 搜索兼容的 id。 这会生成 Usb.inf 中的匹配项,将导致操作系统加载USB 通用父驱动程序 (Usbccgp.sys)。

HID人机交互QQ群:564808376    UAC音频QQ群:218581009    UVC相机QQ群:331552032    BOT&UASP大容量存储QQ群:258159197    STC-USB单片机QQ群:315457461    USB技术交流QQ群2:580684376    USB技术交流QQ群:952873936   

0 篇笔记 写笔记

Windows下枚举系统中所有HID设备
Windows下对任何设备,文件的打开都是通过CreateFile来实现的,不过要打开一个设备得首先知道设备或文件名。由上节可知道,对于HID设备,都会注册一个接口类型为{2ACCFE60-C130-11D2-B082-00A0C91EFB8B}的GUID。我们可以通过Setup系列函数枚举出系统中......
USB 枚举/断开过程
USB设备枚举一般会经过插入、供电、初始化、分配地址,配置,获取设备描述符、获取配置描述符、获取字符串描述符和配置设备这么几个过程。各过程的状态如下表:USB设备的枚举过程USB主机检测到USB设备插入后,就要对设备进行枚举了。枚举的作用就是从设备是那个读取一些信息,知道设备是什么样的设备,然后......
USB设备的枚举过程分析
USB协议定义了设备的6种状态,仅在枚举过程种,设备就经历了4个状态的迁移:上电状态(Powered),默认状态(Default),地址状态(Address)和配置状态(Configured)(其他两种是连接状态和挂起状态(Suspend))详情可见:http://www.usbzh.com/art......
Windows下USB设备的枚举过程分析
1.用户把USB设备插入USB端口或给系统启动时设备上电这里的USB端口指的是主机下的根hub或主机下行端口上的hub端口。Hub给端口供电,连接着的设备处于上电状态。2.Hub监测它各个端口数据线上(D+/D-)的电压在hub端,数据线D+和D-都有一个阻值在14.25k到24.8k的下拉电阻Rp......
USB2.0设备枚举-主机设置设备地址事务
USB主机在首次获取设备描述符后,知道了设备的默认端点大小。后续一个重要的操作是对设备分配地址。对USB设备分配地址是通过标准请求SetAddress来完成后。其具体的过程如下图所示:SetAddress包括2个事务。第一个事务是对主机设置地址,第二个事务是主机对设备返加一个0字节的数据包,用于确......
USB2.0设备枚举-获取设备描述符事务
USB设备与主机进行数据传输或进行设备配置时,有一些常见的术语如事务,令牌,包等。USB设备在枚举过程中有2次获取设备描述符的过程,这里分别标识为首次获取设备描述符和分配地址后的获取描述符。两次获取描述符的过程基本类似,惟一的区别是首次首次获取描述符由于设备尚未分配地址,故使用地址0与主机进行通......
USB3.2超高速的设备总线枚举
USB3.2超高速定义了7种设备状态,比以往多了一个错误状态。USB的设备状态图代表着从USB设备的状态转换过程。要进行状态转换,当然必须是先将USB设备插入到USB接口中,这个USB接口可以是USB集线接口,也可以是根集线器的接口。当USB设备插入USB接口后,USB设备进入Attached状态。......
USB HID键盘设备树及设备枚举过程分析
今天在本站USB中文网微信技术交流群有一个同学在问关于HID设备的报表描述符的东东。但是在问的过程中发现一个很严重的问题,那就是它的它设备是一个复合设备,导致设备树比较复杂,关于报表描述符与接口描述符等之间的相关对应关系不是很清楚。为此,本人手中刚好有一个本人认为USB HID设备中相对比较复杂的设......
USB设备的调试笔记-奇怪枚举失败问题
自己搞了一个USB 触摸屏的驱动,通过对系统的USB触摸屏设备进行更改,这样可以在自己的驱动中过滤来自触摸屏的数据。在不加自定义驱动的情况下,设备管理器树关系如下:USB输入设备USB触摸屏设备而加上自己的设备驱动后,设备管理器树关系如下:自己的驱动程序USB输入设备USB触摸屏设备......
Windows10下开发虚拟USB鼠标之枚举子设备失败(STATUS_DEVICE_DATA_ERROR)
之前发过一篇文章:Win10使用虚拟USB鼠标实现自动挂机测试功能(文章地址:http://www.usbzh.com/article/detail-476.html ) 使用的是虚拟驱动实现的一个虚拟USB鼠标,实现了产品的自动测试功能。生成的设备在设备管理器中如下:但在开发过程中,并不是一帆......
U盘枚举失败-该设备无法启动(GET_MAX_LUN请求)
群里有人用STM32搞了一个U盘,但是U盘在插入电脑后在设备管理器是枚举失败。我让他看一下设备状态:又是熟悉的错误码10,表示设备启动失败。设备的启动失败,一般在设备获取描述符获取之后,初始会失败,我之前在弄USB虚拟鼠标的时候也遇到此类情况。不过由于这个设备是U盘,本人还没有研究USB存储协议,只......
使用SetupApi函数通过GUID枚举系统中所有关联设备
Windows的设备在驱动中大部分都会IoSetRegisterInterface,这其中一个重要的参数是GUID,这样系统会根据这个GUID给设备创建一个symbolicname,这个名字在应用层可以通过CreateFile打开。这里分享一个在应用层通过SetuApi枚举该类型GUID下的所有设备......
USB集线器HUB的枚举过程及集线器状态
USB集线器和其他USB设备一样,都需要在上电时进行配置。在USB协议中,使用默认的端0点。进行上电初期的通信。USB集线器除了配置其自身外,还需要对下行端口连接的其他USB设备进行识别。USB集线器HUB枚举过程USB集线器的上电配置过程如下:USB集线器连接到USB主机的根集线器上。USB......
USBCCGP 复合USB设备的枚举
当新的 USB 设备连接到主机计算机时,USB 总线驱动程序创建设备的物理设备对象 (PDO),并生成报告新 PDO 的即插即用事件。 操作系统然后,查询的硬件 Id 与 PDO 相关联的总线驱动程序。对于所有 USB 设备、 USB 总线驱动程序报告设备 ID具有以下格式:USBVID_xx......
USBCCGP 关联接口功能设备枚举
从上节可知,所有的功能设备都存储在FDO_DEVICE_EXTENSION中的FunctionDescriptor中的,而FunctionDescriptorCount成员记录着子功能数量。typedef struct _USBC_FUNCTION_DESCRIPTOR{ // The 0......
关注公众号
  • HID人机交互
  • Linux&USB
  • UAC音频
  • TYPE-C
  • USB规范
  • USB大容量存储
  • USB百科
  • USB周边
  • UVC摄像头
  • Windows系统USB
  • 音视频博客
  • 取消
    感谢您的支持,我会继续努力的!
    扫码支持
    扫码打赏,你说多少就多少

    打开支付宝扫一扫,即可进行扫码打赏哦

    您的支持,是我们前进的动力!