WdfInterruptQueueDpcForIsr 函数 (wdfinterrupt.h)
[适用于 KMDF 和 UMDF]
WdfInterruptQueueDpcForIsr 方法将框架中断对象的 EvtInterruptDpc 回调函数排队等待执行。
语法
BOOLEAN WdfInterruptQueueDpcForIsr(
[in] WDFINTERRUPT Interrupt
);
参数
[in] Interrupt
框架中断对象的句柄。
返回值
如果 WdfInterruptQueueDpcForIsr 成功将中断对象的 EvtInterruptDpc 回调函数排队,则返回 TRUE。 如果回调函数以前已排队且尚未执行,则方法返回 FALSE 。
如果驱动程序提供无效的对象句柄,则会发生 bug 检查。
注解
驱动程序通常从 EvtInterruptIsr 回调函数中调用 WdfInterruptQueueDpcForIsr。
中断对象的 EvtInterruptDpc 回调函数在执行前只能排队一次。 因此,如果对 WdfInterruptQueueDpcForIsr 的 调用成功,后续调用将返回 FALSE ,直到框架取消 对 EvtInterruptDpc 回调函数的排队。
EvtInterruptDpc 回调将在排队的处理器上运行。 如果驱动程序调用 WdfInterruptQueueDpcForIsr 将另一个 DPC 排队,而 EvtInterruptDpc 回调函数已取消排队或正在运行,则第二个 EvtInterruptDpc 回调甚至可能在第一个回调完成之前运行。
有关在基于框架的驱动程序中处理中断的详细信息,请参阅 处理硬件中断。
在 KMDF 1.11 及更高版本中,驱动程序可以从被动级别 ISR 调用 WdfInterruptQueueDpcForIsr 。 请注意,驱动程序可以注册工作项或 DPC,但不能同时注册两者。
示例
下面的代码示例演示 EvtInterruptIsr 回调函数应如何对 EvtInterruptDpc 回调函数进行排队。
BOOLEAN
MyEvtInterruptIsr(
IN WDFINTERRUPT Interrupt,
IN ULONG MessageID
)
{
BOOLEAN queueDpcSuccess;
//
// Save interrupt information for the
// EvtInterruptDpc function.
//
...
//
// Queue the EvtInterruptDpc function.
//
queueDpcSuccess = WdfInterruptQueueDpcForIsr(Interrupt);
...
}
要求
要求 | 值 |
---|---|
目标平台 | 通用 |
最低 KMDF 版本 | 1.0 |
最低 UMDF 版本 | 2.0 |
标头 | wdfinterrupt.h (包括 Wdf.h) |
Library | Wdf01000.sys (KMDF) ;WUDFx02000.dll (UMDF) |
IRQL | <=DIRQL |
DDI 符合性规则 | DriverCreate (kmdf) |