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
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 dati.
Lunghezza del buffer di output
Dimensioni del buffer di output o zero se non viene richiesto un trasferimento dei dati.
Blocco di 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.
Osservazioni
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, 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.
Discussione | 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 |
bRequest membro della struttura di 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 di IO_BLOCK_EX | Stesso puntatore di lpOutBuffer. | Stesso puntatore di lpOutBuffer. | NULL |
membro uLength della struttura di IO_BLOCK_EX | Stesso valore di lpOutBufferSize. | Stesso valore di lpOutBufferSize. | Zero |
fTransferDirectionIn membro della struttura di 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 IO_BLOCK_EX, il driver in modalità kernel crea unCHE 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.
Fabbisogno
Requisito | Valore |
---|---|
intestazione | usbscan.h (include Usbscan.h) |