做驱动已经半年了,这段期间迷茫,郁闷经常伴随着我.还好有一个项目刺激着我不停的学习,实验,开发,如今已渐入佳境。为了给以后的继续学习打下基础,将前面的收集到的点点滴滴进行总结是个不错的选择。
读写文件是文件驱动中最容易涉及的内容,但是每种应用程序读写文件的方式大相径庭,造成在驱动层,会有不同的表现。
1,一般的读写用ReadFile,WriteFile,这种情况下在驱动中很容易得到读写的内容,需要注意的是,在读的时候,如果一个文件超过4K,就会分成多次来读,而第一次的读写
2,读文件有问题的地方,PageIO时读文件有问题
3,在PostCreate中不能使用FileMon中取进程名的方法.
4,惊人发现,在PageIO时调用FltReadFile竟然会触发IRP_MJ_READ例程,这与帮助文件上的一些语句相矛盾。(额外说明,devenv要触发,notepad不触发)
FltReadFile creates a read request and sends it to the minifilter instances attached below the initiating instance, and to the file system. The specified instance and the instances attached above it do not receive the read request.
4,在PageIO时,直接在Read例程中使用FltGetFileNameInfo不能得到文件名
2,文件大小的处理,改变文件大小可以在IRP_MJ_QUERY_INFO中完成,但是在这里读文件却有问题