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

修改IRP_MJ_WRITE的问题

楼主#
更多 发布于:2007-02-06 15:32
  修改IRP_MJ_WRITE的Irp包里面的userbuffer里面的数据遇到个问题:
ULONG Buffersize;
CHAR    Newbuffer[100];
ULONG  k = 0;
Buffersize = currentIrpStack->Parameters.Write.Length;
RtlZeroMemory(Newbuffer,100);
RtlCopyMemory(Newbuffer,Irp->UserBufer,Buffersize);
for (k;k<Buffersize/2;k++)
{
      Newbuffer[k]=Newbuffer[k]+1;
}
RtlCopyMemory(Irp->UserBuffer,Newbuffer,Buffersize);
.......
IoCallDriver(...);

加载驱动后为什么我在用记事本写文件的时候只能对32字节以下写入工作正常,而大于32字节就不能工作呢?
另外在驱动里面我用CHAR    Newbuffer[100]申请那么多的内存对吗?一般申请多少合适?
yandong_8212
驱动小牛
驱动小牛
  • 注册日期2006-07-28
  • 最后登录2011-02-11
  • 粉丝0
  • 关注0
  • 积分1046分
  • 威望464点
  • 贡献值1点
  • 好评度173点
  • 原创分0分
  • 专家分1分
沙发#
发布于:2007-02-09 12:00
从逻辑上看好象没什么问题,你试一下不改变内存,同时在IoCallDriver 之前加上IoCopyCurrentStack...,这是WDM里面说的。
商务MSN:YanDong_8212@163.com
michaelgz
论坛版主
论坛版主
  • 注册日期2005-01-26
  • 最后登录2012-10-22
  • 粉丝1
  • 关注1
  • 积分150分
  • 威望1524点
  • 贡献值1点
  • 好评度213点
  • 原创分0分
  • 专家分2分
板凳#
发布于:2007-02-09 23:58
Try to allocate memory dynamically for big buffers such as using ExAllocatePoolWithTag, etc. Otherwise you may end up with low stack memory and crash the system.

Irp->UserBufer is not always valid.
游客

返回顶部