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 结构的成员 | 特定于设备的请求代码。 | 特定于设备的请求代码。 | 特定于设备的请求代码。 |
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 |
值 | (SHORT)pIoBlockEx->uOffset |
索引 | pIoBlockEx->uIndex |
有关详细信息,请参阅 访问静止映像设备的 Kernel-Mode 驱动程序。
要求
要求 | 价值 |
---|---|
标头 | usbscan.h (包括 Usbscan.h) |