dxb_lazycat
驱动牛犊
驱动牛犊
  • 注册日期2007-08-02
  • 最后登录2016-01-09
  • 粉丝0
  • 关注0
  • 积分300分
  • 威望31点
  • 贡献值0点
  • 好评度30点
  • 原创分0分
  • 专家分0分
阅读:2549回复:4

minifilter的例子swapbuffer的疑问

楼主#
更多 发布于:2008-01-03 19:04

1.在PreRead例程中,new了一个buffer,将iopb->Parameters.Read.ReadBuffer和p2pCtx都指向这个newBuf。

但是在PostRead例程中,传入的iopb->Parameters.Read.ReadBuffer 仍然是原来的地址。

所以不知道PreRead例程中对iopb->Parameters.Read.ReadBuffer=newbuf 这个有什么用。。

2.不明白swapbuffer的是怎么进行缓存的交换的。。

3.为什么一次打开文件,会有两次的preread和postread。
菜的懒猫
devia
论坛版主
论坛版主
  • 注册日期2005-05-14
  • 最后登录2016-04-05
  • 粉丝3
  • 关注0
  • 积分1029分
  • 威望712点
  • 贡献值1点
  • 好评度555点
  • 原创分8分
  • 专家分4分
沙发#
发布于:2008-01-04 11:12
1。这是正确的。
     数据已经Read到你的交换缓冲区(newbuf),
     而在后处理中iopb->Parameters.Read.ReadBuffer仍然指向原来的缓冲区;
     并且新的MDL由FltMgr来负责释放,你自己不能释放它!

2。请参考:微软官方网站上的讲义 - ModifyingParameters.ppt和BufferManagement.ppt
人总在矛盾中徘徊。。。
dxb_lazycat
驱动牛犊
驱动牛犊
  • 注册日期2007-08-02
  • 最后登录2016-01-09
  • 粉丝0
  • 关注0
  • 积分300分
  • 威望31点
  • 贡献值0点
  • 好评度30点
  • 原创分0分
  • 专家分0分
板凳#
发布于:2008-01-04 15:58
意思是通过FltSetCallbackDataDirty(Data).就已经将数据读到了newbuf中。
然后是通过p2pCtx->SwappedBuffer=newBuf,将我们的新的newbuf传递给PostRead来处理。


不知道这样的理解是否正确?
菜的懒猫
dionysus77
驱动小牛
驱动小牛
  • 注册日期2006-11-15
  • 最后登录2011-12-18
  • 粉丝0
  • 关注0
  • 积分27分
  • 威望392点
  • 贡献值0点
  • 好评度177点
  • 原创分0分
  • 专家分0分
地板#
发布于:2008-03-12 18:49
3。一次是缓存读磁盘,另一次是应用程序读缓存
yellowzzp
驱动小牛
驱动小牛
  • 注册日期2007-07-16
  • 最后登录2016-01-09
  • 粉丝0
  • 关注0
  • 积分1015分
  • 威望131点
  • 贡献值0点
  • 好评度117点
  • 原创分0分
  • 专家分0分
地下室#
发布于:2008-04-18 16:44
你应该想象一下
filter只是加在某一级上的过滤层

如果没这层。程序也能正常工作。

如果你没有 newbuf
系统就自己走自己的readbuf了。fltmgr自己分配,自己释放。

现在把swapbuffer这个例子加进去
fltmgr把 从下层读来的数据放到了在 新建的这一层上分配的内存。

然后post里 再把这些数据拷贝到 mdl里 送给上层。

所以说post里指哪也不用管了。数据已经得到了 在newbuffer里.Readbuff就没用了。不用关心了。

说的比较乱。。自己感觉是这个意思。。有错请指出。
游客

返回顶部