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)

另请参阅

EvtInterruptDpc

EvtInterruptIsr

WdfInterruptCreate