阅读:2698回复:6
如何在IRP_MJ_READ下读取文件内容?
想在filemon的IRP_MJ_READ里读取文件内容,按网上讨论的方法,写了如下代码,可是总是会蓝屏,而且跟踪进入FilemonHookDone里后也不知道内容放在哪里,该怎么查看.这是我的代码,希望大家能给予指正帮助,谢谢
case IRP_MJ_READ: if(条件) { IoSetCompletion(Irp,ReadCompleted,NULL,TRUE,TRUE,TRUE); IoCallDriver(hookExt->FileSystem,Irp); return STATUS_MORE_PROCESSING_REQUIRED; } NTSTATUS ReadCompleted(...) { PCHAR pContext=Irp->AssociateIrp.SystemBuffer; if (Irp->PendingReturned) { IoMarkIrpPending(Irp); } return STATUS_SUCCESS; } 另外.大家都说内容在Irp->AssociateIrp.SystemBuffer,可是我用watch看到的是空啊,该怎么查看,望指教 |
|
最新喜欢:![]() |
沙发#
发布于:2007-04-12 16:36
我就40分啊,全给出去,希望大家能多多指点
|
|
板凳#
发布于:2007-04-12 17:16
帮顶,我也不知道怎么解决,不过相信驱网这个大家庭有很多牛人会帮你解决的.
不知道是在MDL描述符对应的地址读数据还是在SystemBuffer对应的地址读数据. 还有就是为什么返回STATUS_MORE_PROCESSING_REQUIRED,觉得直接返回 IoCallDriver函数的返回值就可以了吧? |
|
地板#
发布于:2007-04-12 18:00
是的,只要return IoCallDriver(hookExt->FileSystem,Irp);就可以了,
STATUS_MORE_PROCESSING_REQUIRED是多余的. 但是怎么找文件内容还是一筹莫展.... |
|
地下室#
发布于:2007-04-30 17:49
=================================================================
from楼主: 另外.大家都说内容在Irp->AssociateIrp.SystemBuffer,可是我用watch看到的是空啊,该怎么查看,望指教 ================================================================= to楼主 首先你先要弄清楚一件事情: Irp->AssociateIrp.SystemBuffer 只是一个指针而已,他只是一个PVIOD类型的指针, 可以与你的任意类型的指针转换指向,以供你驱动内使用外部传来的数据 ,其所指向地址才是真正的数据所在地址 建议你去看下Iocontrol,明白这了,再看Read和Write就容易多了 而且思路也会清晰多了 |
|
|
5楼#
发布于:2007-06-04 21:17
还要看设备类型的吧,BUFFER_IO类型的是放在Irp->AssociateIrp.SystemBuffer中,DIRECTOR_IO类型是放在MDL指针所指BUffer中,其他类型IO是放在irp->UserBuffer中
|
|
6楼#
发布于:2007-06-11 09:49
IRP_MJ_READ好象大部分都是DIRECTOR_IO方式的。..
|
|