zhoushu125
驱动牛犊
驱动牛犊
  • 注册日期2007-06-11
  • 最后登录2009-11-17
  • 粉丝0
  • 关注0
  • 积分24分
  • 威望33点
  • 贡献值1点
  • 好评度2点
  • 原创分0分
  • 专家分0分
阅读:1434回复:1

鼠标过滤器驱动拦截并下发irp_mj_read导致蓝屏,老牛请进

楼主#
更多 发布于:2009-11-03 19:38
我在Mouclass上attach了一个过滤器驱动程序,想模拟鼠标的移动和点击,实现方法如下:
机器配置是:vista , 内存2G,wdk

1.拦截IRP_MJ_READ, 在filter里将IRP_MJ_READ的状态标识为pending。
2.调用ioAllocateIrp,新建一个IRP,用RtlMovememory复制整个irp结构和irp stack数组,检查flag,io方式为bufferedio,于是分配了一段长度为readlen的non paged memory, 并把这个指针赋给新建irp的systembuffer指针。
3.为新建irp设置complete callback和cancel例程
4.调用iocalldriver将新irp发给mouclass
5.在complete callback里,把mouclass给新建irp的数据复制给原来的irp,调用iofreeirp释放新建的irp,调用iocomplete完成原来irp请求。

现在问题是系统加载filter后,移动鼠标就产生蓝屏,我用windbg查看memory.dump,给出的信息是mouclassread+44出错。
分析一下可能原因:
1.新建的irp结构里某些信息没有指定,比如fileObject等,mouclass在引用irp某些指针的时候可能会因非法访问而蓝屏。
2.写systembuffer出错(我是用exallocatepool分配的内存,长度是跟irp请求的readlen一致),可能因为irql不够或者buffer长度不够导致写buffer溢出等产生蓝屏。

不知道我分析的正确否,现在还没找到原因,请老牛指点!!

zhoushu125
驱动牛犊
驱动牛犊
  • 注册日期2007-06-11
  • 最后登录2009-11-17
  • 粉丝0
  • 关注0
  • 积分24分
  • 威望33点
  • 贡献值1点
  • 好评度2点
  • 原创分0分
  • 专家分0分
沙发#
发布于:2009-11-05 13:57
自己顶
在线等老牛。。
游客

返回顶部