阅读:4908回复:26
为什么我打开一个文件,却收不到IRP_MJ_READ
用记事本打开一个txt文件,却没有收到IRP_MJ_READ?保存文件的时候可以收到IRP_MJ_WRITE,有大虾知道怎么回事吗? :)
|
|
沙发#
发布于:2008-09-05 15:29
大牛们出来帮忙啊,搞不定这个问题啊?我是在磁盘驱动级别做的,也是有这个问题。还有就是read的偏移量与write的不一样,老是相差很大
|
|
板凳#
发布于:2008-07-15 15:03
是不是这是个秘密啊,大牛们对这个问题都是支支唔唔的
|
|
地板#
发布于:2008-07-10 12:34
总是没有结果
|
|
驱动小牛
![]() |
地下室#
发布于:2007-12-24 17:51
感谢,我也遇到同样的问题,写文件有Write ,读文件不见有Read,提示我一些思路了
|
5楼#
发布于:2007-12-21 16:33
???
|
|
|
6楼#
发布于:2007-11-05 14:09
sorry,说错了,不是收不到irp_mj_read,而是
Irp->Flags & (IRP_NOCACHE | IRP_PAGING_IO | IRP_SYNCHRONOUS_PAGING_IO) 总是为否 记事本是通过mapview 来读的吧,这个mapview函数对应的内刻的函数(我忘了)做的工作 也就是通过文件系统来读取数据的,但是 cache manager 对于这个函数的调用起了很大的帮助,就是它会map 整个文件到一个虚拟内存里面来,所以这个时候的 read ahead的 work thread 就会来发送IRP_PAGING_IO | IRP_SYNCHRONOUS_PAGING_IO 的irp 读写磁盘, 显然 记事本得到的数据都是从cache里面得到的,也就是说irp里面是不含有这些flag的。当这个文件很小的时候,也就只有一次的 物理 read了,不知道对不对啊 |
|
7楼#
发布于:2007-10-11 19:09
我刚刚说的不准确啊,要弄清楚工作的文件系统层次和Filter的目标
|
|
8楼#
发布于:2007-10-11 17:46
引用第16楼clarence于2007-10-10 09:18发表的 : 是的 |
|
9楼#
发布于:2007-10-11 16:44
又见stevphen
|
|
|
10楼#
发布于:2007-10-11 16:42
要看你具体在什么样的文件系统上工作。
|
|
11楼#
发布于:2007-10-10 09:18
楼上说的是NTFS里小于4K直接走$MFT的常驻属性?
|
|
12楼#
发布于:2007-10-10 00:00
关键是这个文件多大,小于4096的话,就可能了
|
|
13楼#
发布于:2007-10-09 15:28
引用第13楼icesword于2007-10-09 14:49发表的 : 读文件走Create?这个有些理解不了,能给解释一下吗? 读写数据不都要走RW? 或FastIo或IRP,怎么会在Create中做读写? |
|
14楼#
发布于:2007-10-09 14:49
打开文件还有一个途径是读缓存,如果这个文件以前打开过了,再打开就可能不走文件驱动,
而只是从内存中读出,确定这个问题可以flush一下清空缓存,flush后应当就走文件驱动了, 另外读文件不一定走read,也可能走create |
|
15楼#
发布于:2007-08-24 22:13
不仅仅是记事本,关键是哪个Cache。他从Cache读,WORD也一样。
|
|
16楼#
发布于:2007-08-23 16:08
是啊
|
|
17楼#
发布于:2007-08-23 15:12
记事本比较神奇的,
打开一下记事本一次,会把以前打开过的 txt文件都读一下. |
|
18楼#
发布于:2007-08-23 14:51
还是没人回答
|
|
19楼#
发布于:2007-08-22 10:53
没人回答。。。
|
|
上一页
下一页