Freigeben über


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)

Weitere Informationen

EvtIoQueueState

WdfIoQueueDrain

WdfIoQueuePurgeSynchronly