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,则指示框架会将中断对象的 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 成员在 1.11 版及更高版本的 KMDF 中可用。
InterruptTranslated
指向 CM_PARTIAL_RESOURCE_DESCRIPTOR 结构的指针,该结构描述系统分配给中断的 已翻译资源 。 仅当在 EvtDevicePrepareHardware 回调中创建中断时,才使用此成员。 InterruptTranslated 成员在 1.11 版及更高版本的 KMDF 中可用。
WaitLock
框架 wait-lock 对象的句柄,由上一次调用 WdfWaitLockCreate 获取,或 NULL。 如果 WaitLock 为非 NULL,则 PassiveHandling 必须设置为 TRUE。 WaitLock 成员在 1.11 及更高版本的 KMDF 中可用。 有关 WaitLock 的详细信息,请参阅 备注。
PassiveHandling
对于设备的 IRQL (DIRQL) 的中断处理,设置为 FALSE 。 对于被动级别中断处理,设置为 TRUE 。 PassiveHandling 成员在 1.11 版及更高版本的 KMDF 中可用。 从 UMDF 版本 2.0 开始, WDF_INTERRUPT_CONFIG_INIT 始终将此成员设置为 TRUE。
ReportInactiveOnPowerDown
此成员仅适用于 KMDF。
一个WDF_TRI_STATE类型的值,仅当驱动程序未调用 WdfDeviceInitSetPowerNotPageable 时才适用。 此成员可以具有以下值之一:
WdfTrue - 当设备转换为低功率 (Dx) 状态时,KMDF 报告中断处于非活动状态。 在Windows 8之前的操作系统中,框架的行为与为 WdfFalse 描述的行为匹配。
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 。 在此第二种情况下,中断对象本身仍可以是被动的。
有关 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) |