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) |