WdfIoQueuePurge-Funktion (wdfio.h)
[Gilt für KMDF und UMDF]
Die WdfIoQueuePurge-Methode bewirkt, dass das Framework das Anstehen von E/A-Anforderungen an eine E/A-Warteschlange beendet und nicht verarbeitete Anforderungen abbricht.
Syntax
void WdfIoQueuePurge(
[in] WDFQUEUE Queue,
[in, optional] PFN_WDF_IO_QUEUE_STATE PurgeComplete,
[in, optional] WDFCONTEXT Context
);
Parameter
[in] Queue
Ein Handle für ein Framework-Warteschlangenobjekt.
[in, optional] PurgeComplete
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 WdfIoQueuePurge aufgerufen hat, beendet das Framework das Hinzufügen von E/A-Anforderungen zur angegebenen Warteschlange. Das Framework bricht alle Anforderungen ab, die es nicht an das Zielgerät übermittelt hat, und ruft jeweils die CompletionRoutine-Rückruffunktion des Treibers auf. Das Framework versucht auch, alle Anforderungen an das Zielgerät, die nicht WDF_REQUEST_SEND_OPTION_IGNORE_TARGET_STATE markiert wurden, abzubrechen (durch Aufrufen von IoCancelIrp).
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.
Nachdem ein Treiber eine E/A-Warteschlange gelöscht hat, kann er die Warteschlange neu starten, indem er WdfIoQueueStart aufruft.
Wenn der Treiber WdfRequestRequeue nach dem Aufruf von WdfIoQueuePurge aufruft, kann der Queue-Versuch erfolgreich sein, bevor die Bereinigung abgeschlossen ist. In den Versionen 1.9 und früher von KMDF führt diese Sequenz zum Absturz des Betriebssystems. Dieses Problem wurde in KMDF Version 1.11 und höher behoben.
Weitere Informationen zur WdfIoQueuePurge-Methode finden Sie unter Verwalten von E/A-Warteschlangen.
Beispiele
Das folgende Codebeispiel löscht eine E/A-Warteschlange und ruft keine Rückruffunktion auf, wenn alle Anforderungen, die an den Treiber übermittelt wurden, abgeschlossen oder abgebrochen wurden.
WdfIoQueuePurge(
ReadQueue,
WDF_NO_EVENT_CALLBACK,
WDF_NO_CONTEXT
);
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) |