为 UMDF 1 (中断提供服务)

警告

UMDF 2 是 UMDF 的最新版本,并取代 UMDF 1。 所有新的 UMDF 驱动程序都应使用 UMDF 2 编写。 未向 UMDF 1 添加新功能,并且对较新版本的 UMDF 1 的支持有限Windows 10。 通用Windows驱动程序必须使用 UMDF 2。

有关详细信息,请参阅使用 UMDF 入门。

维护中断包括两个步骤:

  1. 在中断 (例程中快速) 易失性信息,例如注册内容。
  2. 处理工作项例程中保存的易失性信息。

当设备生成硬件中断时,框架将调用驱动程序的中断服务例程 (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(通常是从驱动程序的 IDriverEntry::OnDeviceAdd 回调函数)创建一个或多个 workitem 对象。 然后,驱动程序的 OnInterruptIsr 回调函数可以调用 IWDFWorkItem::Enqueue

驱动程序通常完成 OnInterruptWorkItemOnWorkItem 回调函数中的 I/O 请求。

有关处理中断的 UMDF 驱动程序的示例,请参阅 SpbAccelerometer 示例驱动程序,从 WDK Windows 8开始。