阅读:1324回复:6
请各位大牛来帮帮小弟一个IRP_MJ_WRITE的问题
在一个文件过滤驱动中我只对d:\1.txt的IRP_MJ_WRITE包中的UserBuffer进行修改,如果是直接修改1.txt保存则工作正常,但是为什么我从其他地方复制一个1.txt覆盖d:\1.txt则会出现一个缺页错误呢?出错后d:\1.txt不能打开移动等,explorer占用完cpu且无法停止,重起后d;\1.txt里面就没内容了.
|
|
沙发#
发布于:2007-02-09 23:46
Irp->UserBuffer is not always valid. Depending on buffered IO or direct IO Irp->AssociatedIrp.SystemBuffer or Irp->MdlAddress may be used.
|
|
驱动小牛
![]() |
板凳#
发布于:2007-02-09 11:44
你移动的是NewPointer的位置吧,Irp->UserBuffer又没动
|
|
驱动小牛
![]() |
地板#
发布于:2007-02-09 11:40
驱动里面用UserBuffer太危险了,去研究进程间的数据关系。
|
|
地下室#
发布于:2007-02-08 08:54
另外再说一下,象以上那样移动buffer指针对于txt文件工作正常,但是其他文件,如用word修改doc文件,用vs2003修改.c文件都会导致word或vs2003保存失败,然后进程无法结束.这是为什么呢?
|
|
5楼#
发布于:2007-02-08 08:10
谢谢~
源码如下: ULONG NewBufferSize; ULONG k = 0; PVOID NewPointer; NewBufferSize = currentIrpStack->Parameters.Write.Length; NewPointer = Irp->UserBuffer; for (k;k < NewBufferSize;k++) { (*((PCHAR)(NewPointer)))++; ((PCHAR)NewPointer) = ((PCHAR)NewPointer)+1; } 以上只是简单的移动了以下buffer中的指针,后来发现如果是复制粘贴的话是explorer进程发出了一个irp_mj_write包,造成了缺页错误,加一个判断if(!(strstr(name,"xplorer")))就行了,但是也不会对这个进程的irp包移动指针,为什么会产生这个缺页错误呢? |
|
6楼#
发布于:2007-02-07 18:29
这样说是没法解决的,最起码给点源码才能找出问题啊
|
|