WDF_INTERRUPT_CONFIG结构 (wdfinterrupt.h)

[适用于 KMDF 和 UMDF]

WDF_INTERRUPT_CONFIG 结构包含设备中断的配置信息。

语法

typedef struct _WDF_INTERRUPT_CONFIG {
  ULONG                           Size;
  WDFSPINLOCK                     SpinLock;
  WDF_TRI_STATE                   ShareVector;
  BOOLEAN                         FloatingSave;
  BOOLEAN                         AutomaticSerialization;
  PFN_WDF_INTERRUPT_ISR           EvtInterruptIsr;
  PFN_WDF_INTERRUPT_DPC           EvtInterruptDpc;
  PFN_WDF_INTERRUPT_ENABLE        EvtInterruptEnable;
  PFN_WDF_INTERRUPT_DISABLE       EvtInterruptDisable;
  PFN_WDF_INTERRUPT_WORKITEM      EvtInterruptWorkItem;
  PCM_PARTIAL_RESOURCE_DESCRIPTOR InterruptRaw;
  PCM_PARTIAL_RESOURCE_DESCRIPTOR InterruptTranslated;
  WDFWAITLOCK                     WaitLock;
  BOOLEAN                         PassiveHandling;
  WDF_TRI_STATE                   ReportInactiveOnPowerDown;
  BOOLEAN                         CanWakeDevice;
} WDF_INTERRUPT_CONFIG, *PWDF_INTERRUPT_CONFIG;

成员

Size

此结构的大小(以字节为单位)。

SpinLock

框架旋转锁对象的句柄,由先前调用 WdfSpinLockCreate获取,或 NULL。 如果此参数 NULL,则框架使用内部旋转锁对象。 框架在调用驱动程序的 EvtInterruptSynchronize 事件回调函数以及驱动程序调用 WdfInterruptAcquireLock之前获取旋转锁。 对于被动级中断处理,请设置为 NULL。

从 UMDF 版本 2.0 开始,UMDF 始终使用被动级中断处理。 在这种情况下,将此成员设置为 NULL。

ShareVector

WDF_TRI_STATE类型化值。 如果此值 WdfTrue,则可以共享中断向量。 如果值 WdfFalse,则无法共享中断向量。 如果值 WdfDefault,则 PnP 管理器使用总线驱动程序的值。

FloatingSave

一个布尔值,如果 TRUE,则表示系统将在设备中断时保存处理器的浮点和 MMX 状态。 如果 FALSE,则系统不会保存浮点和 MMX 状态。 仅当驱动程序 EvtInterruptIsr 回调函数必须使用浮点或 MMX 寄存器时,驱动程序才应将此值设置为 TRUE。 有关保存浮点和 MMX 状态的详细信息,请参阅 在 WDM 驱动程序中使用浮点或 MMX。

从 UMDF 版本 2.0 开始,将忽略此成员。

AutomaticSerialization

一个布尔值,如果 TRUE,则表示框架将同步中断对象的 EvtInterruptDpcEvtInterruptWorkItem 回调函数与中断父对象下其他对象的回调函数的执行。 有关详细信息,请参阅以下“备注”部分。

EvtInterruptIsr

指向驱动程序 EvtInterruptIsr 回调函数的指针。 此指针不能 NULL

EvtInterruptDpc

指向驱动程序的 EvtInterruptDpc 回调函数的指针,或 NULL。 驱动程序可以提供 EvtInterruptWorkItemEvtInterruptDpc,但不能同时提供这两者。

EvtInterruptEnable

指向驱动程序 EvtInterruptEnable 回调函数的指针,或 NULL

EvtInterruptDisable

指向驱动程序的 EvtInterruptDisable 回调函数的指针,或 NULL

EvtInterruptWorkItem

指向驱动程序 EvtInterruptWorkItem 回调函数的指针,或 NULL。 驱动程序可以提供 EvtInterruptWorkItemEvtInterruptDpc,但不能同时提供这两者。 EvtInterruptWorkItem 成员在 KMDF 版本 1.11 及更高版本中可用。

InterruptRaw

指向描述系统分配给中断 原始资源的 CM_PARTIAL_RESOURCE_DESCRIPTOR 结构的指针。 仅当在 EvtDevicePrepareHardware 回调中创建中断时,才使用此成员。 InterruptRaw 成员在 KMDF 版本 1.11 及更高版本中可用。

InterruptTranslated

指向 CM_PARTIAL_RESOURCE_DESCRIPTOR 结构的指针,该结构描述系统分配给中断 转换的资源。 仅当在 EvtDevicePrepareHardware 回调中创建中断时,才使用此成员。 InterruptTranslated 成员在 KMDF 版本 1.11 及更高版本中可用。

WaitLock

框架等待锁对象的句柄,由先前调用 WdfWaitLockCreate获取,或 NULL。 如果 WaitLock 为非NULL,则必须将 PassiveHandling 设置为 true WaitLock 成员在 KMDF 版本 1.11 及更高版本中可用。 有关 WaitLock的详细信息,请参阅 备注

