維護插斷 (UMDF 1)
警告
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 消費者入門。
維護中斷包含兩個步驟:
- 將動態資訊儲存 (,例如在插斷服務常式中快速註冊內容) 。
- 處理工作專案常式中儲存的動態資訊。
當裝置產生硬體中斷時,架構會呼叫驅動程式的插斷服務常式 (ISR) ,此架構型驅動程式會實作為 OnInterruptIsr 回呼函式。
在PASSIVE_LEVEL執行的 OnInterruptIsr 回呼函式必須快速儲存中斷資訊,例如註冊內容、將工作專案排入佇列以進一步處理資料,並從 ISR 傳回,以便在共用中斷線時允許維護其他中斷。 由於 UMDF 驅動程式的 ISR 會在PASSIVE_LEVEL執行,因此不建議處理 PCI 行型中斷。 這些中斷通常會在多個裝置之間共用,其中有些可能不接受 ISR 延遲。 不過,您可以在 UMDF 驅動程式中處理 PCI MSI 中斷。 這些中斷具有邊緣語意,而且不會共用。
一般而言, OnInterruptIsr 回呼函式會排程工作專案,稍後處理儲存的資訊。 架構型驅動程式會將 workitem 常式實作為 OnInterruptWorkItem 回 呼函式。
大部分的驅動程式都會針對每種中斷類型使用單一 OnInterruptWorkItem 回呼函式。 若要排程OnInterruptWorkItem回呼函式的執行,驅動程式必須從OnInterruptIsr回呼函式內呼叫IWDFInterrupt::QueueWorkItemForIsr。
如果您的驅動程式為每個裝置建立多個架構佇列物件,您可以考慮針對每個佇列使用不同的 workitem 物件和 OnWorkItem 回呼函式。 若要排程 OnWorkItem 回呼函式的執行,驅動程式必須先呼叫 IWdfDevice3::CreateWorkItem來建立一或多個 workitem 物件,通常是從驅動程式的 IDriverEntry::OnDeviceAdd 回呼函式。 然後驅動程式的 OnInterruptIsr 回呼函式可以呼叫 IWDFWorkItem::Enqueue。
驅動程式通常會在其 OnInterruptWorkItem 或 OnWorkItem 回呼函式中完成 I/O 要求。
如需處理中斷的 UMDF 驅動程式範例,請參閱SpbAccelerometer範例驅動程式,可從 Windows 8 WDK 開始取得。