Condividi tramite


IOCTL_SEND_USB_REQUEST IOCTL (usbscan.h)

Invia una richiesta definita dal fornitore a un dispositivo USB, usando la pipe di controllo e, facoltativamente, invia o riceve dati aggiuntivi.

Codice principale

IRP_MJ_DEVICE_CONTROL

Buffer di input

Puntatore a una struttura IO_BLOCK_EX .

Lunghezza del buffer di input

Dimensioni del buffer di input.

Buffer di output

Puntatore allo stesso buffer del membro pbyData della struttura IO_BLOCK_EX identificata o NULL se non viene richiesto un trasferimento di dati.

Lunghezza del buffer di output

Dimensioni del buffer di output o zero se non viene richiesto un trasferimento dei dati.

Blocco dello stato

Irp->IoStatus.Status è impostato su STATUS_SUCCESS se la richiesta ha esito positivo. In caso contrario, stato alla condizione di errore appropriata come codice NTSTATUS .

Commenti

Parametri DeviceIoControl

Quando la funzione DeviceloControl viene chiamata con il codice di controllo IOCTL_SEND_USB_REQUEST, il chiamante deve specificare l'indirizzo di una struttura IO_BLOCK_EX come parametro lpInBuffer della funzione. Il tipo di richiesta specificato con questo codice di controllo di I/O è specifico del dispositivo e definito dal fornitore, così come il tipo e le dimensioni di tutte le informazioni che potrebbero essere inviate o ricevute.

Nella tabella seguente viene illustrato come specificare gli argomenti di input.

Argomento Operazione di lettura Operazione di scrittura Nessun trasferimento dati
lpInBuffer IO_BLOCK_EX puntatore. IO_BLOCK_EX puntatore. IO_BLOCK_EX puntatore.
lpOutBuffer Puntatore al buffer che riceverà i dati da leggere. Puntatore al buffer contenente i dati da scrivere. NULL
lpOutBufferSize Dimensioni del buffer. Dimensioni del buffer. Zero
membro bRequest della struttura IO_BLOCK_EX Codice di richiesta specifico del dispositivo. Codice di richiesta specifico del dispositivo. Codice di richiesta specifico del dispositivo.
membro pbyData della struttura IO_BLOCK_EX Stesso puntatore di lpOutBuffer. Stesso puntatore di lpOutBuffer. NULL
membro uLength della struttura IO_BLOCK_EX Stesso valore di lpOutBufferSize. Stesso valore di lpOutBufferSize. Zero
fTransferDirectionIn membro della struttura IO_BLOCK_EX TRUE FALSE FALSE

Il membro bmRequestType della struttura IO_BLOCK_EX non viene utilizzato con IOCTL_SEND_USB_REQUEST.

Usando il contenuto della struttura di IO_BLOCK_EX , il driver in modalità kernel crea un'cartella ODBC che contiene una struttura URB_CONTROL_VENDOR_OR_CLASS_REQUEST .

La tabella seguente indica i valori assegnati ai membri della struttura _URB_CONTROL_VENDOR_OR_CLASS_REQUEST.

Membro struttura Valore assegnato
TransferFlags 0
TransferBufferLength pIoBlockEx-uLength>
TransferBuffer lpOutBuffer (lettura) o pIoBlockEx-pbyData> (scrittura)
TransferBufferMDL NULL
RequestTypeReservedBits 0xC0 (lettura) o 0x40 (scrittura)
Richiesta pIoBlockEx-bRequest>
Valore (SHORT) pIoBlockEx-uOffset>
Index pIoBlockEx-uIndex>

Per altre informazioni, vedere Accesso ai driver Kernel-Mode per i dispositivi ancora immagine.

Requisiti

Requisito Valore
Intestazione usbscan.h (include Usbscan.h)