lohcve
驱动牛犊
驱动牛犊
  • 注册日期2007-08-31
  • 最后登录2016-01-09
  • 粉丝0
  • 关注0
  • 积分400分
  • 威望41点
  • 贡献值0点
  • 好评度40点
  • 原创分0分
  • 专家分0分
阅读:1199回复:3

关于sfilter的2个问题

楼主#
更多 发布于:2007-11-19 10:25
我在看sfilter的过程中有2个问题,一直很困惑:

1 。winddk中sfilter的6507行(SfIsShadowCopyVolume函数中),IoCallDriver的第一个参数是StorageStackDeviceObject,它显然不是DeviceObject的下一个设备对象[即((PSFILTER_DEVICE_EXTENSION) DeviceObject->DeviceExtension)->AttachedToDeviceObject],而sfilter中除了这一个IoCallDriver之外其他的IoCallDriver的第一个参数都是DeviceObject的下一个设备对象[即((PSFILTER_DEVICE_EXTENSION) DeviceObject->DeviceExtension)->AttachedToDeviceObject]。IoCallDriver调用不是将Irp发往下一个设备吗?它的第一个参数是不是都应该是DeviceObject的下一个设备对象呢?这个地方一直想不通,请指教。
2 。SfFsNotification回调函数,还有其他一些分发例程SfFsControl,SfPassThrough,SfCreate,SfRead,SfWrite,SfCleanupClose,它们都有DeviceObject参数,我的问题是它们的DeviceObject参数都一样吗,都是指的同一个设备对象吗?如果是,DeviceObject指的是哪个设备对象?如果不是,请分别说明每一个DeviceObject指的是哪个设备对象?
lohcve
驱动牛犊
驱动牛犊
  • 注册日期2007-08-31
  • 最后登录2016-01-09
  • 粉丝0
  • 关注0
  • 积分400分
  • 威望41点
  • 贡献值0点
  • 好评度40点
  • 原创分0分
  • 专家分0分
沙发#
发布于:2007-11-22 10:49
望高手指点一二
tooflat
论坛版主
论坛版主
  • 注册日期2002-07-08
  • 最后登录2014-03-11
  • 粉丝2
  • 关注0
  • 积分1007分
  • 威望551点
  • 贡献值3点
  • 好评度476点
  • 原创分0分
  • 专家分0分
板凳#
发布于:2007-11-22 11:29
1,"IoCallDriver调用不是将Irp发往下一个设备吗?它的第一个参数是不是都应该是DeviceObject的下一个设备对象呢?"

IoCallDriver只负责把irp发给指定的设备,windows没有规定irp只能发给设备栈的下一个设备。

2,这些设备对象都是不同的,比如可能是C盘的文件系统内部的卷设备对象,也可能是是D盘的文件系统内部的卷设备对象,还可能是文件系统的控制设备对象。
建议楼主把驱动里面的所有设备对象全部打印出来,看看流程是怎么走的。
lohcve
驱动牛犊
驱动牛犊
  • 注册日期2007-08-31
  • 最后登录2016-01-09
  • 粉丝0
  • 关注0
  • 积分400分
  • 威望41点
  • 贡献值0点
  • 好评度40点
  • 原创分0分
  • 专家分0分
地板#
发布于:2007-11-22 21:19
非常感谢tooflat版主,能看一下 驱动小妹的“传一个简单的隐藏文件的过滤驱动,想请教与应用程序的通信问题”这个问题吗?已经困扰好长时间了。
游客

返回顶部