NTFS文件系统解析

592 篇文章 7 订阅 ¥99.90 ¥99.00
106 篇文章 4 订阅

主文件表  (Master File Table, MFT)
  MFT 是由一条条 MFT 项(记录)所组成的,而且每项大小是固定的(一般为1KB),MFT保留了前16项用于特殊文件记录,称为元数据,
元数据在磁盘上是物理连续的,编号为0~15;如果$MFT的偏移为0x0C0000000, 那么下一项的偏移就是0x0C0000400,在下一项就是
0x0C0000800等等;

 

    MFT记录了整个卷的所有文件 (包括MFT本身、数据文件、文件夹等等) 信息,包括空间占用,文件基本属性,文件位置索引,创建时
间用户权限,加密信息等等,每一个文件在 MFT 中都有一个或多个 MFT 项记录文件属性信息,这里的属性包括数据,如果这个文件很小
在 MFT 项中就可以放下,那么这条属性就定义为常驻属性,常驻标志位记为1,如果是非常驻,则有一个索引指向另一条记录(称为一个运行)。

 第一条 MFT 项:  $MFT

  MFT 的第一项记录$MFT描述的是主分区表MFT本身,它的编号为0,MFT项的头部都是如下结构:

 typedef struct MFT_HEADER{
......
......
 }Mft_Header, *pMft_Header;
       
上面的头部结构体在扇区的数据偏移 0x00 ~0x38;
在0x38之后是4条属性,描述名称,时间,索引等等信息,最后以"FF FF FF FF"结束。它们分别以0x10,0x30,
0x80, 0xB0作为标志;这里的四种属性所描述的的信息类型见后;
   

 //------------------  属性头通用结构 ----
 typedef struct NTFSAttribute //所有偏移量均为相对于属性类型 Type 的偏移量
 {
     UCHAR Type[4];           // 属性类型 0x10, 0x20, 0x30, 0x40,...,0xF0,0x100
     UCHAR Length[4];         // 属性的长度 
      ......
 //--------  常驻属性和非常驻属性的公共部分 ----
     union CCommon
     {
     //---- 如果该属性为 常驻 属性时使用该结构 ----
         struct CResident
         {
             UCHAR StreamLength[4];        // 属性值的长度, 即属性具体内容的长度。"48 00 00 00"
             ......
         };
     //------- 如果该属性为 非常驻 属性时使用该结构 ----
         struct CNonResident
         {
             UCHAR StartVCN[8];            // 起始的 VCN 值(虚拟簇号:在一个文件中的内部簇编号,0起)
             UCHAR LastVCN[8];             // 最后的 VCN 值
             ......
         };
     };
 };
    由这个结构体可以知道,属性头的长度取决于是否有属性名,属性名长度是多少;是否常驻,如果常驻,属性内容长度是多少,如果非常驻,运行列表有多长。
   (0x08)日志文件序列号,它又叫文件参考号、文件引用号,一共 8Byte,前6个字节是文件称为文件号;后2个字节是文件顺序号,文件顺序号随重用而增加。

10H 类型:10H属性$STANDART_INFORMATION,描述的是文件的创建、访问、修改时间,传统属性,以及版本信息等等。
20H类型  $ATTRIBUTE_LIST
30H 类型  $FILE_NAME
    30H 类型属性描述的是文件或文件夹的名字和创建基本信息,
40H 属性  $OBJECT_ID
50H 属性  $SECURITY_DESCRIPTOR ( 安全描述符) 略。
60H 属性  $VOLUME_NAME 卷名属性
70H 属性  $VOLUME_INFORMATION  卷版本、状态
80H 属性  $DATA  容纳文件数据(未命名数据流),文件的大小一般指是未命名数据流的大小,没有长度限制,当它为常驻时,数据
  长度最小。它的结构为属性头加上数据流,如果数据流太大,则标记为非常驻,以运行的方式索引到外部。例如找一个MP3文件,从它的MFT
 项中0x80属性中可以看到它一定是非常驻,它的运行所指向的一系列簇就是音乐文件数据流;
90H 属性  $INDEX_ROOT  索引根。实现NTFS的B+树索引的根节点,总是常驻。索引根属性由属性头、索引根和索引项组成。属性头是通用
属性头的常驻部分。
A0H   属性  $INDEX_ALLOCATION  索引分配属性,也是索引,由属性头和运行列表组成,一般指向一个或多个目录文件(INDX文件,即4K缓存);
A0H属性和90H属性共同描述了磁盘文件和目录的 MFT 记录的位置。第5项MFT的A0H属性记录根目录的位置。
B0H   属性  $BITMAP 位图属性,虚拟簇使用(占用)情况,这条属性用在$MFT和索引中;在Bitmap文件中,每一个 Bit 代表分区的一个簇,置1代表其已使用;
第0个字节的第0位表示分区第0簇,之后依次递增。
C0H   属性  $REPARSE_POINT 重解析点。使应用程序为文件或目录关联一个应用程序数据块,详细略。
D0H   $EA_INFORMATION  扩充信息属性。为在NTFS下实现HPFS的OS/2子系统信息,及WinNT服务器的OS/2客户端应用而设置的,一般为非常驻;
E0H   $EA  扩充属性  也是为了实现NTFS下的 HPFS,一般为非常驻;
100H  $LOGGED_UTILITY_STREAM,EFS加密属性,存储用于实现EFS加密有关的信息,合法用户列表,解密密钥等等;

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值