WdfWorkItemFlush 函式 (wdfworkitem.h)

[適用於 KMDF 和 UMDF]

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

語法

void WdfWorkItemFlush(
  [in] WDFWORKITEM WorkItem
);

參數

[in] WorkItem

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

傳回值

備註

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

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

如果尚未呼叫 WdfWorkItemEnqueue ,則呼叫 WdfWorkItemFlush 會立即完成。

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

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

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

範例

下列程式代碼範例是來自 Toaster 範例驅動程式的 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;
}

規格需求

需求
目標平台 Universal
最低 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