IOCTL_SEND_USB_REQUEST IOCTL (usbscan.h)
Envia uma solicitação definida pelo fornecedor para um dispositivo USB, usando o pipe de controle e, opcionalmente, envia ou recebe dados adicionais.
Código principal
Buffer de entrada
Ponteiro para uma estrutura IO_BLOCK_EX .
Comprimento do buffer de entrada
Tamanho do buffer de entrada.
Buffer de saída
Ponteiro para o mesmo buffer, o membro pbyData da estrutura de IO_BLOCK_EX identificada ou NULL se uma transferência de dados não estiver sendo solicitada.
Comprimento do buffer de saída
Tamanho do buffer de saída ou zero se uma transferência de dados não estiver sendo solicitada.
Bloco de status
Irp->IoStatus.Status será definido como STATUS_SUCCESS se a solicitação for bem-sucedida. Caso contrário, Status para a condição de erro apropriada como um código NTSTATUS .
Comentários
Parâmetros DeviceIoControl
Quando a função DeviceloControl é chamada com o código de controle IOCTL_SEND_USB_REQUEST, o chamador deve especificar o endereço de uma estrutura IO_BLOCK_EX como o parâmetro lpInBuffer da função. O tipo de solicitação especificado com esse código de controle de E/S é específico do dispositivo e definido pelo fornecedor, assim como o tipo e o tamanho de qualquer informação que possa ser enviada ou recebida.
A tabela a seguir mostra como os argumentos de entrada devem ser especificados.
Argumento | Operação de Leitura | Operação de Gravação | Sem transferência de dados |
---|---|---|---|
lpInBuffer | IO_BLOCK_EX ponteiro. | IO_BLOCK_EX ponteiro. | IO_BLOCK_EX ponteiro. |
lpOutBuffer | Ponteiro para o buffer que receberá dados a serem lidos. | Ponteiro para o buffer que contém dados a serem gravados. | NULL |
lpOutBufferSize | Tamanho do buffer. | Tamanho do buffer. | Zero |
bRequest membro da estrutura IO_BLOCK_EX | Código de solicitação específico do dispositivo. | Código de solicitação específico do dispositivo. | Código de solicitação específico do dispositivo. |
membro pbyData da estrutura de IO_BLOCK_EX | Mesmo ponteiro que lpOutBuffer. | Mesmo ponteiro que lpOutBuffer. | NULL |
membro uLength da estrutura de IO_BLOCK_EX | Mesmo valor que lpOutBufferSize. | Mesmo valor que lpOutBufferSize. | Zero |
fTransferDirectionIn membro da estrutura de IO_BLOCK_EX | TRUE | FALSE | FALSE |
O membro bmRequestType da estrutura IO_BLOCK_EX não é usado com IOCTL_SEND_USB_REQUEST.
Usando o conteúdo da estrutura IO_BLOCK_EX , o driver do modo kernel cria um URB que contém uma estrutura URB_CONTROL_VENDOR_OR_CLASS_REQUEST .
A tabela a seguir indica os valores atribuídos a _URB_CONTROL_VENDOR_OR_CLASS_REQUEST membros da estrutura.
Membro da estrutura | Valor Atribuído |
---|---|
TransferFlags | 0 |
TransferBufferLength | pIoBlockEx-uLength> |
TransferBuffer | lpOutBuffer (leitura) ou pIoBlockEx-pbyData> (write) |
TransferBufferMDL | NULL |
RequestTypeReservedBits | 0xC0 (leitura) ou 0x40 (gravação) |
Solicitação | pIoBlockEx-bRequest> |
Valor | (SHORT) pIoBlockEx-uOffset> |
Index | pIoBlockEx-uIndex> |
Para obter mais informações, consulte Acessando drivers de Kernel-Mode para dispositivos de imagem ainda.
Requisitos
Requisito | Valor |
---|---|
Cabeçalho | usbscan.h (inclua Usbscan.h) |