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
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) |