阅读:1624回复:5
大牛们请帮忙看看,文件系统中3个不同文件为什么打开时总是打开第一个?先谢谢了!
本人最近在开发一个文件系统,参照的是Ext2 FSD的源码,里面共处理了9个IRP。
IRP_MJ_CREATE, IRP_MJ_CLOSE, IRP_MJ_READ, IRP_MJ_QUERY_INFORMATION, IRP_MJ_QUERY_VOLUME_INFORMATION, IRP_MJ_DIRECTORY_CONTROL, IRP_MJ_FILE_SYSTEM_CONTROL, IRP_MJ_DEVICE_CONTROL, IRP_MJ_CLEANUP 。 现在遇到一个问题很奇怪,恳请大牛们莅临指导,问题描述如下: 我用一个文件虚拟出了一个磁盘卷(比如F:盘),然后用我开发的文件系统来Mount 这个磁盘卷,然后我在我的文件系统里给这个磁盘卷一些虚拟的数据,我目前给定的 数据是:根目录、根目录下的文件1.txt、根目录下的文件2.txt、根目录下的文件 3.txt。那么很显然,在Windows的资源管理器中访问该磁盘卷时,将会在根目录下 看到1.txt、2.txt、3.txt。 而现在遇到的问题是,当我在资源管理器中用鼠标左键或者右键单击2.txt时, IRP_MJ_CREATE 中我可以正确的检测到文件名是2.txt;但是当我用文本编辑器比如 UltraEdit打开2.txt时,IRP_MJ_CREATE 中我检测到的文件名总是1.txt。 也就是说在资源管理器中用鼠标左键或者右键单击一个文件时,IRP_MJ_CREATE 中我 总可以正确的检测到对应的文件名;但是如果我要打开这个文件时,IRP_MJ_CREATE 中检测到的文件名总是第一个文件1.txt。 请教大牛们这会是什么原因啊?是不是在操作系统的某个层面上把我这3个不同的文件 都当作是同一个文件了?我该如何做才是正确的告诉了文件系统上面的管理层我这3个 文件是不同的?是不是还要处理某个IRP,或者我已经处理的IRP中需要特别处理这3个 文件的相关信息? 相关代码比较多,这里写不下,大牛们有兴趣可以跟我详谈,谢谢了先! 补充: 各位大牛们,你们好!不是我不贴出代码,是太多了,十几个文件呢,这里没法贴啊! 各位大牛们如果有兴趣,又恰好比较有空的话,可以直接在这里跟帖,给我你们的EMAIL,我给你们发过去,当然最好还是有MSN之类的联系方式,这样您要是有什么结果的话,我们就可以进行比较直接的沟通了! 我的MSN是: jerry_zmq@hotmail.com 再次感谢各位大牛们的莅临指导,谢谢了!你们要是有兴趣的话,可以加我MSN,我发代码给你们,请您们帮我看看! |
|
沙发#
发布于:2007-03-27 15:55
create 会被调用很多次的,有你需要,系统需要的等等。总之,create来了,并不一定是你需要的。所以打开文件时,你只关心你的文件是怎么处理的就可以了。
|
|
板凳#
发布于:2007-03-27 16:13
是的,我已经在我的 IRP_MJ_CREATE 中做了处理,只有打开文件时,才会打印出需要打开文件的相关信息,我现在遇到的问题是:明明我打开的是2.txt文件,但是最后UltraEdit之类的软件打开的都是1.txt,而不是2.txt。后来我在调试跟踪的时候发现在 IRP_MJ_CREATE 的时候文件名就已经不是2.txt而是1.txt了,所以当然最后打开的是1.txt了,因此这里面应该有什么地方我没有弄对的,可是我已经很仔细的看了资料和跟踪了数据,一直就没找到原因!哎。。。
|
|
地板#
发布于:2007-03-27 21:24
代码贴出来看看呢,凭空说可不行。
|
|
|
地下室#
发布于:2007-03-27 22:27
You can try to use FileMon or FileSpy to trace all IRPs sent down to your file system. Maybe the error is in MJ_DIRECTORY_CONTROL.
|
|
5楼#
发布于:2007-03-28 09:18
各位大牛们,你们好!不是我不贴出代码,是太多了,十几个文件呢,这里没法贴啊!
各位大牛们如果有兴趣,又恰好比较有空的话,可以直接在这里跟帖,给我你们的EMAIL,我给你们发过去,当然最好还是有MSN之类的联系方式,这样您要是有什么结果的话,我们就可以进行比较直接的沟通了! 我的MSN是: jerry_zmq@hotmail.com 再次感谢楼上各位大牛们的莅临指导,谢谢了!你们要是有兴趣的话,可以加我MSN,我发代码给你们,请您们帮我看看! |
|