C/C++ 如何实现文件在NTFS文件系统中的绝对定位(一) - 商帝国咨询 - 五略商书

C/C++ 如何实现文件在NTFS文件系统中的绝对定位(一)

商帝国咨询头像

阅读 13576 | 分类:文章

其实在上个月写完FAT32之后,我就有想写NTFS中文件定位的冲动,但是迟迟没有敢动笔,一方面是因为将近考试,没有足够的时间来理清NTFS庞大的结构,另一方面就向前面所说,NTFS的复杂度是FAT系列文件系统无法比拟的,正因为如此,对于依旧无法认识它全貌的我来说,写NTFS是需要很大勇气的,一旦写错,完全是误人子弟啊,虽然如此,我还是想在我这部分知识没有风化之前写下点什么,还是那句话,想看代码的QQ联系412163774,本人的代码完全开源,如果发现有什么不足之处,还请多多指教,因为我对C++只是一知半解,代码可能写的很糟糕,但是下面我所写的思路流程,绝对是没问题的!

关于实现文件在NTFS中的绝对定位,我们需要了解NTFS文件系统的2个主要结构: DBR与MFT,关于DBR,和FAT32一样,通常为0号逻辑扇区,为引导扇区,如果您对DBR不明白,请参考相关资料。关于MFT,是NTFS文件系统的”特有专利”,NTFS文件系统中的所有目录与文件,都会形成一个或多个MFT(不知道这算不算多个MFT,时间有点长了..但是在文件定位中,基本不可能出现一个目录多个MFT的情况),一个MFT占2个扇区.

 

   如果您对MFT不明白,请参考相关资料,网上讲解MFT的资料很多,google一下,比我权威多了,所以定位NTFS的文件,就是找到这个文件的MFT的首扇区,再根据MFT的参数,找到这个文件DATA区的详细地址(这部分您可以去阅读MFT的相关参数,这里不详细介绍)。

  好,现在进入正题,因为每个目录都有一个MFT,而子目录的MFT的首地址正是根据他的父目录的MFT来定位的,所以NTFS的文件系统中MFT正好形成了一棵树(是不是和FDT差不多,但是复杂多了),所以大家可以想到,要定位树上叶子的位置,你必须知道ROOT(根)的位置吧,自然而然,我们就必须得到根目录的MFT的首扇子区号。大家看到这里,想必都MFT有个大概的了解了吧,通过查阅MFT的相关资料,我们可以得知:5号MFT,遍是根目录的MFT区!!那么如何得到5号MFT的首扇区号呢.?我们可以通过DBR,通过DBR的参数(具体请自己查阅)我们可以获得0号MFT的首簇号,因为一个MFT占用2个扇区,我们可以轻松得知5号MFT的首扇区号(这个都不会算的话,那我也没办<

留言区(共0条)

暂无留言,快来抢占沙发~
作者声明:非原创
平台声明:文章及评论仅代表作者本人观点,五略商书系信息发布平台,仅提供信息存储空间服务,如有侵权,请联系13521509118。转载请注明作者和出处:转自五略商书m.shangdiguo.com,作者商帝国咨询!