阅读:2144回复:10
[问题]怎么根据FileObject判断它表示的是目录还是文件
好像ChuKuangRen的文章中有,还没看到,因为我都是只看 IFS DDK 联机帮助。
我是知道一种方法,并试验成功了,不过太笨了: 1、知道 FileObject,就可以使用 ObQueryNameString() 拼出 "\Device\HarddiskVolume1\..." 形式的文件全路径 2、InitializeObjectAttributes(), ZwCreateFile(), ZwQueryInformationFile() 查询这个文件的 FILE_STANDARD_INFORMATION,其中有一个分量BOOLEAN Directory 就表示这个是不是目录。 现在不想用 ZwXXX() 函数,否则要考虑重入和缓冲问题,有没有其它方法来判断FileObject 是否是目录,越简单越好,比如FILE_OBJECT有没有标志位啦 |
|
沙发#
发布于:2007-09-06 08:35
你在CREATE的时候,在获得文件名的同时就可以获得其的属性了。
|
|
|
板凳#
发布于:2007-09-06 12:38
引用第1楼wowocock于2007-09-06 08:35发表的 : 其实不然! |
|
|
地板#
发布于:2007-09-06 18:04
有些情况好像需要自己发IRP去查询到底是不是目录
|
|
|
地下室#
发布于:2007-09-06 18:47
引用第1楼wowocock于2007-09-06 08:35发表的 : 怎么个“获得文件名的同时就可以获得其的属性了”,是根据字符串形式么? 还有下发自己构造的IRP,是不是 IRP_MJ_QUERY_INFORMATION 型的啊? |
|
5楼#
发布于:2007-09-06 19:02
引用第1楼wowocock于2007-09-06 08:35发表的 : 你说的是不是 if ( FlagOn(IrpSp->Create.FileAttributes, FILE_ATTRIBUTE_DIRECTORY) ) 啊? |
|
6楼#
发布于:2007-09-06 20:49
引用第5楼silon212于2007-09-06 19:02发表的 : 根据上面传来的标志来判断,只能符合90%的情况,最好的方法是打开后发IRP查询。 |
|
|
禁止发言
![]() |
7楼#
发布于:2007-09-06 23:10
用户被禁言,该主题自动屏蔽! |
8楼#
发布于:2007-09-08 02:05
引用第6楼wowocock于2007-09-06 20:49发表的 : 多谢了。可是我测试的情况是很少有IrpSp->Parameters.Create.FileAttributes设置FILE_ATTRIBUTE_DIRECTORY的,事实上我测试的结果值都为0,一个Flag都没设置,不知道为什么。我是在下层DO已处理完IRP后,并且NT_SUCCESS()通过后做的测试。 |
|
9楼#
发布于:2007-09-13 14:51
引用第8楼silon212于2007-09-08 02:05发表的 : 不是通过FileAttributes, 是通过irpSp->Parameters.Create.Options来判断,楚狂人的教程中好像也是这么说的 |
|
|
10楼#
发布于:2007-09-14 09:11
create时可以根据 fcb的nodetype来判断
前提是你的irp已经发到下层处理了 |
|
|