struttura _URB_CONTROL_TRANSFER (usb.h)
La struttura _URB_CONTROL_TRANSFER viene usata dai driver client USB per trasferire i dati da o verso una pipe di controllo.
Sintassi
struct _URB_CONTROL_TRANSFER {
struct _URB_HEADER Hdr;
USBD_PIPE_HANDLE PipeHandle;
ULONG TransferFlags;
ULONG TransferBufferLength;
PVOID TransferBuffer;
PMDL TransferBufferMDL;
struct _URB *UrbLink;
struct _URB_HCD_AREA hca;
UCHAR SetupPacket[8];
};
Members
Hdr
Puntatore a una struttura di _URB_HEADER che specifica le informazioni sull'intestazione HEADER. Hdr.Function deve essere URB_FUNCTION_CONTROL_TRANSFER e Hdr.Length deve essere sizeof(_URB_CONTROL_TRANSFER)
.
PipeHandle
Handle per la pipe del controllo.
Se target è l'endpoint di controllo predefinito, PipeHandle deve essere NULL. In questo caso, transferFlags deve contenere il flag USBD_DEFAULT_PIPE_TRANSFER.
Se target è un endpoint di controllo non predefinito, PipeHandle specifica un handle opaco per la pipe di controllo. Il driver del controller host restituisce questo handle quando il driver client seleziona la configurazione del dispositivo con un URB_FUNCTION_SELECT_CONFIGURATION di tipo o quando il driver client modifica le impostazioni per un'interfaccia con un URB_FUNCTION_SELECT_INTERFACE di tipo".
TransferFlags
Specifica zero, uno o una combinazione dei flag seguenti:
Valore | Significato |
---|---|
|
È impostato per richiedere i dati da un dispositivo. Per trasferire i dati in un dispositivo, questo flag deve essere chiaro. |
|
È impostato per trasferire i dati in un dispositivo. L'impostazione di questo flag equivale alla cancellazione del flag di USBD_TRANSFER_DIRECTION_IN. |
|
È impostato per indirizzare il controller host a non restituire un errore quando riceve un pacchetto dal dispositivo che è più breve della dimensione massima del pacchetto per l'endpoint. Le dimensioni massime dei pacchetti per l'endpoint vengono segnalate nel membro bMaxPacketSize0 della struttura di USB_DEVICE_DESCRIPTOR (descrittore di dispositivo) per l'endpoint di controllo predefinito. Per un endpoint di controllo non predefinito, le dimensioni massime dei pacchetti sono impostate nel membro wMaxPacketSize della struttura di USB_ENDPOINT_DESCRIPTOR (descrittore di endpoint).
Quando il controller host riceve un pacchetto la cui lunghezza è più breve del valore wMaxPacketSize in un endpoint di controllo, il comportamento è il seguente a seconda del tipo di controller host:
|
|
È impostato per indirizzare il controller host a eseguire un trasferimento di controllo sulla pipe di controllo predefinita. In questo modo il chiamante può inviare comandi alla pipe di controllo predefinita senza specificare in modo esplicito l'handle della pipe. |
TransferBufferLength
Specifica la lunghezza, in byte, del buffer specificato in TransferBuffer o descritto in TransferBufferMDL. Il driver del controller host restituisce il numero di byte inviati o letti dalla pipe in questo membro.
TransferBuffer
Puntatore a un buffer residente per il trasferimento o è NULL se viene fornito un MDL in TransferBufferMDL. Il contenuto di questo buffer dipende dal valore di TransferFlags. Se viene specificato USBD_TRANSFER_DIRECTION_IN questo buffer conterrà i dati letti dal dispositivo al ritorno dal driver del controller host. In caso contrario, questo buffer contiene i dati forniti dal driver per il trasferimento al dispositivo.
TransferBufferMDL
Puntatore a un MDL che descrive un buffer residente o è NULL se viene fornito un buffer in TransferBuffer. Il contenuto del buffer dipende dal valore di TransferFlags. Se viene specificato USBD_TRANSFER_DIRECTION_IN, il buffer descritto conterrà i dati letti dal dispositivo al ritorno dal driver del controller host. In caso contrario, il buffer contiene i dati forniti dal driver per il trasferimento al dispositivo. Questo file MDL deve essere allocato da un pool non di paging.
UrbLink
Riservato. Non usare.
hca
Riservato. Non usare.
SetupPacket[8]
Specifica un pacchetto di installazione della richiesta definito da USB. Il formato di un pacchetto di configurazione della richiesta USB è disponibile nella specifica usb core.
Commenti
La struttura URB_CONTROL_TRANSFER_EX è identica a URB_CONTROL_TRANSFER, ad eccezione del fatto che fornisce un valore di timeout nel campo Timeout .
I membri riservati di questa struttura devono essere considerati opachi e sono riservati per l'uso del sistema.
Requisiti
Requisito | Valore |
---|---|
Intestazione | usb.h (include Usb.h) |