IOCTL_INTERNAL_USB_REGISTER_COMPOSITE_DEVICE I/O 请求向基础 USB 驱动程序堆栈注册 USB 多功能设备(复合驱动程序)的驱动程序。
此请求由一个驱动程序发送,该驱动程序根据通用串行总线 (USB) 3.0 规范替换Microsoft提供的复合驱动程序 Usbccgp.sys并实现函数暂停和远程唤醒功能。
IOCTL_INTERNAL_USB_REGISTER_COMPOSITE_DEVICE 是内核模式 I/O 控制请求。 此请求面向 USB 中心物理设备对象(PDO)。 此请求必须在PASSIVE_LEVEL的中断请求级别(IRQL)发送。
主要代码
IRP_MJ_INTERNAL_DEVICE_CONTROL
输入缓冲区
Parameters.Others.Argument1 是指向调用方分配和初始化 REGISTER_COMPOSITE_DEVICE 结构的指针,其中包含有关父驱动程序的信息。 若要初始化结构,请调用 USBD_BuildRegisterCompositeDevice 例程。
AssociatedIrp.SystemBuffer 成员指向调用方分配的缓冲区,该缓冲区足够大,足以容纳 USB 复合设备中函数的函数句柄数组(类型化USBD_FUNCTION_HANDLE)。 数组中的元素数由 FunctionCountREGISTER_COMPOSITE_DEVICE成员指示。 若要获取函数数,请检查 get-configuration 请求返回的描述符。
输入缓冲区长度
REGISTER_COMPOSITE_DEVICE 结构的大小。
输出缓冲区
在输出中,AssociatedIrp.SystemBuffer 成员指向的缓冲区填充了多函数设备的函数句柄。
输出缓冲区长度
设备中函数的函数句柄大小。
状态块
USB 驱动程序堆栈 Irp->IoStatus.Status 设置为STATUS_SUCCESS(如果请求成功完成)。 STATUS_SUCCESS指示函数句柄有效。
如果出现错误,Irp->IoStatus.Status 包含适当的错误状态。 例如,如果复合驱动程序多次发送请求,则 状态 设置为STATUS_INVALID_DEVICE_REQUEST。
言论
IOCTL_INTERNAL_USB_REGISTER_COMPOSITE_DEVICE 的目的是使复合驱动程序向 USB 驱动程序堆栈发送注册请求。 在注册请求中,复合驱动程序指定设备支持的函数数。 因此,在确定函数数后,必须发送 IOCTL_INTERNAL_USB_REGISTER_COMPOSITE_DEVICE 请求。 通常,该信息在复合驱动程序的启动设备例程 IRP_MN_START_DEVICE中检索。 请注意,配置 中的接口数可以 指示函数数,但并非总是如此。 某些多函数设备公开与一个函数相关的多个接口。 若要获取函数数,必须检查与特定配置相关的各种描述符。 可以通过 get 描述符请求获取这些描述符。
为了响应注册请求,USB 驱动程序堆栈提供设备中函数的句柄列表。 有关代码示例,请参阅 如何注册复合设备。
注册复合驱动程序后,驱动程序可以配置远程唤醒功能。 通过使用函数句柄,当关联的函数发送恢复信号时,复合驱动程序可以发送请求 IOCTL_INTERNAL_USB_REQUEST_REMOTE_WAKE_NOTIFICATION 从 USB 驱动程序堆栈获取远程唤醒通知。
若要删除复合驱动程序与 USB 驱动程序堆栈的关联并释放分配注册的所有资源,驱动程序必须发送 IOCTL_INTERNAL_USB_UNREGISTER_COMPOSITE_DEVICE 请求。
要求
| 要求 | 价值 |
|---|---|
| 最低支持的客户端 | Windows 8操作系统 |
| 标头 | usbioctl.h (包括 Usbioctl.h) |
| IRQL | PASSIVE_LEVEL |