IOCTL_SEND_USB_REQUEST IOCTL (usbscan.h)
使用控制管道将供应商定义的请求发送到 USB 设备,并选择性地发送或接收其他数据。
主要代码
输入缓冲区
指向 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) |