文件系统过滤驱动开发(二)

    声明:高手请一笑而过.>_<

 

    文件系统过滤驱动开发(一)里面已经讲了文件系统过滤驱动绑定设备的大概思路,剩下的就是一些细节处理部分.

 

    首先说说fast I/O派遣函数,我们知道,IRP是默认的I/O请求处理机制,IRP可以用于同步或者异步I/O,也可以用于缓存和非缓存I/O,同时还可以用于分页I/O.内存管理器通过发送合适的IRP到文件系统以处理缺页错误.快速I/O是是特别设计用于缓存文件的快速同步I/O.在快速I/O操作中,数据是在用户缓冲区和系统缓存直接交换,绕过文件系统和存储介质驱动堆栈(存储介质驱动不使用快速I/O).当接收到一个快速I/O的读或写请求如果要读或写的文件数据都在系统缓存当中,那么请求可以马上被满足.否则就会产生缺页错误,导致一个或多个IRP产生.当这种情况发生时,快速I/O例程要么返回FALSE,或者让调用者等待直到缺页错误被处理.如果快速I/O例程返回FALSE,则请求的操作失败,调用者必须产生IRP.文件系统和文件系统过滤器是必须支持IRP的,但是并不一定要支持快速I/O处理.但是,文件系统和文件系统过滤器需要实现快速I/O例程,即是文件系统和文件系统过滤器本身不支持快速I/O,也必须要定义快速I/O例程并返回FALSE(就是按照快速I/O例程的原型声明函数,然后函数里直接返回FALSE).当I/O管理器收到同步文件I/O请求(区别于分页I/O),它首先调用快速I/O例程.如果快速I/O例程返回TRUE,则请求被快速I/O例程完成.如果I/O例程返回FALSE,I/O管理器生成并发送IRP.文件系统过滤驱动不要求必须支持控制设备对象的I/O操作.但是,过滤设备对象绑定了文件系统或者卷是要求传递所有没有识别或者不想处理的IRP到驱动栈中的下一层驱动.同时,过滤设备对象绑定卷设备的必须实现FastIoDetachDevice.

 

    具体上面这个可以参考WDK文档fast I/O vs. IRPs,由于我们是文件系统过滤驱动,所以我们必须声明并实现fast I/O.fast I/O的初始化如下,需要注意的是FastIoDispatch的空间需要我们自己分配:

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值