jerry_zmq
驱动牛犊
驱动牛犊
  • 注册日期2006-04-19
  • 最后登录2016-01-09
  • 粉丝0
  • 关注0
  • 积分500分
  • 威望51点
  • 贡献值0点
  • 好评度50点
  • 原创分0分
  • 专家分0分
阅读:1624回复:5

大牛们请帮忙看看,文件系统中3个不同文件为什么打开时总是打开第一个?先谢谢了!

楼主#
更多 发布于:2007-03-27 15:46
本人最近在开发一个文件系统,参照的是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,我发代码给你们,请您们帮我看看!
phenix_xiaomei
驱动小牛
驱动小牛
  • 注册日期2002-03-08
  • 最后登录2016-01-07
  • 粉丝0
  • 关注0
  • 积分6分
  • 威望57点
  • 贡献值0点
  • 好评度24点
  • 原创分0分
  • 专家分0分
沙发#
发布于:2007-03-27 15:55
create 会被调用很多次的,有你需要,系统需要的等等。总之,create来了,并不一定是你需要的。所以打开文件时,你只关心你的文件是怎么处理的就可以了。
jerry_zmq
驱动牛犊
驱动牛犊
  • 注册日期2006-04-19
  • 最后登录2016-01-09
  • 粉丝0
  • 关注0
  • 积分500分
  • 威望51点
  • 贡献值0点
  • 好评度50点
  • 原创分0分
  • 专家分0分
板凳#
发布于:2007-03-27 16:13
是的,我已经在我的 IRP_MJ_CREATE 中做了处理,只有打开文件时,才会打印出需要打开文件的相关信息,我现在遇到的问题是:明明我打开的是2.txt文件,但是最后UltraEdit之类的软件打开的都是1.txt,而不是2.txt。后来我在调试跟踪的时候发现在 IRP_MJ_CREATE 的时候文件名就已经不是2.txt而是1.txt了,所以当然最后打开的是1.txt了,因此这里面应该有什么地方我没有弄对的,可是我已经很仔细的看了资料和跟踪了数据,一直就没找到原因!哎。。。
Pegram
论坛版主
论坛版主
  • 注册日期2005-12-03
  • 最后登录2013-08-23
  • 粉丝13
  • 关注5
  • 积分1333分
  • 威望4717点
  • 贡献值1点
  • 好评度78点
  • 原创分0分
  • 专家分2分
地板#
发布于:2007-03-27 21:24
代码贴出来看看呢,凭空说可不行。
《寒江独钓》与《竹林蹊径》的合作作者。精通USB开发,设计了CY001 USB驱动套件(http://bbs.driverdevelop.com/read.php?tid-119314.html)。
michaelgz
论坛版主
论坛版主
  • 注册日期2005-01-26
  • 最后登录2012-10-22
  • 粉丝1
  • 关注1
  • 积分150分
  • 威望1524点
  • 贡献值1点
  • 好评度213点
  • 原创分0分
  • 专家分2分
地下室#
发布于: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.
jerry_zmq
驱动牛犊
驱动牛犊
  • 注册日期2006-04-19
  • 最后登录2016-01-09
  • 粉丝0
  • 关注0
  • 积分500分
  • 威望51点
  • 贡献值0点
  • 好评度50点
  • 原创分0分
  • 专家分0分
5楼#
发布于:2007-03-28 09:18
各位大牛们,你们好!不是我不贴出代码,是太多了,十几个文件呢,这里没法贴啊!
各位大牛们如果有兴趣,又恰好比较有空的话,可以直接在这里跟帖,给我你们的EMAIL,我给你们发过去,当然最好还是有MSN之类的联系方式,这样您要是有什么结果的话,我们就可以进行比较直接的沟通了!

我的MSN是: jerry_zmq@hotmail.com

再次感谢楼上各位大牛们的莅临指导,谢谢了!你们要是有兴趣的话,可以加我MSN,我发代码给你们,请您们帮我看看!
游客

返回顶部