Windows下USB百科
+ -

Windows系统实现USB设备的拨出与重新插入

2022-08-01 2 0
欢迎加入官方QQ群:952873936或联系站长进行技术交流。

最近在搞USBHOUND,原理比较简单,但是涉及的东西还是比较多,这不,为了搞清楚URB之间的传递脉路,又开始进入了USBCCGP淅代码中。

USBCCGP是Windows系统中关于USB比较重要的一个驱动,其实原了USB物理复合设备到逻辑设备的基本功能,其中有大量的关于USB相关处理请求,是值得我们在开发USB驱动时借鉴。

这里我们注意到两个IOCTL,分别为:

  • IOCTL_INTERNAL_USB_RESET_PORT:用于USB设备端口的复位

    A driver can use this request to reset the upstream port of the device it manages. After a successful reset, the bus driver reselects the configuration and any alternative interface settings that the device had before the reset occurred. All pipe handles, configuration handles and interface handles remain valid.

  • IOCTL_INTERNAL_USB_CYCLE_PORT:模拟USB设备的拨出与再插入。

    This I/O request simulates a device unplug and replug on the port associated with the PDO.

以上的两个IOCTL功能类似,并且不能实现重入,并且是发给真实的物理设备的,故在USBCCPG的FDO中对其下层PDO操作。。

        case IOCTL_INTERNAL_USB_RESET_PORT:
        case IOCTL_INTERNAL_USB_CYCLE_PORT:
            if (parentFdoExt->state == STATE_STARTED){
                status = ParentResetOrCyclePort(parentFdoExt, irp, ioControlCode);
            }
            else {
                DBGERR(("ParentInternalDeviceControl (IOCTL_INTERNAL_USB_RESET_PORT): BAD PNP state! - parent has state %xh.", parentFdoExt->state));
                status = STATUS_DEVICE_NOT_READY;
            }
            break;

并且,这里对该设备执行这两个操作,也只能是正常工作并已经启动了的设备。其处理函数是通过ParentResetOrCyclePort实现的。
其大致原理是对该请求IRP进行判断是否是有相同的IRP已经在执行,如果已经有,则将该IRP pending,并持入待完成队列。如果没有,则同步执行给下层设备PDO.当执行完成时,则完成已经挂起的所有IRP,实现多个相同的IRP请求OVERLAP功能。

/*

  • Some redundant RESET or CYCLE irps may have been sent while we
  • were processing this one, and gotten queued.
  • We’ll complete these now that the parent has been reset.
    */

不过在应用层其功能实现,应该和USBTREEVIEW这个操作有关,详细的可以参见USBVIEW代码。
USBTREEVIEW

这里标记一下。

0 篇笔记 写笔记

BOT MASS_STORAGE_RESET
Bulk-Only Mass Storage Reset类特定请求是USB大容量存储设备独有的。 该特定类请求的功能用于复位大容量存储设备和与之关联的接口。通知设备接下来的批量端点输出数据为命令块包(CBW)。由于该请求是控制请求,所以是通过端点0发送的。在设备完成该请求即复位之前,设备应......
TYPE-C PD供电协议常用功能序列(接口数据包开始SOP,线缆数据包开始SOP''、硬件复位、线缆复位
使用TYPE-C PD供电协议信号-4b5b编码对照表的序列组合,可以组成一些常用的功能序列。硬件复位hard Reset硬件复位信令是为了被物理层识别而发送的一组有序字节。硬复位信号顺序集定义为:三个RST-1 K代码,后跟一个RST-2 K代码。硬件复位的功能是对接口和线缆进行复位K......
USB高速基础知识
USB 2.0 中引入了对规范的高速添加,以响应 Firewire 的更高速度。由于 High Speed 是事后才添加的,并且必须在不影响性能的情况下保持兼容性,所以我们将保留对 High Speed 的描述,直到我们涵盖了原始规范的基础知识数据传输高速实现的数据速率为 480 Mb/s。这需要......
USB设备复位、挂起和恢复命令
USB主机除了在正常的操作期间发送到设备的控制命令外,主机还可以发出三种独特的信号条件:复位、挂起或恢复挂起的设备。设备复位RESET在枚举过程中,主机向设备发出复位信号。注意此USB 复位与硬件或上电复位不相同,是两个概念。USB 复位的目的是设置设备的软件状态,以便进行枚举。当 D- 和 D......
HID键盘鼠标复位报告描述符
0x05, 0x01, // USAGE_PAGE (Generic Desktop) 0x09, 0x02, // USAGE (Mouse) 0xa1, 0x01, ......
USB设备通过BUSHOUND抓包IRP被取消USTS状态为0xC0010000
通过BUSHOUND抓包内容为: 16.0 CTL 80 06 00 02 00 00 20 00 GET DESCRIPTOR 336us 16.0 32 IN 09 02 20 00 ......
Windows系统实现USB设备的拨出与重新插入
最近在搞USBHOUND,原理比较简单,但是涉及的东西还是比较多,这不,为了搞清楚URB之间的传递脉路,又开始进入了USBCCGP淅代码中。USBCCGP是Windows系统中关于USB比较重要的一个驱动,其实原了USB物理复合设备到逻辑设备的基本功能,其中有大量的关于USB相关处理请求,是值得我......
作者信息
USB中文网
B站搜索 站长漫谈 看视频。
pnpon内核开网,USB中文网,
busrom硬核技术网站长
取消
感谢您的支持,我会继续努力的!
扫码支持
扫码打赏,你说多少就多少

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

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