阅读:2269回复:3
菜鸟求助 关于路径过滤 (在群里问 没人理我。。。)
路径过滤 通过看楚狂人的书 我知道三种方法 获取全路径肯定是需要的
1 自己下发IRP可以实现路径的过滤 但是我从没试过这个 而且是非文档化的 2 在对应的IRP中获取文件的路径 就是在FileObject->FileName中 但这个会存在短名 楚狂人给的方案就是用ZwQueryDirectoryFile依次打开目录得到_FILE_ID_BOTH_DIR_INFORMATION依次获取 得到全路径 但是这个函数好像会发送IRP_MJ_DIRECTORY_CONTROL 这样会有些重入问题吧? 3 还有一个我有把握做出来的 就是在create中获得 全路径与FileObject指针一一对应 保存到全局中 在clean中删除这个以防止内存泄漏 在其余的IRP处理中用FileObject获取对应路径 这过滤方式好像效率不是很高 还有: 获取的文件路径FileObject->FileName中不会有对应的盘符 ObQueryNameString函数得到的盘符也是volumename 目前我知道的最好的方法就是 在绑定卷时 获得volumename 并用RtlVolumeDeviceToDosName函数获取对应的盘符 一起存到设备扩展中 以后就可以直接从设备扩展中获取盘符了 偶是初学者 以上可能有错误 希望各位大虾能指正下 请教下 路径过滤用哪种方法比较好 现在最常用的文件访问控制之类的文件路径过滤是用的哪种方法? 学驱动有四五个月了 偶是第一次发帖啊! 想做的效果:用户可以选择对指定文件进行隐藏 禁止访问 对其监控 。。。。 已经实现:在create中获得全路径 在IRP_MJ_DIRECTORY_CONTROL 中实现了对文件隐藏 但是传的只文件的filename而对于全路径传上去没用 具体看下这个帖子 http://bbs.driverdevelop.com/htm_data/39/0810/114099.html 我是按这种方案做的隐藏 对于禁止访问的方案:在create中匹配路径 父目录相同就IRP失败 对于文件监控:在应用层过滤下不用的信息就可以了 很惭愧 水平太低 希望大家给点学习的建议 |
|
沙发#
发布于:2009-05-07 22:46
Re:菜鸟求助    关于路径过滤   (在群里问 没人理我。。。)
1 自己下发IRP可以实现路径的过滤 但是我从没试过这个 而且是非文档化的 It seems a custom build IRP cannot be avoided if you really want to develop a product. 2 在对应的IRP中获取文件的路径 就是在FileObject->FileName中, 但这个会存在短名 This field is only valid in CREATE dispatch routine. Either using ZwQueryDirectoryFile or building your own query IRP to get full path. 3 就是在create中获得 全路径与FileObject指针一一对应 保存到全局中 在clean中删除这个以防止内存泄漏 Suggest using FsContext instead of FileObject. FileObject is deleted in MJ_CLOSE, not MJ_CLEANUP. 这过滤方式好像效率不是很高 Don't know where you get this. 获取的文件路径FileObject->FileName中不会有对应的盘符 Suggest using VolumeName in kernel. 盘符 is just a symbolic link. Why don't you try Mini-Filter. It's much easier for a newcomer. |
|
板凳#
发布于:2009-05-08 10:54
自己构造IRP下发 获得文件全路径名
|
|
地板#
发布于:2009-05-08 13:59
呵呵,顶沙发,
我看到你在群里的帖子了,用minifilter,获取文件的全路径名只是一个简单的函数调用。 cleanup和close的语义可不是你想的字面意思。要想学好学得快,不动手,不下劲去理解源码是不行的 |
|