IOCTL_SEND_USB_REQUEST IOCTL (usbscan.h)
Отправляет определенный поставщиком запрос на USB-устройство, используя канал управления, а также при необходимости отправляет или получает дополнительные данные.
Основной код
Входной буфер
Указатель на структуру IO_BLOCK_EX.
Длина входного буфера
Размер входного буфера.
Выходной буфер
Указатель на тот же буфер, pbyData член определенной структуры IO_BLOCK_EX или NULL, если передача данных не запрашивается.
Длина выходного буфера
Размер выходного буфера или ноль, если передача данных не запрашивается.
Блок состояния
Irp->IoStatus.Status STATUS_SUCCESS, если запрос выполнен успешно. В противном случае состояние соответствующего условия ошибки в качестве кода NTSTATUS.
Замечания
Параметры DeviceIoControl
При вызове функции DeviceloControl с кодом элемента управления IOCTL_SEND_USB_REQUEST вызывающий объект должен указать адрес структуры IO_BLOCK_EX в качестве параметра функции lpInBuff er. Тип запроса, указанный в этом коде элемента управления ввода-вывода, определяется устройством и поставщиком, как тип и размер любой информации, которую можно отправить или получить.
В следующей таблице показано, как следует указывать входные аргументы.
Аргумент | Операция считывания | Операция записи | Нет передачи данных |
---|---|---|---|
lpInBuffer | указатель IO_BLOCK_EX. | указатель IO_BLOCK_EX. | указатель IO_BLOCK_EX. |
lpOutBuffer | Указатель на буфер, который будет получать данные для чтения. | Указатель на буфер, содержащий данные для записи. | NULL |
lpOutBufferSize | Размер буфера. | Размер буфера. | Нуль |
bRequest член структуры IO_BLOCK_EX | Код запроса для конкретного устройства. | Код запроса для конкретного устройства. | Код запроса для конкретного устройства. |
pbyData член структуры IO_BLOCK_EX | Тот же указатель, что и lpOutBuffer. | Тот же указатель, что и lpOutBuffer. | NULL |
элемент структуры IO_BLOCK_EX uLength | То же значение, что и lpOutBufferSize. | То же значение, что и lpOutBufferSize. | Нуль |
fTransferDirectionIn член структуры IO_BLOCK_EX | TRUE | FALSE | FALSE |
Элемент bmRequestType структуры IO_BLOCK_EX не используется с IOCTL_SEND_USB_REQUEST.
С помощью содержимого структуры IO_BLOCK_EX драйвер в режиме ядра создает URB, содержащий структуру URB_CONTROL_VENDOR_OR_CLASS_REQUEST.
В следующей таблице указаны значения, назначенные элементам структуры _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 |
индекс | pIoBlockEx—>uIndex |
Дополнительные сведения см. в статье Доступ к драйверам Kernel-Mode для устройств с тем же изображением.
Требования
Требование | Ценность |
---|---|
заголовка | usbscan.h (include Usbscan.h) |