devil209
驱动牛犊
驱动牛犊
  • 注册日期2007-01-25
  • 最后登录2016-01-09
  • 粉丝0
  • 关注0
  • 积分732分
  • 威望94点
  • 贡献值0点
  • 好评度73点
  • 原创分0分
  • 专家分0分
阅读:1324回复:6

请各位大牛来帮帮小弟一个IRP_MJ_WRITE的问题

楼主#
更多 发布于:2007-02-07 08:35
  在一个文件过滤驱动中我只对d:\1.txt的IRP_MJ_WRITE包中的UserBuffer进行修改,如果是直接修改1.txt保存则工作正常,但是为什么我从其他地方复制一个1.txt覆盖d:\1.txt则会出现一个缺页错误呢?出错后d:\1.txt不能打开移动等,explorer占用完cpu且无法停止,重起后d;\1.txt里面就没内容了.
michaelgz
论坛版主
论坛版主
  • 注册日期2005-01-26
  • 最后登录2012-10-22
  • 粉丝1
  • 关注1
  • 积分150分
  • 威望1524点
  • 贡献值1点
  • 好评度213点
  • 原创分0分
  • 专家分2分
沙发#
发布于: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.
yandong_8212
驱动小牛
驱动小牛
  • 注册日期2006-07-28
  • 最后登录2011-02-11
  • 粉丝0
  • 关注0
  • 积分1046分
  • 威望464点
  • 贡献值1点
  • 好评度173点
  • 原创分0分
  • 专家分1分
板凳#
发布于:2007-02-09 11:44
你移动的是NewPointer的位置吧,Irp->UserBuffer又没动
商务MSN:YanDong_8212@163.com
yandong_8212
驱动小牛
驱动小牛
  • 注册日期2006-07-28
  • 最后登录2011-02-11
  • 粉丝0
  • 关注0
  • 积分1046分
  • 威望464点
  • 贡献值1点
  • 好评度173点
  • 原创分0分
  • 专家分1分
地板#
发布于:2007-02-09 11:40
驱动里面用UserBuffer太危险了,去研究进程间的数据关系。
商务MSN:YanDong_8212@163.com
devil209
驱动牛犊
驱动牛犊
  • 注册日期2007-01-25
  • 最后登录2016-01-09
  • 粉丝0
  • 关注0
  • 积分732分
  • 威望94点
  • 贡献值0点
  • 好评度73点
  • 原创分0分
  • 专家分0分
地下室#
发布于:2007-02-08 08:54
另外再说一下,象以上那样移动buffer指针对于txt文件工作正常,但是其他文件,如用word修改doc文件,用vs2003修改.c文件都会导致word或vs2003保存失败,然后进程无法结束.这是为什么呢?
devil209
驱动牛犊
驱动牛犊
  • 注册日期2007-01-25
  • 最后登录2016-01-09
  • 粉丝0
  • 关注0
  • 积分732分
  • 威望94点
  • 贡献值0点
  • 好评度73点
  • 原创分0分
  • 专家分0分
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包移动指针,为什么会产生这个缺页错误呢?
xx_qiang
驱动小牛
驱动小牛
  • 注册日期2004-07-30
  • 最后登录2017-02-27
  • 粉丝2
  • 关注1
  • 积分31分
  • 威望249点
  • 贡献值0点
  • 好评度171点
  • 原创分0分
  • 专家分0分
  • 社区居民
6楼#
发布于:2007-02-07 18:29
这样说是没法解决的,最起码给点源码才能找出问题啊
游客

返回顶部