使用工作專案

警告

UMDF 2 是最新版的 UMDF,並取代 UMDF 1。 所有新的 UMDF 驅動程式都應該使用 UMDF 2 來撰寫。 未將新功能新增至 UMDF 1,而且較新版本的 Windows 10 上不支援 UMDF 1。 通用 Windows 驅動程式必須使用 UMDF 2。

封存的 UMDF 1 範例可在Windows 11 22H2 版 - 2022 年 5 月驅動程式範例更新中找到。

如需詳細資訊,請參閱使用 UMDF 消費者入門

工作專案是驅動程式在 OnWorkItem 事件回呼函式中執行的工作。 這些函式會以非同步方式執行。

如果 OnInterruptIsr 必須執行額外的處理,而不順延強制中斷服務要求, (ISR) ,因為中斷線可能會由多個裝置共用,則 UMDF 驅動程式通常會使用工作專案。

一般而言,驅動程式的 OnInterruptIsr 回呼函式會建立工作專案物件,並將它新增至系統的工作專案佇列。 接著,執行緒緩衝處理執行緒會取消佇列物件,並呼叫工作專案的 OnWorkItem 回呼函式。

設定工作專案

若要設定工作專案,您的驅動程式必須:

  1. 建立工作專案。

    您的驅動程式會呼叫 IWDFDevice3::CreateWorkItem 來建立工作專案物件,並識別將處理工作專案的 OnWorkItem 回呼函式。

  2. 儲存工作專案的相關資訊。

    一般而言,驅動程式會使用工作專案物件的內容記憶體來儲存 OnWorkItem 回呼函式應該執行之工作的相關資訊。 呼叫 OnWorkItem 回呼函式時,可以藉由存取此內容記憶體來擷取資訊。 如需如何配置和存取內容記憶體的資訊,請參閱IWDFObject::AssignCoNtext

  3. 將工作專案新增至系統的工作專案佇列。

    您的驅動程式會呼叫 IWDFWorkItem::Enqueue,這會將驅動程式的工作專案新增至工作專案佇列。

當您的驅動程式呼叫 IWDFDevice3::CreateWorkItem時,它可能會選擇性地提供父物件 (例如裝置物件或佇列物件) 。 當系統刪除該物件時,也會刪除與 物件相關聯的任何現有工作專案。

使用 WorkItem 回呼函式

工作專案新增至工作專案佇列之後,它會保留在佇列中,直到系統背景工作執行緒變成可用為止。 系統背景工作執行緒會從佇列中移除工作專案,然後呼叫驅動程式的 OnWorkItem 回呼函式,並將工作專案物件當做輸入傳遞。

一般而言,OnWorkItem 回呼函式會執行下列步驟:

  1. 藉由存取工作專案物件的內容記憶體,以取得工作專案的相關資訊。
  2. 執行您指定的工作。 如有必要,回呼函式可以呼叫 IWDFWorkItem::GetParentObject 來判斷工作專案的父物件。
  3. 如果驅動程式會重新佇列工作專案,表示工作專案的控制碼現在可供重複使用。

有幾個驅動程式可能需要呼叫 IWDFWorkItem::Flush ,從工作專案佇列排清其工作專案。 如果驅動程式呼叫 Flush 方法,方法不會傳回,直到背景工作執行緒從工作專案佇列中移除指定的工作專案,並呼叫驅動程式的 OnWorkItem 回呼函式,而 OnWorkItem 回呼函式會在處理工作專案之後傳回。