Freigeben über


WdfWorkItemFlush-Funktion (wdfworkitem.h)

[Gilt für KMDF und UMDF]

Die WdfWorkItemFlush-Methode gibt zurück, nachdem ein angegebenes Arbeitselement gewartet wurde.

Syntax

void WdfWorkItemFlush(
  [in] WDFWORKITEM WorkItem
);

Parameter

[in] WorkItem

Ein Handle für ein Framework-Arbeitselementobjekt, das aus einem vorherigen Aufruf von WdfWorkItemCreate abgerufen wird.

Rückgabewert

Keine

Bemerkungen

Eine Fehlerüberprüfung tritt auf, wenn der Treiber ein ungültiges Objekthandle bereitstellt.

Wenn WdfWorkItemEnqueue aufgerufen wurde und Ihr Treiber die WdfWorkItemFlush-Methode aufruft, wird die Methode erst zurückgegeben, wenn ein Systemarbeitsthread das angegebene Arbeitselement aus der Arbeitselementwarteschlange entfernt und die EvtWorkItem-Rückruffunktion des Treibers aufgerufen hat, und die EvtWorkItem-Rückruffunktion nach der Verarbeitung des Arbeitselements zurückgegeben wurde. Beachten Sie, dass WdfWorkItemFlush auf den Abschluss einer bereits ausgeführten EvtWorkItem-Rückruffunktion wartet.

Wenn WdfWorkItemEnqueue nicht aufgerufen wurde, wird der Aufruf von WdfWorkItemFlush sofort abgeschlossen.

Es ist unzulässig, WdfWorkItemFlush innerhalb des Arbeitselementrückrufs oder aus dem Code aufzurufen, der im selben Systemarbeitsthread ausgeführt wird. Wenn die Treiberüberprüfung aktiviert ist, bricht WDF in den Debugger ein, um zu warnen, dass dies zu einem Deadlock führt. Andererseits ist das Aufrufen von WdfObjectDelete für das Arbeitselementobjekt innerhalb des Rückrufs vollkommen in Ordnung.

Die meisten Treiber, die Arbeitselemente verwenden, müssen WdfWorkItemFlush nicht aufrufen. Ein Treiber kann WdfWorkItemFlush aufrufen, wenn er den Abschluss von Arbeitselementen mit dem Entfernen eines Remote-E/A-Ziels synchronisieren muss. In diesem Fall kann der Treiber WdfWorkItemFlush aus seiner EvtIoTargetQueryRemove-Rückruffunktion aufrufen.

Weitere Informationen zu Arbeitselementen finden Sie unter Verwenden von Framework-Arbeitselementen.

Beispiele

Das folgende Codebeispiel ist eine EvtIoTargetQueryRemove-Rückruffunktion aus dem Toaster-Beispieltreiber .

NTSTATUS
ToastMon_EvtIoTargetQueryRemove(
    WDFIOTARGET IoTarget
)
{
    PTARGET_DEVICE_INFO  targetDeviceInfo = NULL;
    //
    // Get the I/O target object's context.
    //
    targetDeviceInfo = GetTargetDeviceInfo(IoTarget);
    //
    // Ensure that the I/O target's work item
    // has been processed before closing the target.
    //
    WdfWorkItemFlush(targetDeviceInfo->WorkItem);
    WdfIoTargetCloseForQueryRemove(IoTarget);

    return STATUS_SUCCESS;
}

Anforderungen

Anforderung Wert
Zielplattform Universell
KMDF-Mindestversion 1.0
UMDF-Mindestversion 2.0
Kopfzeile wdfworkitem.h (include Wdf.h)
Bibliothek Wdf01000.sys (KMDF); WUDFx02000.dll (UMDF)
IRQL PASSIVE_LEVEL
DDI-Complianceregeln DriverCreate(kmdf), KmdfIrql(kmdf), KmdfIrql2(kmdf), KmdfIrqlExplicit(kmdf)

Weitere Informationen

EvtWorkItem