学习windwos驱动(IO模型)
2015-10-28 13:28
204 查看
IO管理器将IO请求封装成IRP结构体发往内核驱动。
WDF能够判断成IRP请求是直接在框架内部处理,还是调用WDF驱动注册过的事件回调,交回驱动处理。如果调用事件回调,就必须将IRP封装成框架请求,也就是WDFREQUEST对象。
一般情况,WDF驱动不直接操作IRP。
IO目标对象叫做WDFIOTARGET。
WDFIOTARGET封装了DEVICE_OBJECT,它跟WDFDEVICE对象不同的是:只唯一的WDFDEVICE对象与WDM设备对象关联,因为框架不允许多个WDFDEVICE对象对应于同一个WDM设备对象——因为无法从DEVICE_OBJECT对象反推出WDFDEVICE对象,采用一一对应不会导致管理上混乱。
WDFDEVICE和DEVICE_OBJECT对象的一一对应的不足是无法实现在另一个WDF驱动(Driver2)里发送命令给当前驱动(Driver1)的设备对象(WdfDevice)。
Driver1是设备对象WDFDEVICE的拥有者,WDFDEVICE封装了DEVICE_OBJECT,框架不允许Driver2也拥有一个等效的设备对象WEFDEVICE,不存在另一个封装了DEVICE_OBJECT的WEFDEVICE。
框架对象不能在驱动间传递。
引入WDFIOTARGET对象,是为了当别的驱动程序或本驱动程序的其它地方(如设备里存在多个设备栈)要发送命令到这个设备对象时,可以通过远程WDFIOTARGET对象来完成。
有一个队列与WDFIOTARGET相关联。
IO目标对象作为上层设施,对来自各个方向的请求分类和管理。
概括一下知识点:
框架设备对象WDFDEVICE是对底层设备对象的封装,并唯一。
IO目标对象是框架设备对象WDFDEVICE的封装,可以多个目标对象对应于同一个设备对象。
框架为WEFDEVICE对象创建唯一的本地目标对象。
每个目标对象有一个内部队列,发送目标对象的IO请求都在队列中等待,最后发送给设备对象处理。
IO目标对象的细节:
IO目标是什么?
IO目标是对IO请求将发送到的目标驱动的表述。
比如向内核驱动设备发送一个IOCTL命令,这个远程设备对象就是IOCTL命令的IO目标(IO Target)。
IO目标对象有什么作用?
可以请求以同步方式发送IO目标对象;
请求异步方式发送到IO目标对象;
为发送到IO目标的请求设置超时,如果超时未完成,就取消请求。
可以启动、停止、关闭IO目标对象,IO目标对象启动后才能接收请求,不然就关闭外界请求通道;
跟踪维护发送到IO目标的IO请求。例如删除目标对象后,所有与IO目标对象有关的排队的IO请求对象将被删除。
WDF能够判断成IRP请求是直接在框架内部处理,还是调用WDF驱动注册过的事件回调,交回驱动处理。如果调用事件回调,就必须将IRP封装成框架请求,也就是WDFREQUEST对象。
一般情况,WDF驱动不直接操作IRP。
IO目标对象叫做WDFIOTARGET。
WDFIOTARGET封装了DEVICE_OBJECT,它跟WDFDEVICE对象不同的是:只唯一的WDFDEVICE对象与WDM设备对象关联,因为框架不允许多个WDFDEVICE对象对应于同一个WDM设备对象——因为无法从DEVICE_OBJECT对象反推出WDFDEVICE对象,采用一一对应不会导致管理上混乱。
WDFDEVICE和DEVICE_OBJECT对象的一一对应的不足是无法实现在另一个WDF驱动(Driver2)里发送命令给当前驱动(Driver1)的设备对象(WdfDevice)。
Driver1是设备对象WDFDEVICE的拥有者,WDFDEVICE封装了DEVICE_OBJECT,框架不允许Driver2也拥有一个等效的设备对象WEFDEVICE,不存在另一个封装了DEVICE_OBJECT的WEFDEVICE。
框架对象不能在驱动间传递。
引入WDFIOTARGET对象,是为了当别的驱动程序或本驱动程序的其它地方(如设备里存在多个设备栈)要发送命令到这个设备对象时,可以通过远程WDFIOTARGET对象来完成。
有一个队列与WDFIOTARGET相关联。
IO目标对象作为上层设施,对来自各个方向的请求分类和管理。
概括一下知识点:
框架设备对象WDFDEVICE是对底层设备对象的封装,并唯一。
IO目标对象是框架设备对象WDFDEVICE的封装,可以多个目标对象对应于同一个设备对象。
框架为WEFDEVICE对象创建唯一的本地目标对象。
每个目标对象有一个内部队列,发送目标对象的IO请求都在队列中等待,最后发送给设备对象处理。
IO目标对象的细节:
IO目标是什么?
IO目标是对IO请求将发送到的目标驱动的表述。
比如向内核驱动设备发送一个IOCTL命令,这个远程设备对象就是IOCTL命令的IO目标(IO Target)。
IO目标对象有什么作用?
可以请求以同步方式发送IO目标对象;
请求异步方式发送到IO目标对象;
为发送到IO目标的请求设置超时,如果超时未完成,就取消请求。
可以启动、停止、关闭IO目标对象,IO目标对象启动后才能接收请求,不然就关闭外界请求通道;
跟踪维护发送到IO目标的IO请求。例如删除目标对象后,所有与IO目标对象有关的排队的IO请求对象将被删除。
相关文章推荐
- Medial Queries的另一用法——服务于IE
- 这7个人生捷径,一定不要走!
- 【linux shell系列--1】crontab命令
- property中的strong 、weak、copy 、assign 、retain 、unsafe_unretained 与autoreleasing区别和作用详解
- (转)C++实现RTMP协议发送H.264编码及AAC编码的音视频,摄像头直播
- 统计功能和子对象的大小信息查询Bug
- Mac电脑AndroidStudio使用SVN进行版本控制
- Android studio 导入project
- 获取本年的周六周日
- thinkphp——前台(提交订单)并插入相关信息到数据库
- 如何将JAVA插件支持Chrome
- 中文排序问题
- 【LWJGL官方教程】Game loops 游戏循环
- 腾讯封了超10万违规涉赌微信账号
- 【经典DP】HDOJ 搬寝室 1421
- 翻译随笔(1)——职场成功不仅需要技术高超
- /* 只支持IE6、7、8 */ @media \0screen\,screen\9 {...}
- lftp连接异常情况分析过程
- lftp连接异常情况分析过程
- 服务器上的文件的上传和下载