[适用于 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,则表示框架将同步中断对象的 EvtInterruptDpc 或 EvtInterruptWorkItem 回调函数与中断父对象下其他对象的回调函数的执行。 有关详细信息,请参阅以下“备注”部分。
EvtInterruptIsr
指向驱动程序 EvtInterruptIsr 回调函数的指针。 此指针不能 NULL。
EvtInterruptDpc
指向驱动程序的 EvtInterruptDpc 回调函数的指针,或 NULL。 驱动程序可以提供 EvtInterruptWorkItem 或 EvtInterruptDpc,但不能同时提供这两者。
EvtInterruptEnable
指向驱动程序 EvtInterruptEnable 回调函数的指针,或 NULL。
EvtInterruptDisable
指向驱动程序的 EvtInterruptDisable 回调函数的指针,或 NULL。
EvtInterruptWorkItem
指向驱动程序 EvtInterruptWorkItem 回调函数的指针,或 NULL。 驱动程序可以提供 EvtInterruptWorkItem 或 EvtInterruptDpc,但不能同时提供这两者。 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中所述的行为匹配。
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。 在此第二种情况下,中断对象本身仍然可以是被动的。
有关 自动序列化 和同步驱动程序回调函数的详细信息,请参阅 同步技术 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) |