共用方式為


WdfWorkItemFlush 函式 (wdfworkitem.h)

[適用於 KMDF 和 UMDF]

WdfWorkItemFlush 方法會在服務指定的工作項目之後傳回。

語法

void WdfWorkItemFlush(
  [in] WDFWORKITEM WorkItem
);

參數

[in] WorkItem

從先前呼叫 WdfWorkItemCreate取得之架構工作項目物件的句柄。

傳回值

沒有

言論

如果驅動程式提供無效的物件句柄,就會發生錯誤檢查。

如果已呼叫 WdfWorkItemEnqueue,且您的驅動程式會呼叫 WdfWorkItemFlush 方法, 方法不會傳回,直到系統背景工作線程已從工作專案佇列中移除指定的工作專案,並呼叫驅動程式的 EvtWorkItem 回呼函式,而且處理工作專案之後,EvtWorkItem 回呼函式會接著傳回。 請注意,WdfWorkItemFlush 會等候已執行 EvtWorkItem 回呼函式完成。

如果未呼叫 WdfWorkItemEnqueue,請立即呼叫 WdfWorkItemFlush 完成。

從工作專案回呼內呼叫 WdfWorkItemFlush,或從呼叫相同系統背景工作線程的程式代碼呼叫,這是非法的。 事實上,如果啟用驅動程序驗證器,WDF 會中斷調試程式,警告這樣做會導致死結。 另一方面,從回呼內呼叫工作項目物件的 WdfObjectDelete 完全沒問題。

大部分使用工作項目的驅動程式不需要呼叫 WdfWorkItemFlush。 如果驅動程式必須同步處理工作專案的完成與移除遠端 I/O 目標,驅動程式可能會呼叫 WdfWorkItemFlush。 在此情況下,驅動程式可以從其 EvtIoTargetQueryRemove 回呼函式內呼叫 WdfWorkItemFlush

如需工作項目的詳細資訊,請參閱使用 Framework 工作專案

例子

下列程式代碼範例是來自 烤箱 範例驅動程式的 EvtIoTargetQueryRemove 回呼函式。

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;
}

要求

要求 價值
目標平臺 普遍
最低 KMDF 版本 1.0
最低 UMDF 版本 2.0
標頭 wdfworkitem.h (包括 Wdf.h)
連結庫 Wdf01000.sys (KMDF):WUDFx02000.dll (UMDF)
IRQL PASSIVE_LEVEL
DDI 合規性規則 DriverCreate(kmdf)KmdfIrql(kmdf)KmdfIrql2(kmdf),KmdfIrqlExplicit(kmdf)

另請參閱

EvtWorkItem