Nota:
El acceso a esta página requiere autorización. Puede intentar iniciar sesión o cambiar directorios.
El acceso a esta página requiere autorización. Puede intentar cambiar los directorios.
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 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) |