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 membro pbyData da estrutura 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 à condição de erro apropriada como um código de NTSTATUS.
Observações
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. |
pbyData membro da estrutura IO_BLOCK_EX | Mesmo ponteiro que lpOutBuffer. | Mesmo ponteiro que lpOutBuffer. | NULL |
uLength membro da estrutura IO_BLOCK_EX | Mesmo valor que lpOutBufferSize. | Mesmo valor que lpOutBufferSize. | Zero |
fTransferDirectionIn membro da estrutura IO_BLOCK_EX | verdadeiro | falso | falso |
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 umaURBque 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 (gravação) |
TransferBufferMDL | NULL |
requestTypeReservedBits | 0xC0 (leitura) ou 0x40 (gravação) |
de solicitação de | pIoBlockEx–> bRequest |
Value | (SHORT)pIoBlockEx–> uOffset |
de índice | pIoBlockEx –> uIndex |
Para obter mais informações, consulte Acessando drivers de Kernel-Mode para dispositivos de imagem morta.
Requisitos
Requisito | Valor |
---|---|
cabeçalho | usbscan.h (inclua Usbscan.h) |