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;
} WDF_INTERRUPT_CONFIG, *PWDF_INTERRUPT_CONFIG;
成员:
Size
WDF_INTERRUPT_CONFG结构体大小,以字节为单位。
SpinLock
Framework自旋锁句柄对象,或者由之前调用WdfSpinLockCreate时获得,或者为NULL。如果这个参数为NULL,Framework会使用内部的自旋锁对象。当驱动的EvtInterruptSynchronize 事件回调函数被调用钱并且驱动调用了WdfInterruptAcquireLock时,Framework会获取自旋锁。
ShareVector
WDF_TRI_STATE类型的值。如果这个值为WdfTrue,中断向量可以共享;如果为WdfFalse,则中断向量不可以共享。如果值是默认的WdfDefault,PnP(管理层)将会使用总线驱动的值。
FloatingSave
Boolean型变量。如果为TRUE,那么系统将会保存设备中断时处理区的浮点真真和MMX状态,相反则不保存。当EvtInterruptIsr 回调函数必须使用浮点指针或者MMX寄存器时,驱动代码必须设为TRUE。更多信息,查看Using Floating Point or MMX in a WDM Driver.
AutomaticSerialization
Boolean型变量。如果为TRUE,Framework会同步执行此中断对象以及此中断之下的父类设备对象的EvtInterruptDpc 回调函数。
EvtInterruptIsr
驱动的EvtInterruptIsr 回调函数指针,不可以为NULL;
EvtInterruptDpc
驱动的EvtInterruptDpc 回调函数指针,可以为NULL;
EvtInterruptEnable
驱动的EvtInterruptEnable 回调函数指针,可以为NULL;
EvtInterruptDisable
驱动的EvtInterruptDisable 回调函数指针,可以为NULL;
备注:
WDF_INTERRUPT_CONFIG结构是WdfInterruptCreate接口的输入参数。
必须调用WDF_INTERRUPT_CONFIG_INIT来初始化WDF_INTERRUPT_CONFIG结构体,并且还要给其他(WDF_INTERRUPT_CONFIG_INIT)没有初始化的成员进行初始化。
如果父类的设备对象synchronization scope的值为WdfSynchronizationScopeNone,设置AutomaticSerialization 为TRUE不会对父类的设备对象有影响。
如果父类的设备对象execution level 设置为WdfExecutionLevelPassive,设置AutomaticSerialization 为TRUE会引起WdfInterruptCreate 失败。
更多关于AutomaticSerialization 和驱动同步回调的内容,可以参考Synchronization Techniques for Framework-Based Drivers.
更多关于Framework层处理中断的内容,参考Handling Hardware Interrupts.
Note:
1.KMDF V1.0及之后版本;
头文件Wdfinterrupt.h。