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 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)