KMDF:kernel mode编程模型,支持filter, function, bus driver的开发。
framework本身提供了可重入的库函数
driver在运行时动态绑定这些库函数,所以可以提供framework版本支持。
可开发的驱动:
- PnP device的function driver
- PnP device的filter driver
- PnP device stack的Bus driver
- miniport driver:NDIS-WDM, NDIS protocol, smartcard
- legacy devices的none-PnP drivers:不属于PnP stack-similar to legacy Windows NT 4.0-style drivers的一部分
driver在构建设备栈时调用framework方法告知framework 驱动类型。
function,filter,bus driver实现了不同回调函数集合。
bus driver通常支持枚举子bus driver的回调函数
function driver通常支持管理I/O 请求及设备power state的回调函数。
KMDF DDI支持所有类别的驱动,而一些DDI主要关注的是function,filter,bus driver
KMDF在不同类型驱动上有不同的默认处理,尤其是对I/O请求的默认处理。
filter driver不处理request时,framework自动把请求传递给栈的下一层驱动
function driver不处理request时,framework自动把请求置为失败
KMDF object
KMDF驱动实现了callback functions,而不是callback objects(UMDF)
KMDF的framework object创建:
framework创建object并且把object handle传给driver:framework接收到I/O request时,它创建I/O request object并把handle传给driver的EvtIoXxx callback routine
driver通过调用framework object创建函数创建一个object:WdfDeviceCreate创建framework device object
both:I/O request object
framework object导出的两种函数:
Methods perform an action
Properties provide access to data(naming convention)
KMDF的目标:起先是为了演化driver model来让问题分解成一系列小步骤,后来由于两个功能让KMDF成为一个革命:
清晰的cleanup和free资源的方式:由于object之间通信的设计
PnP和power,power policy的state machine:分化几乎所有object的设计来管理hardware而不是周围的operating system
KMDF callback functions
driver为了处理某一事件,需要实现一个对应的Callback function,把他注册在framework上
命名callback function:Evt[Object][Event] [object]是对应的framework object,[event]是对应的event
设备接入了D0 power state,framework会调用driver的EvtDeviceD0Entry回调函数
但是,函数命名只是一个规范而已。