阅读:1434回复:1
鼠标过滤器驱动拦截并下发irp_mj_read导致蓝屏,老牛请进
我在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溢出等产生蓝屏。 不知道我分析的正确否,现在还没找到原因,请老牛指点!! |
|
沙发#
发布于:2009-11-05 13:57
自己顶
在线等老牛。。 |
|