阅读:1358回复:6
被“文件禁止写”折腾死了,请各位路过的大侠999999
本人尝试了N种方法:
1:处理中断IRP_MJ_WRITE 天知道这个中断是写哪个文件,无从下手......,而且即使拦截了,还是能存盘(看了高手说,要处理catch,晕死,放弃) 2:处理IRP_MJ_CREATE 直接修改IRP包中打开文件方法,只读方式打开,并且设置了文件属性是只读,但是没有任何作用。 3:处理IRP_MJ_CREATE的完成实例 套路同2,还是没有任何作用 4:Hook 最郁闷的方法,直接导致我机器重装 请哪位大侠给个源代码,我是直接修改sfilter的,谢谢! |
|
沙发#
发布于:2007-02-05 17:58
文件禁止写,过滤irp_mj_write和fastiowrite就可以了。
|
|
板凳#
发布于:2007-02-05 22:39
FastIO系列函数有很多Write的函数样???
具体要拦截哪些函数, 在拦截函数中直接return FALSE吗? |
|
|
地板#
发布于:2007-02-06 10:04
拦截fastiowrite就可以,返回false。在irp_mj_write的时候返回status_access_denied就可以了
|
|
地下室#
发布于:2007-02-06 14:16
IRP_MJ_CREATE里面调用SfGetFileName,判断取得的名字在不在你的禁止列表里面,如果在,就结束IRP返回,否则向下继续处理。
|
|
|
5楼#
发布于:2007-02-09 13:26
如果只是read, IRP_MJ_CREATE也要拦截??!
|
|
6楼#
发布于:2007-02-11 10:55
建议在MJ_CREATE中拦截.
否则你把文件让上层成功打开,.然后又不让写.或者你改掉IO堆栈的参数的话.都有可能存在问题 在这里拦截你可以判断文件允许写的列表,不在的话就让这个操作失败掉. 如果是碰到FILE_READ_DATE | FILE_WRITE_DATE这样的话.那你就可以把FILE_WRITE_DATE去掉 总的一句话.Create中拦截.并且结合MJ_Write来实现 |
|