文件(3)NTFS文件格式解析完了

          资料很多,但是想要真正搞清楚,还是得东拼西凑。。(毕竟没有官方公开的文档,NT4的那个结构都不全,害得我走了好多弯路,最后还是耐着性子看linux的码)

最近太迷糊,花在计算机的时间上不多。。

真正开始看ntfs的时候才发现它比想象中复杂得多(比起来fat设计的就有点太简单了。。)

网络上的资料已经描述的不少了,不想再废话,什么时候忘了就翻出来看看,自己描述起来估计没有个千八的字搞不定。

目前只搞成了解析,别的还要再看,不太像在这块花太多时间(比如创建文件什么的),网络上有不少以实现完全脱离ntfs.sys操作文件为目的开源项目:

http://code.google.com/p/ntfs-cmd/       programmeboy制造。。国产。。勤劳啊。。

http://code.google.com/p/phlcker/          FileSeek 源码 小日本的。。没用过。。貌似挺成熟。。

ROS 0.3.11 实现的还太少,主要就是看看对Run的处理,连目录都没实现

ntfs for linux 这个可以看看对目录的处理

ntfs-3g  书写风格就把我弄晕了。。。

简单概述下:MFT是磁盘中的“文件记录块”的大数组,保存了所有文件的信息,文件记录块是文件一组属性的集合(包括 文件名 文件数据 索引目录等),文件属性分为常驻(在记录块里),和非常驻(在另外的簇里)两种。目录是特殊的文件,以b+ tree组织,文件名是key,查询快。

ntfs里有几点乍一看没明白,记录下。

VCN----LCN

数据分块,以虚拟簇号来记录每段文件的顺序,通过非常驻属性的Form.Nonresident.MappingPairsOffset 来得到一个Run,通过转换得到vcn到lcn的映射,从而可以将不同块连接起来。

INDEX
b+ tree



举例File4和File8是存储于INDEX_ROOT的目录索引项(INDEX_ENTRY),并且被设置INDEX_ENTRY_NODE标志,证明是两个节点,文件名介于4和8的文件名被放置于一个非常驻的INDEX_ALLOCATION中,从文件属性中可以定位INDEX_ALLOCATION,节点INDEX_ENTRY的最后8字节表示其VCN,这样搜索起来才会快。。

NT4中定义了一个宏来得到VCN 
#define NtfsIndexEntryBlock(IE) (                                       \
*(PLONGLONG)((PCHAR)(IE) + (ULONG)(IE)->Length - sizeof(LONGLONG))  \
)



如图解析根目录,code挺简单挺丢人就不放了。。或者等把想搞的都搞明白了放个全的。。

预计明天写点人话。。先睡了。。
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值