IWDFInterrupt::AcquireInterruptLock 方法(wudfddi.h)

[警告: UMDF 2 是最新版本的 UMDF,取代了 UMDF 1。 所有新的 UMDF 驱动程序都应使用 UMDF 2 编写。 没有将新功能添加到 UMDF 1,并且对较新版本的 Windows 10 上的 UMDF 1 的支持有限。 通用 Windows 驱动程序必须使用 UMDF 2。 有关详细信息,请参阅 UMDF入门 。]

AcquireInterruptLock 方法开始执行代码序列,同时保存中断对象的锁。

语法

void AcquireInterruptLock();

返回值

没有

言论

当驱动程序调用 AcquireInterruptLock时,系统将获取框架的中断锁。

当驱动程序 ReleaseInterruptLock调用时,系统将释放中断锁。

如果驱动程序必须执行几行代码而不被抢占且中断服务已禁用,则可以使用 AcquireInterruptLockReleaseInterruptLock

在框架调用驱动程序的 OnInterruptEnable 回调函数或框架调用驱动程序的 onInterruptDisable 回调函数之后,驱动程序无法调用AcquireInterruptLock

驱动程序调用 AcquireInterruptLock后,在调用 releaseInterruptLock 之前,它不得对同一中断对象再次调用该方法。

在任意线程(如 I/O 队列回调方法)中运行时,驱动程序必须调用 IWDFInterrupt::TryToAcquireInterruptLock 而不是 IWDFInterrupt::AcquireInterruptLock。 例如,驱动程序从 IQueueCallbackRead::OnRead调用 IWDFInterrupt::TryToAcquireInterruptLock

这样做可以避免死锁的可能性,如以下方案中所述。

  1. 为了确定其设备是否中断,UMDF 从其 ISR 内部将 I/O 发送到其总线,并保留中断锁。
  2. 总线驱动程序在收到上述请求的同一线程中完成第二个请求。
  3. 第二个请求的完成例程将请求发送到 UMDF 驱动程序。
  4. UMDF 驱动程序的 I/O 调度例程调用 IWDFInterrupt::AcquireInterruptLock,然后死锁尝试获取中断锁。
驱动程序不得以递归方式尝试获取锁。 如果连接到调试器,则框架在此方案中引入了断点。

有关手动中断锁定的详细信息,请参阅 同步中断代码

有关在 UMDF 驱动程序中处理中断的详细信息,请参阅 访问硬件和处理中断

要求

要求 价值
终止支持 在 UMDF 2.0 及更高版本中不可用。
目标平台 桌面
最低 UMDF 版本 1.11
标头 wudfddi.h
DLL WUDFx.dll

另请参阅

IWDFInterrupt

IWDFInterrupt::ReleaseInterruptLock

WdfInterruptAcquireLock