Compartilhar via


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

IRP_MJ_DEVICE_CONTROL

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)