tooflat
论坛版主
论坛版主
  • 注册日期2002-07-08
  • 最后登录2014-03-11
  • 粉丝2
  • 关注0
  • 积分1007分
  • 威望551点
  • 贡献值3点
  • 好评度476点
  • 原创分0分
  • 专家分0分
阅读:2837回复:7

minifilter一个很让人郁闷的缺陷

楼主#
更多 发布于:2008-05-17 16:03
众所周知,如果传给FltXXX函数的Instance为NULL,则该请求将会发送给整个设备栈。如果instance不为NULL,则该请求将会发给该instance的下一个instance。

FltGetUpperInstance可以返回当前instance的上层的instance,但是当当前驱动已经是在minifilter的最上层的时候,该函数返回NULL。

于是,如果当前驱动是在minifilter的最上层,并且在驱动中想通过FltXXX函数把请求发送给自己的时候,我们会发现没有方便的办法,因为instance是自己的时候,请求是发给下一个instance,而instance为NULL的时候,请求将会发送到栈顶,这就和legacy filter有潜在的冲突。

要解决这个问题,一个方法是不用FltXXX函数,还有一个方法是再安装一个passthru的instance到自己的instance的上面。这两个方法都非常ugly,其实只要在设计的时候,定义一个dummy instance,代表minifilter的最上层instance,该instance在所有实际的instance之上,这样就可以完美地解决这个问题了,M$设计的时候就不能考虑再周全一点,郁闷!!
tooflat
论坛版主
论坛版主
  • 注册日期2002-07-08
  • 最后登录2014-03-11
  • 粉丝2
  • 关注0
  • 积分1007分
  • 威望551点
  • 贡献值3点
  • 好评度476点
  • 原创分0分
  • 专家分0分
沙发#
发布于:2008-05-18 10:19
FltXXX可以直接用FileObject,ZwXXX的不行啊
游客

返回顶部