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 结构的成员 特定于设备的请求代码。 特定于设备的请求代码。 特定于设备的请求代码。
pbyData IO_BLOCK_EX 结构的成员 lpOutBuffer相同的指针。 lpOutBuffer相同的指针。 NULL
uLength IO_BLOCK_EX 结构的成员 lpOutBufferSize的值相同。 lpOutBufferSize的值相同。
fTransferDirectionIn IO_BLOCK_EX 结构的成员 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 (read) 或 pIoBlockEx->pbyData (write)
TransferBufferMDL NULL
RequestTypeReservedBits 0xC0(读取)或0x40(写入)
请求 pIoBlockEx->bRequest
SHORTpIoBlockEx->uOffset
索引 pIoBlockEx->uIndex

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

要求

要求 价值
标头 usbscan.h (包括 Usbscan.h)