framework是DLL,由一些基于COM的callback object组成
选择COM原因:
1.程序员熟悉
2.COM接口支持对函数的分组,让DDI容易理解
3.支持ATI等一系列基于COM的工具
UMDF基于两种object
1.framework object:属于framework,表示了driver、device,I/O queue等
2.callback object:由驱动实现,响应设备相关事件,在UMDF中注册。
driver通过COM interface pointer,而不是object pointer和framework object交互
framework object反过来和driver实现的callback object交互
UMDF Framework objects
created by:
1.framework:
framework载入driver时,产生一个framework driver object,framework并把指针传给driver object的接口IWDFDriver,并把IWDFDeviceInitialize接口传给driver的callback object
2.dirver:
driver通过调用IWDFDriver::CreatDevice产生一个framework device object
3.both
例如I/O request object
Framework object导出的interface的命名为IWDF[Object],其中[Object]指的是是由哪个对象导出的接口
IUnknowen
所有的Framework object会导出一至多个interfaces:framework device object会导出IWDFDevice和IWDFObject
interface包含了一至多个方法,它们的目的:
1.告诉object采取行为
2.访问属性中的数据(get set),不同的类型是根据naming convention来区别的
UMDF Callback Objects
driver通过实现callback object处理事件和在framework上注册它来覆盖framework对event的默认处理
callback object导出了一至多个callback interfaces:每个interface处理了一系列相关的事件集。
callback interfaces由一至多个方法组成:每个方法对应了一个event,framework通过调用它来向driver通知事件,以及和向Callback Object传递相关数据
driver注册Callback Object的方式是根据framework object是framework还是driver产生的:
1.由driver产生的framework object:
在driver创建object时注册 Callback Objects,比如driver在调用IWDFDriver::CreateDevice时
2.由framework产生的framework object:
这些objcet会有一至多个方法可以让driver调用来注册callback object,比如为了给I/O request注册一个完成请求的callback object,driver调用了I/O request object的IWDFIoRequest::SetCompletionCallback方法。
driver选择处理event,决定了每个callback object导出的接口。
若driver只需处理一个queue object的read event,callback object只需要导出一个callback interface:IQueueCallbackRead
若driver需处理queue object的read event和cleanup event,callback object需要导出两个callback interface:IQueueCallbackRead和IObjectCleanup
若一个framework object不产生任何事件,则不用注册callback object:driver通常不用处理memory object产生的事件。
*callback object可以处理来自不同object的事件。