IOCTL_INTERNAL_USB_REGISTER_COMPOSITE_DEVICE IOCTL (usbioctl.h)

IOCTL_INTERNAL_USB_REGISTER_COMPOSITE_DEVICE I/O 请求将 USB 多功能设备的驱动程序注册到基础 USB 驱动程序堆栈 (复合驱动程序) 。

此请求由驱动程序发送,该驱动程序替换 Microsoft 提供的复合驱动程序、Usbccgp.sys,并实现功能暂停和远程唤醒功能,该功能根据通用串行总线 (USB) 3.0 规范。

IOCTL_INTERNAL_USB_REGISTER_COMPOSITE_DEVICE 是内核模式 I/O 控制请求。 此请求面向 USB 集线器物理设备对象 (PDO) 。 此请求必须在中断请求级别发送, (IRQL) PASSIVE_LEVEL。

主要代码

IRP_MJ_INTERNAL_DEVICE_CONTROL

输入缓冲区

Parameters.Others.Argument1 是指向调用方分配并初始化 REGISTER_COMPOSITE_DEVICE< 结构的指针,该结构包含有关父驱动程序的信息。 若要初始化 结构,请调用 USBD_BuildRegisterCompositeDevice 例程。

AssociatedIrp.SystemBuffer 成员指向调用方分配的缓冲区,该缓冲区大到足以容纳一组函数句柄 (USB 复合设备中函数的类型化USBD_FUNCTION_HANDLE) 。 数组中的元素数由 REGISTER_COMPOSITE_DEVICEFunctionCount 成员指示。 若要获取函数数,请检查 get-configuration 请求返回的描述符。

输入缓冲区长度

REGISTER_COMPOSITE_DEVICE 结构的大小。

输出缓冲区

在输出时, AssociatedIrp.SystemBuffer 成员指向的缓冲区填充了多功能设备中函数的函数句柄。

输出缓冲区长度

设备中函数的函数句柄大小。

状态块

如果请求成功完成,USB 驱动程序堆栈会将 Irp-IoStatus.Status> 设置为STATUS_SUCCESS。 STATUS_SUCCESS指示函数句柄有效。

如果出现错误,Irp-IoStatus.Status> 包含相应的错误状态。 例如,如果复合驱动程序多次发送请求,则 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

另请参阅

如何注册复合设备

IOCTL_INTERNAL_USB_UNREGISTER_COMPOSITE_DEVICE