WdfUsbTargetPipeConfigContinuousReader-Funktion (wdfusb.h)
[Gilt für KMDF und UMDF]
Die WdfUsbTargetPipeConfigContinuousReader Methode konfiguriert das Framework so, dass es kontinuierlich aus einer angegebenen USB-Pipe gelesen wird.
Syntax
NTSTATUS WdfUsbTargetPipeConfigContinuousReader(
[in] WDFUSBPIPE Pipe,
[in] PWDF_USB_CONTINUOUS_READER_CONFIG Config
);
Parameter
[in] Pipe
Ein Handle zu einem Framework-Pipeobjekt, das durch Aufrufen WdfUsbInterfaceGetConfiguredPipeabgerufen wurde.
[in] Config
Ein Zeiger auf eine vom Aufrufer zugewiesene WDF_USB_CONTINUOUS_READER_CONFIG Struktur.
Rückgabewert
WdfUsbTargetPipeConfigContinuousReader gibt STATUS_SUCCESS zurück, wenn der Vorgang erfolgreich ist. Andernfalls kann diese Methode einen der folgenden Werte zurückgeben:
Rückgabecode | Beschreibung |
---|---|
|
Die Größe der WDF_USB_CONTINUOUS_READER_CONFIG Struktur, die der angegebene parameter Config falsch war. |
|
Ein ungültiger Parameter wurde erkannt. |
|
Nicht genügend Arbeitsspeicher verfügbar. |
|
Der Typ der Pfeife war ungültig. |
|
Die HeaderLength, TransferLengthoder TrailerLength Member der WDF_USB_CONTINUOUS_READER_CONFIG Struktur, dass der Parameter Config eine Größe angegeben hat, die zu groß oder anderweitig ungültig war. |
|
Die Größe des Lesepuffers war kein Vielfaches der maximalen Paketgröße der Pipe. |
Eine Liste mit anderen Rückgabewerten, die von der WdfUsbTargetPipeConfigContinuousReader Methode zurückgegeben werden können, finden Sie unter Framework Object Creation Errors.
Diese Methode kann auch andere NTSTATUS-Wertezurückgeben.
Wenn der Treiber ein ungültiges Objekthandle bereitstellt, tritt eine Fehlerüberprüfung auf.
Bemerkungen
Sie können einen endlosen Reader für ein Massenrohr oder eine Unterbrechungspipeline konfigurieren. Die Pipe muss über einen Eingabeendpunkt verfügen.
Nachdem Sie WdfUsbTargetPipeConfigContinuousReader aufgerufen haben, um einen kontinuierlichen Reader zu konfigurieren, muss ihr Treiber WdfIoTargetStart- aufrufen, um den Reader zu starten. Um den Reader zu beenden, muss der Treiber WdfIoTargetStop-aufrufen.
In der Regel ruft ein Treiber WdfUsbTargetPipeConfigContinuousReader innerhalb seiner EvtDevicePrepareHardware Rückruffunktion auf. Der Treiber sollte WdfIoTargetStart- innerhalb seiner EvtDeviceD0Entry- Rückruffunktion aufrufen und WdfIoTargetStop- aus seiner EvtDeviceD0Exit- Rückruffunktion aufrufen.
Jedes Mal, wenn das E/A-Ziel der Pipe erfolgreich eine Leseanforderung abgeschlossen hat, ruft das Framework die EvtUsbTargetPipeReadComplete Rückruffunktion auf. Wenn das E/A-Ziel beim Verarbeiten einer Anforderung einen Fehler meldet, ruft das Framework die EvtUsbTargetPipeReadersFailed Rückruffunktion auf, nachdem alle Leseanforderungen abgeschlossen wurden. (Daher wird die EvtUsbTargetPipeReadComplete Rückruffunktion nicht aufgerufen, während die EvtUsbTargetPipeReadersFailed Rückruffunktion ausgeführt wird).
Wenn Sie die optionale EvtUsbTargetPipeReadersFailed Rückruf nicht bereitstellen, antwortet das Framework auf einen fehlgeschlagenen Leseversuch, indem eine weitere Leseanforderung gesendet wird. Wenn sich der Bus also in einem Zustand befindet, in dem er keine Lesevorgänge akzeptiert, sendet das Framework kontinuierlich neue Anforderungen, um aus einem fehlgeschlagenen Lesevorgang wiederherzustellen.
Nachdem ein Treiber WdfUsbTargetPipeConfigContinuousReaderaufgerufen hat, kann der Treiber nicht WdfUsbTargetPipeReadSynchronously oder WdfRequestSend- verwenden, um E/A-Anforderungen an die Pipe zu senden, es sei denn, der fortlaufende Reader wurde beendet. Um den Reader zu beenden, kann der Treiber WdfIoTargetStop- aufrufen oder FALSE- aus seiner EvtUsbTargetPipeReadersFailed Rückruffunktion zurückgeben. Wenn der Treiber WdfUsbTargetPipeReadSynchronously aufruft, während der Reader beendet wird, muss das WDF_REQUEST_SEND_OPTION_IGNORE_TARGET_STATE Flag im Flags Member des parameters RequestOptions festgelegt werden. Andernfalls wird die Anforderung eingestiftet, bis das Ziel neu gestartet wird.
Das Framework legt das USBD_SHORT_TRANSFER_OK Flag in seiner internen URB-fest. Durch Festlegen dieses Flags kann das letzte Paket einer Datenübertragung kleiner als die maximale Paketgröße sein.
Weitere Informationen zur WdfUsbTargetPipeConfigContinuousReader Methode und USB-E/A-Zielen finden Sie unter Lesen von einem Pipe-.
Beispiele
Im folgenden Codebeispiel wird eine WDF_USB_CONTINUOUS_READER_CONFIG Struktur initialisiert und WdfUsbTargetPipeConfigContinuousReaderaufgerufen.
WDF_USB_CONTINUOUS_READER_CONFIG contReaderConfig;
NTSTATUS status;
WDF_USB_CONTINUOUS_READER_CONFIG_INIT(
&contReaderConfig,
OsrFxEvtUsbInterruptPipeReadComplete,
DeviceContext,
sizeof(UCHAR)
);
status = WdfUsbTargetPipeConfigContinuousReader(
Pipe,
&contReaderConfig
);
Anforderungen
Anforderung | Wert |
---|---|
Zielplattform- | Universal |
Minimale KMDF-Version | 1.0 |
Mindest-UMDF-Version | 2.0 |
Header- | wdfusb.h (include Wdfusb.h) |
Library | Wdf01000.sys (KMDF); WUDFx02000.dll (UMDF) |
IRQL- | <=DISPATCH_LEVEL |
DDI-Complianceregeln | DriverCreate(kmdf), FailD0EntryIoTargetState(kmdf), KmdfIrql(kmdf), KmdfIrql2(kmdf), KmdfIrqlExplicit(kmdf), UsbContReader(kmdf), UsbKmdfIrql(kmdf), UsbKmdfIrql2(kmdf), UsbKmdfIrqlExplicit(kmdf) |
Siehe auch
WDF_USB_CONTINUOUS_READER_CONFIG