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 时,系统会释放中断锁。
如果驱动程序必须执行几行代码而不被抢占且禁用中断服务,则可以使用 AcquireInterruptLock 和 ReleaseInterruptLock 。
在框架调用驱动程序的 OnInterruptEnable 回调函数之前或框架调用驱动程序的 OnInterruptDisable 回调函数之后,驱动程序无法调用 AcquireInterruptLock。
驱动程序调用 AcquireInterruptLock 后,在调用 ReleaseInterruptLock 之前,它不得为同一中断对象再次调用 方法。
在任意线程(如 I/O 队列回调方法)中运行时,驱动程序必须调用 IWDFInterrupt::TryToAcquireInterruptLock ,而不是 IWDFInterrupt::AcquireInterruptLock。 例如,驱动程序从 IQueueCallbackRead::OnRead 调用 IWDFInterrupt::TryToAcquireInterruptLock。
这样做可以避免死锁的可能性,如以下方案中所述。
- 为了确定其设备是否中断,UMDF 在保持中断锁的情况下,从其 ISR 内部将 I/O 发送到其总线。
- 总线驱动程序在接收上述请求的同一线程中完成第二个请求。
- 第二个请求的完成例程将请求发送到 UMDF 驱动程序。
- UMDF 驱动程序的 I/O 调度例程调用 IWDFInterrupt::AcquireInterruptLock,然后死锁尝试获取中断锁。
有关手动中断锁定的详细信息,请参阅 同步中断代码。
有关在 UMDF 驱动程序中处理中断的详细信息,请参阅 访问硬件和处理中断。
要求
要求 | 值 |
---|---|
结束支持 | 在 UMDF 2.0 及更高版本中不可用。 |
目标平台 | 桌面 |
最低 UMDF 版本 | 1.11 |
标头 | wudfddi.h |
DLL | WUDFx.dll |