阅读:2824回复:19
IRP_MJ_WRITE的问题,请各位DX赐教,不胜感激!!!!!!!!
IRP_MJ_WRITE的问题,请各位DX赐教,不胜感激!!!!!!!!
小弟初学驱动开发,现正在学习Filemon代码,试着改写,现遇到一个问题请赐教。 我想禁止一个文件夹的写操作,在IRP_MJ_WRITE:请求中判断并返回STATUS_ACCESS_DENIED 打开一个已经存在的word文件,改动后保存,winword进程会出现非法操作,并会出现延迟写入错误. 请各位大侠赐教到底如何拦截,期盼。 万望给为大虾多多指导~~~ ![]() [编辑 - 4/13/04 by birdzxf] |
|
最新喜欢:![]() |
沙发#
发布于:2004-04-13 23:25
关注中~~~
|
|
板凳#
发布于:2004-04-13 23:35
WORD的修改不同,好象是生成一个TMP文件,然后对其操作,最后关闭的时候先删除原来的文件,然后把该TMP文件名字改为原来的文件名,你现在不让他删除原来的,而WORD又要重新命名相同的名字,自然出错了。
|
|
|
地板#
发布于:2004-04-13 23:49
WORD的修改不同,好象是生成一个TMP文件,然后对其操作,最后关闭的时候先删除原来的文件,然后把该TMP文件名字改为原来的文件名,你现在不让他删除原来的,而WORD又要重新命名相同的名字,自然出错了。 我没有拦截任何删除操作,只是他在irq_mj_create中先创建了一个TMP文件,大小在3k左右.我可以在拦截时将这个临时文件设成只读属性,但是无法将word文件设成只读属性.是不是方法有误. 菜鸟上路,请再赐教,谢谢. ![]() [编辑 - 4/13/04 by birdzxf] |
|
地下室#
发布于:2004-04-14 10:03
自己顶一下
|
|
5楼#
发布于:2004-04-14 14:09
又学到东西了
|
|
|
6楼#
发布于:2004-05-10 10:59
没人回
自己顶 |
|
7楼#
发布于:2004-07-17 17:20
IRP_MJ_WRITE的问题,请各位DX赐教,不胜感激!!!!!!!! 我也遇到同样的问题,延缓写入错误,不是向要过滤的文件写入,我的不是word而是txt文件,可能所有文件都这样的,郁闷ing |
|
8楼#
发布于:2004-07-17 19:25
呵呵,我现在去掉了延缓写入错误,是这样两个改动:
1、原来我设置有if(。。。)readok=1;现加了else readok=0的条件 2、在cleanup、close等里面也加入了代码,不过不知道这样是否有其它问题,反正word和txt都打不开指定文件了 还有,比你的多一句IoCompleteRequest( Irp,IO_NO_INCREMENT); 祝你好运。。。 :D |
|
9楼#
发布于:2004-07-18 14:27
可不可以把相关的源代码贴出来看看那?
我也遇到了类似的问题,现在正在想办法解决。 目前初步的想法是完善错误检查的部分, 不知道你在cleanup和close中都加了些什么功能的代码那? 多谢了! 另外在对文件进行监控的过程中,发现不同的文件处理方法上有很大的不同。因为我只对所有NOCACHED/PAGING_IO/SYNA.PAGING_IO的部分进行拦截和处理,出现的症状是程序死掉,系统变得极慢:( |
|
|
10楼#
发布于:2004-07-19 21:05
支持一下
贴出来大家讨论1下 |
|
11楼#
发布于:2004-07-19 21:49
都是这个网上的,全部都加的这些 Irp->IoStatus.Status=STATUS_INVALID_DEVICE_REQUEST; Irp->IoStatus.Information=0; IoCompleteRequest(Irp,IO_NO_INCREMENT); return STATUS_INVALID_DEVICE_REQUEST; 但是设定条件是要么弄成局部变量判断,要么加个else,可能我就是省了else {不拦截} |
|
12楼#
发布于:2004-07-20 08:33
在IRP_MJ_CREATE里,这样做就可以阻止word了.
ULONG disposition; ACCESS_MASK DesiredAccess = 0; disposition = (IrpStack->Parameters.Create.Options >> 24) & 0xFF; if(IrpStack->Parameters.Create.SecurityContext){ DesiredAccess = (FILE_WRITE_DATA | FILE_WRITE_ATTRIBUTES | FILE_WRITE_EA | FILE_APPEND_DATA) & IrpStack->Parameters.Create.SecurityContext->DesiredAccess; } if((disposition != FILE_OPEN) || DesiredAccess){ // 取消 } [编辑 - 7/20/04 by waqis] [编辑 - 7/20/04 by waqis] |
|
13楼#
发布于:2004-07-20 10:33
[quote]在IRP_MJ_CREATE里,这样做就可以阻止word了.
ULONG disposition; ACCESS_MASK DesiredAccess = 0; disposition = (IrpStack->Parameters.Create.Options >> 24) & 0xFF; if(IrpStack->Parameters.Create.SecurityContext){ DesiredAccess = (FILE_WRITE_DATA | FILE_WRITE_ATTRIBUTES | FILE_WRITE_EA | FILE_APPEND_DATA) & IrpStack->Parameters.Create.SecurityContext->DesiredAccess; } if((disposition != FILE_OPEN) || DesiredAccess){ // 取消 } 您的帖子让我很干兴趣,我原来就是想问只在IRP_MJ_CREATE中处理如何判断是读还是写,看来通过你这个方法能够实现,请大师开坛布法,将这些代码略加解释和扩展讲解一下如何? |
|
14楼#
发布于:2004-08-01 22:14
抱歉,还是有些问题,能拒绝但是,拒绝后虽然改变规则word等文档也不能再打开,说什么文件被锁定,其它应用程序在使用,还是要走birdzxf老兄的设置只读属性或waqis的在IRP_MJ_CREATE中判断是写然后拦截才行,但是我用waqis的代码将irpstack改为curruntstack后加载就死机。birdzxf老兄设置属性为只读属性是如何设置的,能否将代码贴出来看看
|
|
15楼#
发布于:2004-08-02 09:01
没问题呀,我的代码就是这么写的,你用我的siimon.sys试试.
|
|
16楼#
发布于:2004-08-02 17:15
没问题呀,我的代码就是这么写的,你用我的siimon.sys试试. 从哪里可以获得你的siimon.sys的代码,能发给我一份否?zhmxggg@126.com,多谢了 |
|
17楼#
发布于:2004-08-04 14:42
强烈请求waqis兄把代码贴出来,
这样一来可以少许多人往泥潭里钻了. |
|
18楼#
发布于:2004-08-05 17:30
是啊!!给大家看看你的代码吧!!!
|
|
19楼#
发布于:2004-08-08 10:10
沉了???!!!
|
|