Brain
驱动牛犊
驱动牛犊
  • 注册日期2003-01-11
  • 最后登录2007-06-06
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
阅读:2435回复:16

又来问问题了,mj_read 读数据缓冲区

楼主#
更多 发布于:2003-02-10 16:57
我在mj_read 消息里读数据

buffer里面的数据是空的,(程序源码用的是filemon的)

只有在FilemonHookDone函数里面才能得到数据。但是我想在mj_read消息里处理buffer,怎么做?

最新喜欢:

ljmmaryljmmar...
vcmfc
驱动中牛
驱动中牛
  • 注册日期2001-03-23
  • 最后登录2008-01-28
  • 粉丝0
  • 关注0
  • 积分528分
  • 威望53点
  • 贡献值0点
  • 好评度52点
  • 原创分0分
  • 专家分0分
沙发#
发布于:2003-02-10 18:56
不解其意!
Brain
驱动牛犊
驱动牛犊
  • 注册日期2003-01-11
  • 最后登录2007-06-06
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
板凳#
发布于:2003-02-11 11:51
我是说在case IRP_MJ_READ: 中不能获得读的数据内容,只有在  IoSetCompletionRoutine( Irp, FilemonHookDone, (PVOID) seqNum, TRUE, TRUE, TRUE );中的FilemonHookDone函数里才能得到读去的数据内容。(而win98 read消息里就可以直接得到buffer。)

我想在case IRP_MJ_READ:中直接得到读取的内容,如何做到?
Tom_lyd
驱动大牛
驱动大牛
  • 注册日期2001-09-02
  • 最后登录2016-01-09
  • 粉丝0
  • 关注0
  • 积分10分
  • 威望1点
  • 贡献值0点
  • 好评度1点
  • 原创分0分
  • 专家分0分
地板#
发布于:2003-02-11 14:59
肯定是要调用低层的驱动程序去读取数据,在完成例程里面查看读出的数据。
Tom_lyd
Brain
驱动牛犊
驱动牛犊
  • 注册日期2003-01-11
  • 最后登录2007-06-06
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
地下室#
发布于:2003-02-11 15:07
不好意思,低层的驱动程序是指什么?是不是zwreadfile 之类的?驱动我刚接触,还不熟悉,请指教!
Brain
驱动牛犊
驱动牛犊
  • 注册日期2003-01-11
  • 最后登录2007-06-06
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
5楼#
发布于:2003-02-11 15:10
补充一下,我是想在调用 IoSetCompletionRoutine( Irp, FilemonHookDone, (PVOID) seqNum, TRUE, TRUE, TRUE );之前处理读取的缓冲数据。
Tom_lyd
驱动大牛
驱动大牛
  • 注册日期2001-09-02
  • 最后登录2016-01-09
  • 粉丝0
  • 关注0
  • 积分10分
  • 威望1点
  • 贡献值0点
  • 好评度1点
  • 原创分0分
  • 专家分0分
6楼#
发布于:2003-02-11 15:19
因为你的驱动程序只是一个过滤,真正执行文件读取的程序不是你的任务,而是FSD的任务,你需要把特定的IRP请求传给低层驱动程序(低层驱动程序又可以传给更低层的驱动,直至FSD从硬盘扇区中读取数据),待其返回后才可能取得数据。
程序执行到你的IRP_MJ_READ时,还没有开始读数据,怎么能看到数据呢?当然得等到低层驱动把数据准备好了,你才能看得到。你只不过需要准备一些合适的参数,如文件名、文件当前指针等。
Tom_lyd
Brain
驱动牛犊
驱动牛犊
  • 注册日期2003-01-11
  • 最后登录2007-06-06
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
7楼#
发布于:2003-02-11 16:05
老大,你说的“低层驱动把数据准备好了”怎么实现?我想知道具体的实现方法,用ZwReadFile可以吗?谢谢你的帮助
Tom_lyd
驱动大牛
驱动大牛
  • 注册日期2001-09-02
  • 最后登录2016-01-09
  • 粉丝0
  • 关注0
  • 积分10分
  • 威望1点
  • 贡献值0点
  • 好评度1点
  • 原创分0分
  • 专家分0分
8楼#
发布于:2003-02-11 16:42
既然你挂接了文件驱动,ZwReadFile调用又会导致你的IRP_MJ_READ最先被调用(文件系统过滤只允许在上层过滤,不允许在下层过滤,所以你的行为永远在先),然后,你又来一次ZwReadFile,这样周而而复始,死矣。当然这种情况也有办法避免。
我想不通的是,你为什么要在系统还没有完成读文件之前就想知道文件的内容呢?心急吃不了豆腐啊
如果你想直接读的话就不必通过驱动程序,可以直接去读FAT或者MFT,再直接扇区读取也可以。
Tom_lyd
vcmfc
驱动中牛
驱动中牛
  • 注册日期2001-03-23
  • 最后登录2008-01-28
  • 粉丝0
  • 关注0
  • 积分528分
  • 威望53点
  • 贡献值0点
  • 好评度52点
  • 原创分0分
  • 专家分0分
9楼#
发布于:2003-02-11 17:13
记住:只处理nocache的IRP,其它不要去读,否则,你死定了。 :D
vcmfc
驱动中牛
驱动中牛
  • 注册日期2001-03-23
  • 最后登录2008-01-28
  • 粉丝0
  • 关注0
  • 积分528分
  • 威望53点
  • 贡献值0点
  • 好评度52点
  • 原创分0分
  • 专家分0分
10楼#
发布于:2003-02-11 17:14
好好记住:sijun的话。是要点。 :D
Brain
驱动牛犊
驱动牛犊
  • 注册日期2003-01-11
  • 最后登录2007-06-06
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
11楼#
发布于:2003-02-11 17:15
有道理!但是我想作一个对指定文件夹加密的程序,因为我在mj_read 里能获得文件名,从而判断路径来对读到的指定文件夹的文件进行加密,如果在IoSetCompletionRoutine( Irp, FilemonHookDone, (PVOID) seqNum, TRUE, TRUE, TRUE );中的FilemonHookDone 函数中处理的话,得不到当前操作的文件名和句柄。望指教
Brain
驱动牛犊
驱动牛犊
  • 注册日期2003-01-11
  • 最后登录2007-06-06
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
12楼#
发布于:2003-02-11 17:17
to VCmfc :

好!!!我一定记住sijun的话!!!

不过他说什么了????能不能告诉我一下 ?

Coolice
驱动小牛
驱动小牛
  • 注册日期2002-11-13
  • 最后登录2003-08-22
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
13楼#
发布于:2003-02-11 17:50
呵呵,我帮他说吧
read/write只处理nocache和paging io
Brain
驱动牛犊
驱动牛犊
  • 注册日期2003-01-11
  • 最后登录2007-06-06
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
14楼#
发布于:2003-02-11 17:52
兄弟,起哄啊,我知道他说的什么意思!只不过是和他开个玩笑而已,你还当真了,呵呵!
Coolice
驱动小牛
驱动小牛
  • 注册日期2002-11-13
  • 最后登录2003-08-22
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
15楼#
发布于:2003-02-11 17:54
呵呵
Brain
驱动牛犊
驱动牛犊
  • 注册日期2003-01-11
  • 最后登录2007-06-06
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
16楼#
发布于:2003-02-13 14:35
问题解决了!谢谢各位!尤其Tom_lyd老大,真的让我懂得了很多
分给到下个帖子,请各位去一下
游客

返回顶部