Compartir a través de


IOCTL_SEND_USB_REQUEST IOCTL (usbscan.h)

Envía una solicitud definida por el proveedor a un dispositivo USB, mediante la canalización de control y, opcionalmente, envía o recibe datos adicionales.

Código principal

IRP_MJ_DEVICE_CONTROL

Búfer de entrada

Puntero a una estructura IO_BLOCK_EX .

Longitud del búfer de entrada

Tamaño del búfer de entrada.

Búfer de salida

Puntero al mismo búfer el miembro pbyData de la estructura IO_BLOCK_EX identificada, o NULL si no se solicita una transferencia de datos.

Longitud del búfer de salida

Tamaño del búfer de salida o cero si no se solicita una transferencia de datos.

Bloque de estado

Irp->IoStatus.Status se establece en STATUS_SUCCESS si la solicitud se realiza correctamente. De lo contrario, estado de la condición de error adecuada como código NTSTATUS .

Comentarios

Parámetros deviceIoControl

Cuando se llama a la función DeviceloControl con el código de control IOCTL_SEND_USB_REQUEST, el autor de la llamada debe especificar la dirección de una estructura de IO_BLOCK_EX como parámetro lpInBuffer de la función. El tipo de solicitud especificado con este código de control de E/S es específico del dispositivo y definido por el proveedor, como son el tipo y el tamaño de cualquier información que se pueda enviar o recibir.

En la tabla siguiente se muestra cómo se deben especificar los argumentos de entrada.

Argumento Lee una operación Escribe una operación Sin transferencia de datos
lpInBuffer IO_BLOCK_EX puntero. IO_BLOCK_EX puntero. IO_BLOCK_EX puntero.
lpOutBuffer Puntero al búfer que recibirá los datos que se van a leer. Puntero al búfer que contiene los datos que se van a escribir. NULL
lpOutBufferSize Tamaño del búfer. Tamaño del búfer. Cero
Miembro bRequest de IO_BLOCK_EX estructura Código de solicitud específico del dispositivo. Código de solicitud específico del dispositivo. Código de solicitud específico del dispositivo.
miembro pbyData de IO_BLOCK_EX estructura Mismo puntero que lpOutBuffer. Mismo puntero que lpOutBuffer. NULL
Miembro uLength de IO_BLOCK_EX estructura El mismo valor que lpOutBufferSize. El mismo valor que lpOutBufferSize. Cero
fTransferDirectionIn miembro de IO_BLOCK_EX estructura TRUE FALSE FALSE

El miembro bmRequestType de la estructura IO_BLOCK_EX no se usa con IOCTL_SEND_USB_REQUEST.

Con el contenido de la estructura IO_BLOCK_EX , el controlador en modo kernel crea un URB que contiene una estructura URB_CONTROL_VENDOR_OR_CLASS_REQUEST .

En la tabla siguiente se indican los valores asignados a _URB_CONTROL_VENDOR_OR_CLASS_REQUEST miembros de estructura.

Miembro de estructura Valor asignado
TransferFlags 0
TransferBufferLength pIoBlockEx-uLength>
TransferBuffer lpOutBuffer (lectura) o pIoBlockEx-pbyData> (escritura)
TransferBufferMDL NULL
RequestTypeReservedBits 0xC0 (lectura) o 0x40 (escritura)
Solicitud pIoBlockEx-bRequest>
Valor (SHORT) pIoBlockEx-uOffset>
Index pIoBlockEx-uIndex>

Para obtener más información, consulte Acceso a controladores de Kernel-Mode para dispositivos de imagen fija.

Requisitos

Requisito Valor
Header usbscan.h (incluye Usbscan.h)