Funzione WdfUsbTargetPipeConfigContinuousReader (wdfusb.h)
[Si applica a KMDF e UMDF]
Il metodo WdfUsbTargetPipeConfigContinuousReader configura il framework per la lettura continua da una pipe USB specificata.
Sintassi
NTSTATUS WdfUsbTargetPipeConfigContinuousReader(
[in] WDFUSBPIPE Pipe,
[in] PWDF_USB_CONTINUOUS_READER_CONFIG Config
);
Parametri
[in] Pipe
Handle per un oggetto pipe del framework ottenuto chiamando WdfUsbInterfaceGetConfiguredPipe.
[in] Config
Puntatore a una struttura WDF_USB_CONTINUOUS_READER_CONFIG allocata dal chiamante.
Valore restituito
WdfUsbTargetPipeConfigContinuousReader restituisce STATUS_SUCCESS se l'operazione ha esito positivo. In caso contrario, questo metodo può restituire uno dei valori seguenti:
Codice restituito | Descrizione |
---|---|
|
La dimensione della struttura WDF_USB_CONTINUOUS_READER_CONFIG specificata dal parametro Config non è corretta. |
|
È stato rilevato un parametro non valido. |
|
Memoria insufficiente disponibile. |
|
Il tipo della pipe non è valido. |
|
Membro HeaderLength, TransferLength o TrailerLength della struttura WDF_USB_CONTINUOUS_READER_CONFIG che il parametro Config ha specificato una dimensione troppo grande o altrimenti non valida. |
|
Le dimensioni del buffer di lettura non erano un multiplo delle dimensioni massime del pacchetto della pipe. |
Per un elenco di altri valori restituiti che il metodo WdfUsbTargetPipeConfigContinuousReader potrebbe restituire, vedere Errori di creazione di oggetti framework.
Questo metodo potrebbe anche restituire altri valori NTSTATUS.
Se il driver fornisce un handle di oggetto non valido, si verifica un controllo di bug.
Commenti
È possibile configurare un lettore continuo per una pipe bulk o una pipe di interrupt. La pipe deve avere un endpoint di input.
Dopo aver chiamato WdfUsbTargetPipeConfigContinuousReader per configurare un lettore continuo, il driver deve chiamare WdfIoTargetStart per avviare il lettore. Per arrestare il lettore, il driver deve chiamare WdfIoTargetStop.
In genere, un driver chiama WdfUsbTargetPipeConfigContinuousReader dall'interno della relativa funzione di callback EvtDevicePrepareHardware . Il driver deve chiamare WdfIoTargetStart dall'interno della funzione di callback EvtDeviceD0Entry e deve chiamare WdfIoTargetStop dall'interno della relativa funzione di callback EvtDeviceD0Exit .
Ogni volta che la destinazione di I/O della pipe completa correttamente una richiesta di lettura, il framework chiama la funzione di callback EvtUsbTargetPipeReadComplete del driver. Se la destinazione di I/O segnala un errore durante l'elaborazione di una richiesta, il framework chiama la funzione di callback EvtUsbTargetPipeReadersFailed del driver dopo il completamento di tutte le richieste di lettura. Pertanto, la funzione di callback EvtUsbTargetPipeReadComplete non verrà chiamata mentre è in esecuzione la funzione di callback EvtUsbTargetPipeReadersFailed .
Se non si specifica il callback EvtUsbTargetPipeReadersFailed facoltativo, il framework risponde a un tentativo di lettura non riuscito inviando un'altra richiesta di lettura. Pertanto, se il bus è in uno stato in cui non accetta letture, il framework invia continuamente nuove richieste per il ripristino da una lettura non riuscita.
Dopo che un driver ha chiamato WdfUsbTargetPipeConfigContinuousReader, il driver non può usare WdfUsbTargetPipeReadSynchronously o WdfRequestSend per inviare richieste di I/O alla pipe a meno che il lettore continuo non sia stato arrestato. Per arrestare il lettore, il driver può chiamare WdfIoTargetStop o restituire FALSE dalla relativa funzione di callback EvtUsbTargetPipeReadersFailed . Se il driver chiama WdfUsbTargetPipeReadSynchronously mentre il lettore viene arrestato, deve impostare il flag WDF_REQUEST_SEND_OPTION_IGNORE_TARGET_STATE nel membro Flags del parametro RequestOptions . In caso contrario, la richiesta verrà sospesa fino al riavvio della destinazione.
Il framework imposta il flag di USBD_SHORT_TRANSFER_OK nel relativo RIQUADRO interno. L'impostazione di questo flag consente all'ultimo pacchetto di un trasferimento dati di essere inferiore alla dimensione massima del pacchetto.
Per altre informazioni sul metodo WdfUsbTargetPipeConfigContinuousReader e sulle destinazioni di I/O USB, vedere Lettura da una pipe.
Esempio
L'esempio di codice seguente inizializza una struttura WDF_USB_CONTINUOUS_READER_CONFIG e chiama WdfUsbTargetPipeConfigContinuousReader.
WDF_USB_CONTINUOUS_READER_CONFIG contReaderConfig;
NTSTATUS status;
WDF_USB_CONTINUOUS_READER_CONFIG_INIT(
&contReaderConfig,
OsrFxEvtUsbInterruptPipeReadComplete,
DeviceContext,
sizeof(UCHAR)
);
status = WdfUsbTargetPipeConfigContinuousReader(
Pipe,
&contReaderConfig
);
Requisiti
Requisito | Valore |
---|---|
Piattaforma di destinazione | Universale |
Versione KMDF minima | 1.0 |
Versione UMDF minima | 2,0 |
Intestazione | wdfusb.h (include Wdfusb.h) |
Libreria | Wdf01000.sys (KMDF); WUDFx02000.dll (UMDF) |
IRQL | <=DISPATCH_LEVEL |
Regole di conformità DDI | DriverCreate(kmdf), FailD0EntryIoTargetState(kmdf), KmdfIrql(kmdf), KmdfIrql2(kmdf), KmdfIrqlExplicit(kmdf), UsbContReader(kmdf), UsbKmdfIrql(kmdf), UsbKmdfIrql2(kmdf), UsbKmdfIrqlExplicit(kmdf) |
Vedi anche
WDF_USB_CONTINUOUS_READER_CONFIG