rsman
驱动小牛
驱动小牛
  • 注册日期2003-01-14
  • 最后登录2016-01-22
  • 粉丝0
  • 关注0
  • 积分969分
  • 威望101点
  • 贡献值0点
  • 好评度92点
  • 原创分0分
  • 专家分0分
阅读:2610回复:7

在IRP_MJ_READ和IPR_MJ_WRITE时,如何判断FileObject是文件还是目录?

楼主#
更多 发布于:2003-01-26 21:33
请问,
在IRP_MJ_READ和IPR_MJ_WRITE时,如何判断FileObject是文件还是目录?

谢谢!

最新喜欢:

aasa2aasa2
rsman
luxs200
驱动牛犊
驱动牛犊
  • 注册日期2001-07-23
  • 最后登录2015-03-31
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
沙发#
发布于:2003-01-27 10:05
FileObject->FsContext中的前面两个字节表示是文件还是目录
对于FAT文件系统,OX503表示是目录,NTFS文件系统好象是0X703表示目录,0X705表示是文件,不是记得很清楚了。自己跟到文件驱动里面去看一下。
vcmfc
驱动中牛
驱动中牛
  • 注册日期2001-03-23
  • 最后登录2008-01-28
  • 粉丝0
  • 关注0
  • 积分528分
  • 威望53点
  • 贡献值0点
  • 好评度52点
  • 原创分0分
  • 专家分0分
板凳#
发布于:2003-01-30 11:47
接楼上的:

  FCB_COMMON_HEADER,好像是错的,自已机器不再身边。你查一下。

 FCB_COMMON_HEADER p = (FCB_COMMON_HEADER*) FileObject->FsContext;

 if(p->Nodetype == FCB_FCB) //文件

FCB_DCD //目录
还有根目录,


Coolice
驱动小牛
驱动小牛
  • 注册日期2002-11-13
  • 最后登录2003-08-22
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
地板#
发布于:2003-01-30 11:56
FsContext某些值没有公开定义,就是说可能随文件系统的不同而变化。建议在IRP_MJ_CREATE中判断是否是目录
vcmfc
驱动中牛
驱动中牛
  • 注册日期2001-03-23
  • 最后登录2008-01-28
  • 粉丝0
  • 关注0
  • 积分528分
  • 威望53点
  • 贡献值0点
  • 好评度52点
  • 原创分0分
  • 专家分0分
地下室#
发布于:2003-01-30 12:22
IRP_MJ_CRATE是可以,但那些Create.option在irp_mj_read等IRP是无效的。


而FileObject->FsContext我还没有发现有问题。 :D
vcmfc
驱动中牛
驱动中牛
  • 注册日期2001-03-23
  • 最后登录2008-01-28
  • 粉丝0
  • 关注0
  • 积分528分
  • 威望53点
  • 贡献值0点
  • 好评度52点
  • 原创分0分
  • 专家分0分
5楼#
发布于:2003-01-30 12:23
且第一个值是公开的,参考fastfat源代码。fastfat就是用这种方式区分你是文件或目录。
Coolice
驱动小牛
驱动小牛
  • 注册日期2002-11-13
  • 最后登录2003-08-22
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
6楼#
发布于:2003-01-30 12:53
这就是问题所在,fastfat是fat 文件系统的示例代码(不是真正Windows使用的代码),里面的值

#define FAT_NTC_DATA_HEADER              ((NODE_TYPE_CODE)0x0500)
#define FAT_NTC_VCB                      ((NODE_TYPE_CODE)0x0501)
#define FAT_NTC_FCB                      ((NODE_TYPE_CODE)0x0502)
#define FAT_NTC_DCB                      ((NODE_TYPE_CODE)0x0503)
#define FAT_NTC_ROOT_DCB                 ((NODE_TYPE_CODE)0x0504)
#define FAT_NTC_CCB                      ((NODE_TYPE_CODE)0x0507)
#define FAT_NTC_IRP_CONTEXT              ((NODE_TYPE_CODE)0x0508)

都是FASTFAT FSD自行定义的,注意前面有FAT_
rsman
驱动小牛
驱动小牛
  • 注册日期2003-01-14
  • 最后登录2016-01-22
  • 粉丝0
  • 关注0
  • 积分969分
  • 威望101点
  • 贡献值0点
  • 好评度92点
  • 原创分0分
  • 专家分0分
7楼#
发布于:2003-01-30 15:23
谢谢大家的关照,我目前是采用了VCMFC和VCMFC楼上的建议,Coolice的建议是完美的,但是,我短期内可能搞不定。
rsman
游客

返回顶部