IOCTL_SEND_USB_REQUEST IOCTL (usbscan.h)

使用控制管道将供应商定义的请求发送到 USB 设备,并选择性地发送或接收其他数据。

主要代码

IRP_MJ_DEVICE_CONTROL

输入缓冲区

指向 IO_BLOCK_EX 结构的指针。

输入缓冲区长度

输入缓冲区的大小。

输出缓冲区

指向标识IO_BLOCK_EX结构的 pbyData 成员的同一缓冲区的指针;如果未请求数据传输,则为 NULL

输出缓冲区长度

输出缓冲区的大小,如果未请求数据传输,则为零。

状态块

Irp->如果请求成功,IoStatus.Status 设置为 STATUS_SUCCESS。 否则, 状态 为相应的错误条件作为 NTSTATUS 代码。

注解

DeviceIoControl 参数

使用 IOCTL_SEND_USB_REQUEST 控制代码调用 DeviceloControl 函数时,调用方必须将 IO_BLOCK_EX 结构的地址指定为函数的 lpInBuffer 参数。 使用此 I/O 控制代码指定的请求类型特定于设备,由供应商定义,可能发送或接收的任何信息的类型和大小也一样。

下表显示了应如何指定输入参数。

参数 读取操作 写入操作 无数据传输
lpInBuffer IO_BLOCK_EX指针。 IO_BLOCK_EX指针。 IO_BLOCK_EX指针。
lpOutBuffer 指向将接收要读取的数据的缓冲区的指针。 指向包含要写入的数据的缓冲区的指针。 NULL
lpOutBufferSize 缓冲区的大小。 缓冲区的大小。 零个
brequest IO_BLOCK_EX 结构的成员 特定于设备的请求代码。 特定于设备的请求代码。 特定于设备的请求代码。
IO_BLOCK_EX 结构的 pbyData 成员 lpOutBuffer 相同的指针。 lpOutBuffer 相同的指针。 NULL
IO_BLOCK_EX 结构的 uLength 成员 值与 lpOutBufferSize 相同。 值与 lpOutBufferSize 相同。 零个
IO_BLOCK_EX 结构的 fTransferDirectionIn 成员 TRUE FALSE FALSE

IO_BLOCK_EX 结构的 bmRequestType 成员不与 IOCTL_SEND_USB_REQUEST 一起使用。

内核模式驱动程序使用IO_BLOCK_EX结构内容创建包含URB_CONTROL_VENDOR_OR_CLASS_REQUEST结构的 URB

下表指示分配给_URB_CONTROL_VENDOR_OR_CLASS_REQUEST结构成员的值。

结构成员 赋值
TransferFlags 0
TransferBufferLength pIoBlockEx-uLength>
TransferBuffer lpOutBuffer (读取) 或 pIoBlockEx-pbyData> (写入)
TransferBufferMDL NULL
RequestTypeReservedBits 0xC0 (读取) 或0x40 (写入)
请求 pIoBlockEx-bRequest>
(SHORT) pIoBlockEx-uOffset>
Index pIoBlockEx-uIndex>

有关详细信息,请参阅 访问静态映像设备的 Kernel-Mode 驱动程序

要求

要求
Header usbscan.h (包括 Usbscan.h)