WDF架构协调了driver和windows之间,以及driver和它的device之间的交互。
WDF架构有两个实现:KMDF和UMDF
应用程序
应用程序使用WDFdriver方式和WDM一致:获得device handle,通过windows api想device发送请求。
UMDF driver不一致的地方:
虽然允许所有3种I/O模式,但是无法提供对client地址空间的直接访问(some of direct I/O and neither I/O)
增加了新的status code告诉应用程序driver无法处理I/O
应用程序必须更改调用CreatFile函数的方式
除了上述以外,一个UMDF驱动应该是无法区分的。
内核子系统
内核子系统指I/O manager,PnP manager等,和WDM一样需要和driver交互的子系统。
从子系统的角度,framework仍然是一个WDM driver:仍然从应用程序获取请求,使用IRP通信,请求完毕后向应用程序返回结果。
framework的上边界
指windows和driver的边界
驱动可以调用framework DDI,或者不通过framework直接调用windows functions
framework提供的三种模型:
- object model:管理framework object的创建和管理
- I/O model:
- framework接收IRP
- framework包装IRP为object格式
- framework把它传递给driver处理
- driver处理后,返回请求
- 请求完成后,framework完成IRP处理,向I/O manager返回结果
- 最终向应用程序返回结果
- PnP&power model:状态机模型,事件处理
Framework Object
指的是WDF驱动的基本编译块
driver通过interface和object交互
object可以被framework或driver创建
Driver callbacks
由driver实现及注册来覆盖WDF的默认处理
framework调用callback,向driver传递数据,由driver处理事件,返回结果
必要时才需要实现callback
Framework的下边界
1.和别的驱动交互:使用I/O target机制,由framework向其他driver传递请求,并返回结果
2.KMDF通过DMA object来从支持DMA的设备传递消息;UMDF通过framework向相关内核级驱动传递请求来和设备通信。