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 de 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 que pbyData miembro 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 a la condición de error adecuada como código NTSTATUS.

Observaciones

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 de 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, tal 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 Operación de lectura Operación de escritura 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 la estructura de IO_BLOCK_EX 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 la estructura de IO_BLOCK_EX Mismo puntero que lpOutBuffer. Mismo puntero que lpOutBuffer. NULL
miembro uLength de la estructura de IO_BLOCK_EX El mismo valor que lpOutBufferSize. El mismo valor que lpOutBufferSize. Cero
miembro fTransferDirectionIn 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 de IO_BLOCK_EX, el controlador en modo kernel crea unurB deque contiene una estructura de 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)
de solicitud de pIoBlockEx:> bRequest
valor (SHORT)pIoBlockEx->uOffset
de índice de pIoBlockEx:> uIndex

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

Requisitos

Requisito Valor
encabezado de usbscan.h (incluya Usbscan.h)