阅读:2837回复:7
minifilter一个很让人郁闷的缺陷
众所周知,如果传给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$设计的时候就不能考虑再周全一点,郁闷!! |
|
沙发#
发布于:2008-05-18 10:19
FltXXX可以直接用FileObject,ZwXXX的不行啊
|
|