PassiveHandling

设置为 FALSE,以便在设备的 IRQL(DIRQL)中中断处理。 设置为 TRUE,用于被动级别中断处理。 PassiveHandling 成员在 KMDF 版本 1.11 及更高版本中可用。 从 UMDF 版本 2.0 开始,WDF_INTERRUPT_CONFIG_INIT 始终将此成员设置为 TRUE。

ReportInactiveOnPowerDown

此成员仅适用于 KMDF。

仅当驱动程序未调用 WdfDeviceInitSetPowerNotPageable时,才应用的 WDF_TRI_STATE类型值。 此成员可以具有以下值之一:

WdfTrue - KMDF 报告设备转换为低功率(Dx)状态时中断处于非活动状态。 在 Windows 8 之前的作系统中,框架的行为与 WdfFalse中所述的行为匹配。

注意 如果 CanWakeDevice设置为 true,并且 ReportInactiveOnPowerDown 设置为 WdfTrue,则当设备转换为低功率状态时,框架不会报告中断非活动状态。
 

WdfFalse - 当设备转换为低功率(Dx)状态时,KMDF 断开中断。

WdfDefault - 基于 ARM 的平台,框架的行为与为 WdfTrue描述的行为匹配。 在其他平台上,框架的行为与为 WdfFalse描述的行为匹配。

ReportInactiveOnPowerDown 成员在 KMDF 版本 1.11 及更高版本中可用。 它在 UMDF 版本 2.0 中不可用。

有关报告中断非活动的详细信息,请参阅 使 ISR 处于活动状态或非活动

CanWakeDevice

一个布尔值,该值指示是否使用中断从低功率状态唤醒设备。 如果 FALSE,则中断不用于唤醒设备。 如果 TRUE,则中断用于唤醒设备。 从 KMDF 版本 1.13 和 UMDF 版本 2.0 开始,CanWakeDevice 成员可用。

注解

WDF_INTERRUPT_CONFIG 结构用作 WdfInterruptCreate的输入。

若要初始化 WDF_INTERRUPT_CONFIG 结构,驱动程序必须先调用 WDF_INTERRUPT_CONFIG_INIT,然后填写 WDF_INTERRUPT_CONFIG_INIT 未初始化的结构成员。

如果 自动序列化 为 TRUE,则适用以下规则:

  • 如果中断的父对象的执行级别 WdfExecutionLevelPassive,驱动程序可以在此配置结构中提供 EvtInterruptWorkItem,但不应在此配置结构中提供 EvtInterruptDpc
  • 如果中断的父对象的执行级别 WdfExecutionLevelDispatch,驱动程序可以 EvtInterruptDpc提供,但不应在此配置结构中提供 EvtInterruptWorkItem。 在此第二种情况下,中断对象本身仍然可以是被动的。
驱动程序可以使用此结构的 WaitLock 成员为 被动级中断处理提供自己的中断锁。 如果驱动程序将 PassiveHandling 设置为 TRUE,但不提供 WaitLock,则框架会在内部创建中断锁。 框架在调用以下回调函数之前获取被动级中断锁:
EvtInterruptEnable
EvtInterruptDisable
EvtInterruptSynchronize
EvtInterruptIsr

有关 自动序列化 和同步驱动程序回调函数的详细信息,请参阅 同步技术 Framework-Based 驱动程序

默认情况下,KMDF 函数驱动程序是可分页的。 驱动程序调用 WdfDeviceInitSetPowerNotPageable 以指定它是不可分页的。

在低于 1.11 的 KMDF 版本中,当设备转换为低功率(Dx)状态时,框架始终断开电源可分页驱动程序的中断。 从 KMDF 版本 1.11 开始,可以通过设置此结构的 ReportInactiveOnPowerDown 成员来更改此行为。 对于非电源可分页驱动程序,当 Dx 状态转换发生时,中断将保持连接,而不考虑在 reportInactiveOnPowerDown中设置的值。

如果 UMDF 驱动程序 ReportInactiveOnPowerDown设置,则忽略该值。

有关在基于框架的驱动程序中处理中断的详细信息,请参阅 处理硬件中断

驱动程序可以使用此结构的 CanWakeDevice 成员来创建一个中断,该中断可用于将设备从低功率 Dx 状态带回 D0。 驱动程序的 EvtInterruptIsr 回调例程计划在设备进入 D0 后在 IRQL = PASSIVE_LEVEL运行。

有关详细信息,请参阅 使用中断唤醒设备

要求

要求 价值
最低 KMDF 版本 1.0
最低 UMDF 版本 2.0
标头 wdfinterrupt.h (包括 Wdf.h)

另请参阅

EvtInterruptDisable

EvtInterruptDpc

EvtInterruptEnable

EvtInterruptIsr

WDF_INTERRUPT_CONFIG_INIT

WDF_TRI_STATE

WdfDeviceInitSetPowerNotPageable

WdfDeviceInitSetPowerPageable

WdfInterruptCreate

WdfInterruptQueueDpcForIsr

WdfSpinLockCreate