Freigeben über


WdfIoQueuePurge-Funktion (wdfio.h)

[Gilt für KMDF und UMDF]

Die WdfIoQueuePurge--Methode bewirkt, dass das Framework die Warteschlange 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
);

Die Parameter

[in] Queue

Ein Handle zu einem Framework-Warteschlangenobjekt.

[in, optional] PurgeComplete

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 WdfIoQueuePurgeaufgerufen 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 die CompletionRoutine Rückruffunktion des Treibers für jede auf. Das Framework versucht auch, alle Anforderungen, die an das Zielgerät übermittelt wurden, abzubrechen (durch Aufrufen IoCancelIrp), die nicht als WDF_REQUEST_SEND_OPTION_IGNORE_TARGET_STATEgekennzeichnet wurden.

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.

Nachdem ein Treiber eine E/A-Warteschlange gelöscht hat, kann sie die Warteschlange neu starten, indem sie WdfIoQueueStartaufruft.

Wenn der Treiber WdfRequestRequeue aufruft, nachdem WdfIoQueuePurgeaufgerufen wurde, kann der erneute Versuch erfolgreich sein, bevor die Bereinigung abgeschlossen ist. In Den Versionen 1.9 und früher von KMDF stürzt das Betriebssystem ab. 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

Im folgenden Codebeispiel wird eine E/A-Warteschlange gelöscht und keine Rückruffunktion aufgerufen, 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
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)

Siehe auch

EvtIoQueueState

WdfIoQueueDrain

WdfIoQueuePurgeSynchronously