nana2046
驱动牛犊
驱动牛犊
  • 注册日期2007-02-28
  • 最后登录2009-04-10
  • 粉丝0
  • 关注0
  • 积分235分
  • 威望64点
  • 贡献值0点
  • 好评度23点
  • 原创分0分
  • 专家分0分
阅读:2697回复:6

如何在IRP_MJ_READ下读取文件内容?

楼主#
更多 发布于:2007-04-12 14:22
  想在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看到的是空啊,该怎么查看,望指教

最新喜欢:

rhpengrhpeng
nana2046
驱动牛犊
驱动牛犊
  • 注册日期2007-02-28
  • 最后登录2009-04-10
  • 粉丝0
  • 关注0
  • 积分235分
  • 威望64点
  • 贡献值0点
  • 好评度23点
  • 原创分0分
  • 专家分0分
沙发#
发布于:2007-04-12 16:36
我就40分啊,全给出去,希望大家能多多指点
liumaliang
驱动牛犊
驱动牛犊
  • 注册日期2006-07-14
  • 最后登录2010-05-28
  • 粉丝0
  • 关注0
  • 积分1分
  • 威望33点
  • 贡献值0点
  • 好评度31点
  • 原创分0分
  • 专家分0分
板凳#
发布于:2007-04-12 17:16
帮顶,我也不知道怎么解决,不过相信驱网这个大家庭有很多牛人会帮你解决的.
不知道是在MDL描述符对应的地址读数据还是在SystemBuffer对应的地址读数据.
还有就是为什么返回STATUS_MORE_PROCESSING_REQUIRED,觉得直接返回
IoCallDriver函数的返回值就可以了吧?
nana2046
驱动牛犊
驱动牛犊
  • 注册日期2007-02-28
  • 最后登录2009-04-10
  • 粉丝0
  • 关注0
  • 积分235分
  • 威望64点
  • 贡献值0点
  • 好评度23点
  • 原创分0分
  • 专家分0分
地板#
发布于:2007-04-12 18:00
是的,只要return IoCallDriver(hookExt->FileSystem,Irp);就可以了,
STATUS_MORE_PROCESSING_REQUIRED是多余的.
但是怎么找文件内容还是一筹莫展....
aqiuzaizai
驱动牛犊
驱动牛犊
  • 注册日期2007-02-02
  • 最后登录2008-04-02
  • 粉丝0
  • 关注0
  • 积分180分
  • 威望69点
  • 贡献值0点
  • 好评度68点
  • 原创分0分
  • 专家分0分
地下室#
发布于:2007-04-30 17:49
=================================================================
 from楼主:
另外.大家都说内容在Irp->AssociateIrp.SystemBuffer,可是我用watch看到的是空啊,该怎么查看,望指教
=================================================================

to楼主
首先你先要弄清楚一件事情:
Irp->AssociateIrp.SystemBuffer
只是一个指针而已,他只是一个PVIOD类型的指针,
可以与你的任意类型的指针转换指向,以供你驱动内使用外部传来的数据
,其所指向地址才是真正的数据所在地址

建议你去看下Iocontrol,明白这了,再看Read和Write就容易多了
而且思路也会清晰多了
竹密何妨流水过 山高岂碍野云飞
netkidxp
驱动牛犊
驱动牛犊
  • 注册日期2007-06-04
  • 最后登录2016-01-09
  • 粉丝0
  • 关注0
  • 积分200分
  • 威望21点
  • 贡献值1点
  • 好评度20点
  • 原创分0分
  • 专家分0分
5楼#
发布于:2007-06-04 21:17
还要看设备类型的吧,BUFFER_IO类型的是放在Irp->AssociateIrp.SystemBuffer中,DIRECTOR_IO类型是放在MDL指针所指BUffer中,其他类型IO是放在irp->UserBuffer中
qiweixue
驱动小牛
驱动小牛
  • 注册日期2004-07-21
  • 最后登录2011-12-19
  • 粉丝0
  • 关注0
  • 积分1006分
  • 威望274点
  • 贡献值0点
  • 好评度268点
  • 原创分1分
  • 专家分0分
6楼#
发布于:2007-06-11 09:49
IRP_MJ_READ好象大部分都是DIRECTOR_IO方式的。..
游客

返回顶部