chapter 3.4 I/O model

Windows发送I/O request到WDF driver时,framework代表driver接收request来进行分派、组队、完成、取消操作。
当接收到I/O request时,Framework决定
    1.自行处理请求
    2.发起一个回调函数让WDF driver处理请求:framework把数据包装成a framework request object
framework跟踪每一个I/O request:当需要时,可以调用合适的callback
framework通过建立一个或多个queue object和配置信息管理一列I/O request
    1.queue处理的I/O request类型
    2.请求是如何从queue分派的
    3.power management事件是如何影响queue的
WDF driver注册queue的回调函数来接收请求,queue object调用合适的回调函数来分派请求,3种注册queue object的方法:
    1.并行:queue及时向driver压入请求,同时可以有多个活动请求
    2.序列:只有当上一个请求被完成或者转发了之后,queue向driver压入请求。
    3.手动:根据需求,driver向queue拉取请求
PnP和Power manager可以影响I/O queue的状态,framework对queue其有这两者的支持和取消请求操作。
    driver通过配置queue开始、停止、恢复的行为来响应相关事件
    driver可以显式地开始、停止、恢复、清除的行为

取消I/O请求
Windows I/O是不同步的,导致很难正确取消请求。
WDF driver需要仔细处理锁的问题,通过多个处理例程处理。
Framework提供了默认的处理,不需要driver的影响。
当I/O请求取消时:
    1.默认framework取消在queue中的请求。
    2.除非driver把请求标记成cancelable,queue中移除并分派的请求不能被取消。
    3.WDF driver可以对正在处理的请求标记成可被framework取消的。


I/O target
WDF driver有时需要把I/O request发送给其他驱动
    1.driver需要把一些请求从栈传递下去。
    2.driver有时需要发起I/O request:比如为了获取栈底bus driver的信息
    3.driver有时需要发送I/O request到另一个设备栈获得信息
driver把请求发送给I/O target(一个framework object),可以是同步或非同步的。
默认的I/O target是设备栈低一级设备的driver,也可以调整为同个栈中另一个driver或者完全不同栈中的driver。
I/O target对driver的接口:
    1.target的state
    2.格式化请求
    3.获得target的信息
    4.获得target的移除消息
I/O target追踪请求:当target device或者source driver状态变化时,可以取消请求。
    
处理不致命错误
    1.一些错误driver无法恢复,UMDF crash,KMDF bug check
    2.一些错误driver可以恢复,UMDF 返回HRESULT,KMDF 返回NTSTATUS
WDF driver可以返回错误:比如会返回fail的回调函数
有时候要处理NULL
*PREfast(静态分析工具)可以帮助检查错误处理
告知UMDF错误:
    1.HRESULT支持多个成功失败码
    2.使用SUCCEED或FAID宏来检查HRESULT
3.UMDF驱动的回调函数返回HRESULT值
    4.HRESULT错误值在“COM介绍”一章讨论
告知KMDF错误:
    1.NTSTATUS支持多个成功失败码
    2.使用NT_SUCCESS宏来检查NTSTATUS
    3.KMDF驱动的回调函数返回NTSTATUS值
    4.NTSTATUS在Ntstatus.h中定义,也可以自定义NTSTATUS(在组件间可以理解的条件下)
    *%wdk%\inc\wdk\kmdf\VersionNumver\Wdfstatus.h
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值