WdfIoQueueDrain-Funktion (wdfio.h)
[Gilt für KMDF und UMDF]
Die WdfIoQueueDrain--Methode bewirkt, dass das Framework die Warteschlange von E/A-Anforderungen an eine E/A-Warteschlange beendet und gleichzeitig bereits in die Warteschlange eingereihte Anforderungen zugestellt und verarbeitet werden kann.
Syntax
void WdfIoQueueDrain(
[in] WDFQUEUE Queue,
[in, optional] PFN_WDF_IO_QUEUE_STATE DrainComplete,
[in, optional] WDFCONTEXT Context
);
Die Parameter
[in] Queue
Ein Handle zu einem Framework-Warteschlangenobjekt.
[in, optional] DrainComplete
Ein Zeiger auf eine vom Treiber bereitgestellte EvtIoQueueState Rückruffunktion. Dieser Parameter ist optional und kann NULL-werden.
[in, optional] Context
Ein nicht typisiertes Zeiger auf vom Treiber bereitgestellte Kontextinformationen, die das Framework an die EvtIoQueueState Rückruffunktion übergibt. Dieser Parameter ist optional und kann NULL-werden.
Rückgabewert
Nichts
Bemerkungen
Wenn der Treiber ein ungültiges Objekthandle bereitstellt, tritt eine Fehlerüberprüfung auf.
Nachdem ein Treiber WdfIoQueueDrainaufgerufen hat, beendet das Framework das Hinzufügen von E/A-Anforderungen zur angegebenen Warteschlange. Wenn das Framework zusätzliche Anforderungen für die Warteschlange empfängt, wird es mit einem Abschlussstatuswert von STATUS_INVALID_DEVICE_STATE abgeschlossen.
Wenn der Treiber eine EvtIoQueueState Rückruffunktion bereitstellt, ruft das Framework sie auf, nachdem alle Anforderungen, die an den Treiber übermittelt wurden, abgeschlossen oder abgebrochen wurden. Sie können die IRQL ändern, bei der der Rückruf ausgeführt wird, indem Sie ExecutionLevel- in WDF_OBJECT_ATTRIBUTES zum Zeitpunkt der Warteschlangenerstellung angeben. Weitere Informationen finden Sie im Abschnitt "Hinweise" vonEVT_WDF_IO_QUEUE_STATE.
Der Treiber sollte keine andere Methode aufrufen, die den Warteschlangenzustand ändert, z. B. WdfIoQueuePurge oder WdfIoQueueStart, bevor das Framework EvtIoQueueStateaufgerufen hat.
Wenn ein Treiber NULL- für DrainComplete-angibt, kann der Treiber einen anderen Zustandsänderungsvorgang aufrufen, bevor Anforderungen abgeschlossen werden.
Als bewährte Methode sollten Sie nur WdfIoQueueDrain aufrufen, wenn Sie sicher sind, dass die ausstehenden E/A-Anforderungen der Warteschlange zeitnah abgeschlossen werden. Verwenden Sie andernfalls WdfIoQueuePurge. Weitere Informationen finden Sie unter Verwalten von E/A-Warteschlangen.
Nachdem ein Treiber eine E/A-Warteschlange entladen hat, kann sie die Warteschlange neu starten, indem sie WdfIoQueueStartaufruft.
Beispiele
Das folgende Codebeispiel entwässert eine E/A-Warteschlange und ruft die EvtIoQueueDrainComplete Funktion auf, wenn alle Anforderungen, die an den Treiber übermittelt wurden, abgeschlossen oder abgebrochen wurden.
WdfIoQueueDrain(
Queue,
EvtIoQueueDrainComplete,
(WDFCONTEXT) myQueueContext
);
Anforderungen
Anforderung | Wert |
---|---|
Zielplattform | universell |
Minimale KMDF-Version | 1.0 |
Mindest-UMDF-Version | 2.0 |
Kopfzeile | wdfio.h (einschließen Wdf.h) |
Bibliothek | Wdf01000.sys (KMDF); WUDFx02000.dll (UMDF) |
IRQL | <= DISPATCH_LEVEL |
DDI-Complianceregeln | ChangeQueueState(kmdf), DriverCreate(kmdf), EvtSurpriseRemoveNoSuspendQueue(kmdf), KmdfIrql (kmdf), KmdfIrql2(kmdf), KmdfIrqlExplicit(kmdf), NoCancelFromEvtSurpriseRemove(kmdf) |