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