|
直接说方法,大家有更好的方法,可以讨论一下。(本文采用sfilter的框架)
1、在历程SfQueryInfomation中拦截irpSp->Parameters.QueryFile.FileInformationClass == FileEaInformation,说明是有拷贝操作,这边可以拦截到拷贝的原文件的路径,然后记录到自己创建的链表g_CopyFileNameList中;
2、在SfCreate中拦截所有创建文件的操作,然后判断文件路径里的文件名是否在链表g_CopyFileNameList中(PS:通过文件名去搜索文件的原路径),如果查找到的话,就认为匹配成功,并且将节点从链表g_CopyFileNameList中删除;
3、由于WIN7操作系统下是先创建文件,然后再调用SfQueryInfomation(XP和WIN8是先SfQueryInfomation,再创建文件,不知道微软为什么要这样。。。),所以在SFClose例程中,也进行与SfCreate一样的操作。
4、由于可能会有其他操作导致g_CopyFileNameList链表一直增大,所以定时清理链表g_CopyFileNameList。
|
|