Freigeben über


WdfWorkItemFlush-Funktion (wdfworkitem.h)

[Gilt für KMDF und UMDF]

Die WdfWorkItemFlush--Methode gibt zurück, nachdem eine angegebene Arbeitsaufgabe gewartet wurde.

Syntax

void WdfWorkItemFlush(
  [in] WDFWORKITEM WorkItem
);

Parameter

[in] WorkItem

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

Rückgabewert

Nichts

Bemerkungen

Wenn der Treiber ein ungültiges Objekthandle bereitstellt, tritt eine Fehlerüberprüfung auf.

Wenn WdfWorkItemEnqueue- aufgerufen wurde und ihr Treiber die WdfWorkItemFlush--Methode aufruft, die Methode wird erst zurückgegeben, wenn ein Systemarbeitsthread die angegebene Arbeitsaufgabe aus der Arbeitsaufgabenwarteschlange entfernt und die EvtWorkItem-Funktion des Treibers Rückruffunktion aufgerufen hat, und die EvtWorkItem Rückruffunktion nach der Verarbeitung der Arbeitsaufgabe zurückgegeben wurde. Beachten Sie, dass WdfWorkItemFlush- wartet, bis eine bereits ausgeführte EvtWorkItem Rückruffunktion abgeschlossen ist.

Wenn WdfWorkItemEnqueue nicht aufgerufen wurde, wird das Aufrufen WdfWorkItemFlush sofort abgeschlossen.

Es ist unzulässig, WdfWorkItemFlush- innerhalb des Arbeitsaufgabenrückrufs oder von Code aufzurufen, der auf demselben Systemarbeitsthread ausgeführt wird. Wenn die Treiberüberprüfung aktiviert ist, wechselt WDF in den Debugger, um zu warnen, dass dies zu Deadlock führt. Andererseits ist das Aufrufen WdfObjectDelete für das Arbeitsaufgabenobjekt innerhalb des Rückrufs perfekt.

Die meisten Treiber, die Arbeitsaufgaben verwenden, müssen nicht WdfWorkItemFlush-aufrufen. Ein Treiber ruft möglicherweise WdfWorkItemFlush- auf, wenn er den Abschluss der Arbeitsaufgaben mit der Entfernung eines Remote-E/A-Ziels synchronisieren muss. In diesem Fall kann der Treiber WdfWorkItemFlush- innerhalb seiner EvtIoTargetQueryRemove Rückruffunktion aufrufen.

Weitere Informationen zu Arbeitsaufgaben finden Sie unter Using Framework Work Items.

Beispiele

Das folgende Codebeispiel ist ein 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- Universal
Minimale KMDF-Version 1.0
Mindest-UMDF-Version 2.0
Header- wdfworkitem.h (include Wdf.h)
Library Wdf01000.sys (KMDF); WUDFx02000.dll (UMDF)
IRQL- PASSIVE_LEVEL
DDI-Complianceregeln DriverCreate(kmdf), KmdfIrql(kmdf), KmdfIrql2(kmdf), KmdfIrqlExplicit(kmdf)

Siehe auch

EvtWorkItem-