Поделиться через


IOCTL_SEND_USB_REQUEST IOCTL (usbscan.h)

Отправляет определенный поставщиком запрос на USB-устройство, используя канал управления, а также при необходимости отправляет или получает дополнительные данные.

Основной код

IRP_MJ_DEVICE_CONTROL

Входной буфер

Указатель на структуру 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)