WDF_INTERRUPT_CONFI
G
结构主要包含了设备中断的配置信息。
语法:
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
)
没有初始化的成员进行初始化。
如果父类的设备对象
s
ynchronization 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。