EVT_WDF_USB_READER_COMPLETION_ROUTINE funzione di callback (wdfusb.h)
[Si applica a KMDF e UMDF]
La funzione di callback di un driver EvtUsbTargetPipeReadComplete informa il driver che un lettore continuo ha completato correttamente una richiesta di lettura.
Sintassi
EVT_WDF_USB_READER_COMPLETION_ROUTINE EvtWdfUsbReaderCompletionRoutine;
void EvtWdfUsbReaderCompletionRoutine(
[in] WDFUSBPIPE Pipe,
[in] WDFMEMORY Buffer,
[in] size_t NumBytesTransferred,
[in] WDFCONTEXT Context
)
{...}
Parametri
[in] Pipe
Handle per un oggetto pipe del framework.
[in] Buffer
Handle per un oggetto memoria framework che rappresenta un buffer che contiene dati dal dispositivo.
[in] NumBytesTransferred
Numero di byte di dati presenti nel buffer di lettura.
[in] Context
Informazioni sul contesto definite dal driver specificate nel EvtUsbTargetPipeReadCompleteContext membro della struttura WDF_USB_CONTINUOUS_READER_CONFIG della pipe.
Valore restituito
Nessuno
Osservazioni
Per registrare un EvtUsbTargetPipeReadComplete funzione di callback, il driver deve inserire l'indirizzo della funzione in una struttura WDF_USB_CONTINUOUS_READER_CONFIG.
Se un driver ha creato un lettore continuo per una pipe USB, il framework chiama il driver EvtUsbTargetPipeReadComplete funzione di callback ogni volta che la destinazione di I/O del driver ha completato correttamente una richiesta di lettura. La funzione di callback viene chiamata in IRQL in corrispondenza della quale la destinazione di I/O ha completato la richiesta di lettura, che in genere è IRQL = DISPATCH_LEVEL, ma non superiore a DISPATCH_LEVEL. Se la destinazione di I/O non completa correttamente una richiesta, il framework chiama il driver EvtUsbTargetPipeReadersFailed funzione di callback.
Per accedere al buffer contenente i dati letti dal dispositivo, il driver può chiamare WdfMemoryGetBuffer. Il framework scrive i dati nel buffer, dopo l'intestazione definita dal membro HeaderLength della struttura WDF_USB_CONTINUOUS_READER_CONFIG. Si noti che il puntatore che WdfMemoryGetBuffer restituisce punti all'inizio dell'intestazione, ma il parametro EvtUsbTargetPipeReadComplete funzione di callback NumBytesTransferred parametro non includere la lunghezza dell'intestazione.
Per impostazione predefinita, il framework elimina l'oggetto memoria del buffer dopo che la funzione di callback EvtUsbTargetPipeReadComplete. È tuttavia possibile che l'oggetto memoria rimanga valido dopo la restituzione della funzione di callback. Ad esempio, è possibile che il driver archivii l'handle dell'oggetto nello spazio di contesto dell'oggetto della pipe del framework in modo che il driver possa elaborare il contenuto dell'oggetto memoria dopo la restituzione della funzione di callback. Per estendere la durata dell'oggetto memoria, la funzione di callback deve passare l'handle dell'oggetto memoria a WdfObjectReference. Successivamente, il driver deve chiamare WdfObjectDereference in modo che il framework possa eliminare l'oggetto.
Il framework sincronizza le chiamate al EvtUsbTargetPipeReadComplete e EvtUsbTargetPipeReadersFailed funzioni di callback in base alle regole seguenti:
- Queste funzioni di callback non vengono eseguite contemporaneamente per una singola pipe USB.
- Se il driver crea più lettori continui per più pipe USB, con più EvtUsbTargetPipeReadComplete e EvtUsbTargetPipeReadersFailed funzioni di callback, le più funzioni di callback possono essere eseguite contemporaneamente.
- Se il driver ha specificato il valore predefinito NumPendingReads valore o un valore maggiore di 1 e se una richiesta di lettura viene completata mentre la EvtUsbTargetPipeReadComplete funzione di callback è in esecuzione, il framework può chiamare il EvtUsbTargetPipeReadComplete funzione di callback prima che venga restituita la funzione di callback.
- Il framework non sincronizza queste funzioni di callback con altre funzioni di callback.
Il driver deve chiamare WdfObjectDereference al termine dell'utilizzo dell'oggetto memoria. Il framework può quindi chiamare il driver EvtDestroyCallback funzione di callback (se specificato) ed eliminare l'oggetto memoria.
Per altre informazioni sulle destinazioni EvtUsbTargetPipeReadComplete funzione di callback e I/O USB, vedere Destinazioni di I/O USB.
Fabbisogno
Requisito | Valore |
---|---|
piattaforma di destinazione | Universale |
versione minima di KMDF | 1.0 |
versione minima di UMDF | 2.0 |
intestazione | wdfusb.h (include Wdf.h) |
IRQL | <=DISPATCH_LEVEL (vedere la sezione Osservazioni). |