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 成员在 1.11 版及更高版本的 KMDF 中可用。

InterruptTranslated

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

WaitLock

框架 wait-lock 对象的句柄,由上一次调用 WdfWaitLockCreate 获取,或 NULL。 如果 WaitLock 为非 NULL,则 PassiveHandling 必须设置为 TRUEWaitLock 成员在 1.11 及更高版本的 KMDF 中可用。 有关 WaitLock 的详细信息,请参阅 备注

PassiveHandling

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

ReportInactiveOnPowerDown

此成员仅适用于 KMDF。

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

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

注意 如果 CanWakeDevice 设置为 TRUEReportInactiveOnPowerDown 设置为 WdfTrue,则当设备转换为低功耗状态时,框架不会报告中断处于非活动状态。
 

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

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

ReportInactiveOnPowerDown 成员在 1.11 版及更高版本的 KMDF 中可用。 它在 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 未初始化的结构成员。

如果 AutomaticSerialization 为 TRUE,则以下规则适用:

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

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

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

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

如果 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