WdfIoQueueDrain-Funktion (wdfio.h)
[Gilt für KMDF und UMDF]
Die WdfIoQueueDrain-Methode bewirkt, dass das Framework das Anstehen von E/A-Anforderungen an eine E/A-Warteschlange beendet, während bereits in der Warteschlange befindliche Anforderungen übermittelt und verarbeitet werden können.
Syntax
void WdfIoQueueDrain(
[in] WDFQUEUE Queue,
[in, optional] PFN_WDF_IO_QUEUE_STATE DrainComplete,
[in, optional] WDFCONTEXT Context
);
Parameter
[in] Queue
Ein Handle für ein Framework-Warteschlangenobjekt.
[in, optional] DrainComplete
Ein Zeiger auf eine vom Treiber bereitgestellte EvtIoQueueState-Rückruffunktion . Dieser Parameter ist optional und kann NULL sein.
[in, optional] Context
Ein nicht typisierter Zeiger auf vom Treiber bereitgestellte Kontextinformationen, die das Framework an die Rückruffunktion EvtIoQueueState übergibt. Dieser Parameter ist optional und kann NULL sein.
Rückgabewert
Keine
Bemerkungen
Eine Fehlerüberprüfung tritt auf, wenn der Treiber ein ungültiges Objekthandle bereitstellt.
Nachdem ein Treiber WdfIoQueueDrain aufgerufen 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, schließt es diese mit einer Vervollständigung status Wert STATUS_INVALID_DEVICE_STATE ab.
Wenn der Treiber eine EvtIoQueueState-Rückruffunktion bereitstellt, ruft das Framework diese 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 zur Erstellungszeit der Warteschlange angeben. Weitere Informationen finden Sie im Abschnitt Hinweise vonEVT_WDF_IO_QUEUE_STATE.
Der Treiber sollte keine andere Methode aufrufen, die den Warteschlangenstatus ändert, z. B . WdfIoQueuePurge oder WdfIoQueueStart, bevor das Framework EvtIoQueueState aufgerufen 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 WdfIoQueueDrain nur aufrufen, wenn Sie sicher sind, dass die ausstehenden E/A-Anforderungen der Warteschlange rechtzeitig abgeschlossen werden. Andernfalls verwenden Sie WdfIoQueuePurge. Weitere Informationen finden Sie unter Verwalten von E/A-Warteschlangen.
Nachdem ein Treiber eine E/A-Warteschlange entladen hat, kann er die Warteschlange neu starten, indem er WdfIoQueueStart aufruft.
Beispiele
Im folgenden Codebeispiel wird eine E/A-Warteschlange entladen und die EvtIoQueueDrainComplete-Funktion eines Treibers aufgerufen, wenn alle Anforderungen, die an den Treiber übermittelt wurden, abgeschlossen oder abgebrochen wurden.
WdfIoQueueDrain(
Queue,
EvtIoQueueDrainComplete,
(WDFCONTEXT) myQueueContext
);
Anforderungen
Anforderung | Wert |
---|---|
Zielplattform | Universell |
KMDF-Mindestversion | 1.0 |
UMDF-Mindestversion | 2.0 |
Kopfzeile | wdfio.h (einschließen von 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) |