首页
社区
课程
招聘
关于获得文件句柄的问题
发表于: 2007-1-9 11:33 4857

关于获得文件句柄的问题

2007-1-9 11:33
4857
假设我的C盘为NTFS格式, 使用以下命令可以添加一个流:
c:\abc\efg>dir > ..:stream1.txt
且这个流文件的宿主是"..", 但我无法获得".."的句柄,
使用CreateFileW或zwCreateFile都不行(对普通文件或
目录则可以,单单是对..不行),其中zwCreateFile
的返回值是STATUS_OBJECT_NAME_INVALID

使用软件lads则可以正确查询到".."下的流,请问我要怎
样才能打开".."?

[注意]传递专业知识、拓宽行业人脉——看雪讲师团队等你加入!

收藏
免费 0
支持
分享
最新回复 (4)
雪    币: 207
活跃值: (10)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
2
..就是代表上一级目录吧,你直接获取当前目录,然后当字符串处理一下,用CreateFile打开就可以了吧
2007-1-10 02:45
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
不是的, 是要打开c:\abc\efg\..的句柄(指的是..),而不是c:\abc的句柄,
一般情况下".."指的是上级目录,但它本身也可以有流文件,必须获得它的
句柄(而不是它所指向的上级目录的句柄),才能访问流.不知这样说清楚吗?
2007-1-10 09:57
0
雪    币: 207
活跃值: (10)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
4
了解你的意思了

我跟踪了一下lads他是用findfirstfile/findnextfile
查找文件的,如果有..的数据流的话,该数据流名字是(假设c:\abc\..)\\?\c:\abc\E2E2~1
用CreateFileW打开就可以得到handle,然后用ntdll.ZwQueryInformationFile函数就可以得到详细的信息了

01CD0AB8  28 00 00 00 0E 00 00 00 00 00 00 00 00 00 00 00  (..............
01CD0AC8  00 00 00 00 00 00 00 00 3A 00 3A 00 24 00 44 00  ........:.:.$.D.
01CD0AD8  41 00 54 00 41 00 00 00 00 00 00 00 1C 00 00 00  A.T.A..........
01CD0AE8  89 01 00 00 00 00 00 00 90 01 00 00 00 00 00 00  ?......?......
01CD0AF8  3A 00 66 00 69 00 72 00 2E 00 74 00 78 00 74 00  :.f.i.r...t.x.t.
01CD0B08  3A 00 24 00 44 00 41 00 54 00 41 00 00 00 00 00  :.$.D.A.T.A.....

这是我的信息,我用的是dir >..:fir.txt建立的流
2007-1-11 00:47
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
5
非常感谢,使用E2E2~1确实可以读到了,但不理解的是E2E2~1是表示什么呢?
2007-1-11 08:06
0
游客
登录 | 注册 方可回帖
返回
//