chapter 4.2: UMDF介绍

本文介绍了UMDF(User-Mode Driver Framework)中的关键概念,包括Framework对象、Driver对象和Callback对象。详细阐述了如何创建设备对象,以及如何通过实现Callback对象来处理事件和覆盖框架的默认行为。还解释了不同类型的接口和方法在UMDF中的作用,以及如何注册Callback对象。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

UMDF是基于COM的编程模型,用于实现function,filter driver,例如USB设备驱动
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的事件。



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值