在用微过虑驱动实现文件系统的过滤时应该注意以下一些问题:
1、ddk的安装选择。我安装的是ddk3790.1830这个版本,一开始写一些驱动时并没有什么问题,可是在实现文件系统方面的过滤时,发现很多函数根本无法识别,经过研究发现这个版本并没有关于文件系统过滤这个模块,于是重新安装了一个6001.18002版本的,问题得到解决。
2、写微过滤驱动时,在编译过程中总是报错,对于以flt开头的函数都报错link 2109,查了一下是缺少fltmgr.lib这个库。一开始是用pragma comment(lib,"fltMgr.lib")来实现的,但是重新编译时发现这个问题依然没有解决,从编译的输出结果来看,fltmgr这个库并没有被导进去。研究了很久最后在师兄的帮助下发现只有在source中添加
TARGETLIBS= $(TARGETLIBS) /
$(IFSKIT_LIB_PATH)/fltMgr.lib
这两行代码才能真正实现库的导入。
3、在动态调试过程中,程序中是在FltRegisterFilter这个函数中注册失败。一开始以为是由于回调函数的问题。最后用了wdk提供的nullfilter没有回调函数的驱动进行编译调试,结果依然出现注册失败这个问题。为了验证注册失败不是由于我系统的环境因素,于是我又将其拷贝到其他人的电脑中,结果又出现了上述问题。在和别人的探讨中,终于发现原来是漏了一个inf的安装文件。对于微过滤驱动,它和一般的驱动不同,在加载前必须有一份安装文件(具体见下面代码,对于以后不同的微过滤驱动,只需要修改里面的名称即可)
4、用cmd进行编译。对于wdk的提供的源代码,如果想直接编译的话,可以考虑cmd命令行来实现。
必须有ddkbuild.bat和ddkbuild.cmd这两个文件:
切换到ddkbuild.cmd所在的位置,然后键入:
: ddkbuild.cmd -WXP chk +驱动所在的路径
(对于具体用法,直接键入ddkbuild.cmd可以查看具体使用方法)
6、vs编译。如果想用vs来编译的话,必须配置好环境,具体见前面实现方式。用vs创建一个新的工程时要注意创建时的选项,对于不同系统要选不同的平台,否则出错。另外,创建c或者cpp文件也可以在下一个选项中设置。对于用vs生成的微过滤驱动,不会自动生成inf安装文件,所以要自己创建,可以参照下面代码,仅仅修改其中的驱动名即可。