csdengxm
驱动牛犊
驱动牛犊
  • 注册日期2005-06-07
  • 最后登录2006-08-26
  • 粉丝0
  • 关注0
  • 积分30分
  • 威望3点
  • 贡献值0点
  • 好评度3点
  • 原创分0分
  • 专家分0分
阅读:1442回复:5

IRP_MJ_WRITE buffer中搜索字符串导致的蓝屏故障.

楼主#
更多 发布于:2005-06-08 21:42
 对于 IRP_MJ_WRITE ,我可以得到
  SysDataBuf = Irp->UserBuffer;

然后我可以在
 if( strstr(SysDataBuf,\"keyword\") )
来搜索写盘的缓冲区里, 是否包含指定的字符.

可是有时就蓝屏了! 我预计原因是, UserBuffer并没有以0结尾,所以查找子串,就发生内存越界了.
有什么办法呢?当然可以将UserBuffer复制出来,不过,这样内存开销可能会很大.
如果是自己写搜索算法,又怕效率不高啊!

请高手指点一二了.




[编辑 -  6/10/05 by  csdengxm]

最新喜欢:

likepslikeps
zhangshengyu
驱动老牛
驱动老牛
  • 注册日期2003-10-03
  • 最后登录2016-07-26
  • 粉丝0
  • 关注0
  • 积分792分
  • 威望696点
  • 贡献值41点
  • 好评度499点
  • 原创分0分
  • 专家分0分
  • 社区居民
沙发#
发布于:2005-06-13 11:36
我自己写了一个 memstr 函数解决了,谢谢各位

每人给一分算了

呵呵,你还真大方
---内核开发合作或提供基础技术服务QQ:22863668 ---
csdengxm
驱动牛犊
驱动牛犊
  • 注册日期2005-06-07
  • 最后登录2006-08-26
  • 粉丝0
  • 关注0
  • 积分30分
  • 威望3点
  • 贡献值0点
  • 好评度3点
  • 原创分0分
  • 专家分0分
板凳#
发布于:2005-06-10 21:16
我自己写了一个 memstr 函数解决了,谢谢各位

每人给一分算了
fslife
驱动大牛
驱动大牛
  • 注册日期2004-06-07
  • 最后登录2016-01-09
  • 粉丝0
  • 关注0
  • 积分9分
  • 威望49点
  • 贡献值0点
  • 好评度20点
  • 原创分0分
  • 专家分0分
地板#
发布于:2005-06-09 15:54
IRP_MJ_WRITE中的Buffer本身是一个二进制的Buffer,对它进行strstr操作,本身没有多少意义,也很难达到预定的目的。
在交流中学习。。。
zhangshengyu
驱动老牛
驱动老牛
  • 注册日期2003-10-03
  • 最后登录2016-07-26
  • 粉丝0
  • 关注0
  • 积分792分
  • 威望696点
  • 贡献值41点
  • 好评度499点
  • 原创分0分
  • 专家分0分
  • 社区居民
地下室#
发布于:2005-06-09 13:37
对于 IRP_MJ_WRITE ,我可以得到
  SysDataBuf = Irp->UserBuffer;

然后我可以在
 if( strstr(SysDataBuf,\"keyword\") )
来搜索写盘的缓冲区里, 是否包含指定的字符.

可是有时就蓝屏了! 我预计原因是, UserBuffer并没有以0结尾,所以查找子串,就发生内存越界了.
有什么办法呢?当然可以将UserBuffer复制出来,不过,这样内存开销可能会很大.
如果是自己写搜索算法,又怕效率不高啊!

请高手指点一二了.


 


这样当然不行了,因为字符串是以0结尾的,如果缓冲区里没有0那不就C00000005了。
要用strncmp strnicmp等。
---内核开发合作或提供基础技术服务QQ:22863668 ---
joshua_yu
驱动小牛
驱动小牛
  • 注册日期2004-12-06
  • 最后登录2010-12-01
  • 粉丝0
  • 关注0
  • 积分428分
  • 威望54点
  • 贡献值0点
  • 好评度41点
  • 原创分0分
  • 专家分0分
5楼#
发布于:2005-06-09 12:27
你确认你文件的内容是在userbuffer当中而不是在mdladdress中?
游客

返回顶部