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)
图书馆 Wdf01000.sys(KMDF):WUDFx02000.dll (UMDF)
IRQL <=DIRQL
DDI 符合性规则 DriverCreate(kmdf)

另请参阅

EvtInterruptDpc

EvtInterruptIsr

WdfInterruptCreate