EVT_WDF_USB_READER_COMPLETION_ROUTINE Rückruffunktion (wdfusb.h)
[Gilt für KMDF und UMDF]
Die EvtUsbTargetPipeReadComplete Ereignisrückruffunktion eines Treibers informiert den Treiber, dass ein fortlaufender Reader erfolgreich eine Leseanforderung abgeschlossen hat.
Syntax
EVT_WDF_USB_READER_COMPLETION_ROUTINE EvtWdfUsbReaderCompletionRoutine;
void EvtWdfUsbReaderCompletionRoutine(
[in] WDFUSBPIPE Pipe,
[in] WDFMEMORY Buffer,
[in] size_t NumBytesTransferred,
[in] WDFCONTEXT Context
)
{...}
Parameter
[in] Pipe
Ein Handle zu einem Frameworkpipelineobjekt.
[in] Buffer
Ein Handle zu einem Framework-Speicherobjekt, das einen Puffer darstellt, der Daten vom Gerät enthält.
[in] NumBytesTransferred
Die Anzahl der Bytes von Daten, die sich im Lesepuffer befinden.
[in] Context
Treiberdefinierte Kontextinformationen, die der in der EvtUsbTargetPipeReadCompleteContext angegebene Treiber Mitglied der WDF_USB_CONTINUOUS_READER_CONFIG Struktur der Pipe.
Rückgabewert
Nichts
Bemerkungen
Um eine EvtUsbTargetPipeReadComplete Rückruffunktion zu registrieren, muss der Treiber die Adresse der Funktion in einer WDF_USB_CONTINUOUS_READER_CONFIG Struktur platzieren.
Wenn ein Treiber einen fortlaufenden Reader für ein USB-Pipe erstellt hat, ruft das Framework die EvtUsbTargetPipeReadComplete Rückruffunktion jedes Mal auf, wenn das E/A-Ziel des Treibers erfolgreich eine Leseanforderung abgeschlossen hat. Die Rückruffunktion wird an der IRQL aufgerufen, bei der das E/A-Ziel die Leseanforderung abgeschlossen hat, was normalerweise IRQL = DISPATCH_LEVEL ist, aber nicht höher als DISPATCH_LEVEL. (Wenn das E/A-Ziel eine Anforderung nicht erfolgreich abgeschlossen hat, ruft das Framework die EvtUsbTargetPipeReadersFailed Rückruffunktion auf.)
Um auf den Puffer zuzugreifen, der Daten enthält, die vom Gerät gelesen wurden, kann der Treiber WdfMemoryGetBuffer-aufrufen. Das Framework schreibt die Daten in den Puffer, nach dem Header, der vom HeaderLength Member der WDF_USB_CONTINUOUS_READER_CONFIG-Struktur definiert wird. Beachten Sie, dass der Zeiger, der WdfMemoryGetBuffer zurückgibt, punktiert auf den Anfang der Kopfzeile, aber die EvtUsbTargetPipeReadCompleteNumBytesTransferred Parameter enthält nicht die Länge der Kopfzeile.
Standardmäßig löscht das Framework das Speicherobjekt des Puffers, nachdem die EvtUsbTargetPipeReadComplete Rückruffunktion zurückgegeben wurde. Möglicherweise möchten Sie jedoch, dass das Speicherobjekt gültig bleibt, nachdem die Rückruffunktion zurückgegeben wurde. Sie können z. B. möchten, dass der Treiber das Objekthandle im Kontextbereich des Framework-Pipeobjekts speichert, damit der Treiber den Inhalt des Speicherobjekts verarbeiten kann, nachdem die Rückruffunktion zurückgegeben wurde. Um die Lebensdauer des Speicherobjekts zu verlängern, muss die Rückruffunktion das Handle des Speicherobjekts an WdfObjectReference-übergeben. Anschließend muss der Treiber WdfObjectDereference- aufrufen, damit das Framework das Objekt löschen kann.
Das Framework synchronisiert Aufrufe der EvtUsbTargetPipeReadComplete und EvtUsbTargetPipeReadersFailed Rückruffunktionen gemäß den folgenden Regeln:
- Diese Rückruffunktionen werden nicht gleichzeitig für ein einzelnes USB-Pipe ausgeführt.
- Wenn der Treiber mehrere fortlaufende Reader für mehrere USB-Rohre erstellt, mit mehreren EvtUsbTargetPipeReadComplete und EvtUsbTargetPipeReadersFailed Rückruffunktionen können die mehreren Rückruffunktionen gleichzeitig ausgeführt werden.
- Wenn der Treiber den Standardwert NumPendingReads Wert oder einen Wert angegeben hat, der größer als 1 ist, und wenn eine Leseanforderung abgeschlossen ist, während die EvtUsbTargetPipeReadComplete Rückruffunktion ausgeführt wird, kann das Framework die EvtUsbTargetPipeReadComplete Rückruffunktion erneut aufrufen, bevor die Rückruffunktion zurückgegeben wird.
- Das Framework synchronisiert diese Rückruffunktionen nicht mit anderen Rückruffunktionen.
Der Treiber muss WdfObjectDereference- aufrufen, wenn er die Verwendung des Speicherobjekts abgeschlossen hat. Das Framework kann dann die EvtDestroyCallback Rückruffunktion (sofern angegeben) aufrufen und das Speicherobjekt löschen.
Weitere Informationen zur EvtUsbTargetPipeReadComplete Rückruffunktion und USB-E/A-Zielen finden Sie unter USB-E/A-Ziele.
Anforderungen
Anforderung | Wert |
---|---|
Zielplattform- | Universal |
Minimale KMDF-Version | 1.0 |
Mindest-UMDF-Version | 2.0 |
Header- | wdfusb.h (include Wdf.h) |
IRQL- | <=DISPATCH_LEVEL (Siehe Abschnitt "Hinweise").) |