基础篇
本篇主要介绍 NTFS文件系统的基本特性和扇区存储特征。同时,为了能与其他主流文件系统进行比较,以加深对NTFS文件系统的认识,本篇还介绍了FAT16和FAT 32两种文件系统的基本特性,以及它们在硬盘扇区中的存储规律。
NTFS文件系统虽然与两种 FAT文件系统不同,但它们在扇区存储规律上,还是有某些共通或相似的地方的。
本书讲述的两大主题,第一是使用作者编写的WIN32工具程序,对硬盘扇区进行各种操作;第二是使用读写物理硬盘扇区的方法,去探索NTFS文件系统的扇区存储规律。掌握了NTFS文件系统的扇区存储规律,就能使操作者不受操作系统和文件系统的限制,实现一些用其他方法无法完成的操作目的。譬如从系统已被破坏的硬盘上恢复文件;排除一些常见的由于系统数据受损,而出现的硬盘逻辑故障;通过修改位图文件的扇区数据,来达到隐藏机密文件的目的;移植被EFS加密的文件数据;移植被压缩的文件数据;通过直接修改扇区的字节数据,取得原先没有的操作权限,等等。
第1章 FAT文件系统的数据结构
硬盘在分区以后,其每一个逻辑驱动器都必须建立起完整的数据结构,才能正常使用。FAT文件系统和NTFS文件系统的数据结构大部分都不相同,只在存储系统分区数据的扇区上,有某些相同或相似的地方。
FAT文件系统的数据结构由6部分组成,分别是主引导记录、主分区表或分区链表、分区引导记录、文件分配表、文件目录表和数据区。这里需要说明的是,主引导记录和主分区表都只有一个,共同存储在一个扇区中。如果使用CHS(柱面数、磁头数、扇区数)寻址方式,这个扇区是0柱面0磁头1扇区;如果使用线性寻址方式,这个扇区是0号扇区。从硬盘分区后的区域结构上划分的话,该扇区可以认为是属于第1个逻辑驱动器,也就是通常所说的C盘。而其他的逻辑驱动器就没有主引导记录和主分区表了,在这些逻辑驱动器所属的第1个系统隐藏扇区上,只有分区链表。
NTFS文件系统的数据结构中,用于系统引导的部分基本与FAT文件系统相同,如主引导记录、主分区表或分区链表、分区引导记录这3部分。不过在这3部分中,很多字段的数据所表示的内容是完全不同的,只是都有相同的称呼罢了。
FAT文件系统的另外3部分,即文件分配表、文件目录表和数据区,在NTFS文件系统中则不存在。NTFS文件系统使用的是“磁盘上的任何事物都为文件”的存储模式,甚至连系统使用的引导文件数据,都作为文件存储在磁盘上。
了解文件系统的数据结构和扇区存储规律,是对物理硬盘扇区进行读写操作的基础,也是将扇区读写技术应用于系统修复和文件恢复的先决条件。因为一个硬盘上有很多逻辑驱动器,这些逻辑驱动器可能使用不同的文件系统,而对于不同的文件系统,读写与分析扇区数据的方法是完全不相同的。
本章先介绍FAT文件系统的数据结构。
1.1 主引导记录
硬盘的主引导记录也称MBR,存储在0柱面0磁头1扇区。如果读写扇区时采用线性寻址方式,则该扇区的编号为“0”。在本书后面的章节里,扇区地址全部使用线性寻址方式来表示。该扇区的512字节有3部分内容,除了主引导记录外,还有分区表和结束标志55 AA。
主引导记录的作用非常重要,它是硬盘启动时最先加载的扇区数据。下面通过分析硬盘的启动过程,来说明它的重要性。
(1)计算机系统接通电源以后,主板BIOS加电进行自检。自检的内容很多,是一个很复杂的过程,这里只介绍与硬盘有关的部分。
(2)将硬盘第1个扇区,也就是0柱面0磁头1扇区(线性寻址时是0号扇区)的内容
读入内存。
(3)检查结束标志,也就是扇区最后两个字节的值是否等于“aa55H”(存储顺序是低字节在前,高字节在后)。若不等则打印屏幕提示,然后死机。
(4)执行主引导记录中的程序,将控制权转交给主引导程序。
(5)主引导程序首先将自己读入内存,然后查找在分区表中是否有活动分区。找到活动分区以后,将分区引导记录读入内存。
(6)检查结束标志是否等于“aa55H”,然后执行分区引导记录中的启动程序,将控制权交给操作系统。
(7)操作系统加载系统文件,计算机启动。
通过对以上过程的分析可以看出,如果主引导记录不正常,后面所有的启动过程都不可能正常执行。
有一种特殊情况,使计算机启动过程的前两步与上面介绍的不一样。如果硬盘上安装了多系统引导软件,如Partition Magician分区软件,则该软件将主引导记录替换成自己的一段程序。这段程序将BIOS引向软件设置的专用分区,然后根据操作者的选择激活某一个分区,再进入正常的启动过程。类似Partition Magician这样的分区软件还有很多,它们各有自己的特点,这些第三方软件都不在本书的讨论范围之内。通常情况下,一块硬盘上只有一个主引导记录。
现在用“读硬盘扇区数据.EXE”程序将一块硬盘的主引导记录读出,程序运行界面如图1-1所示。“读硬盘扇区数据.EXE”程序将在《工具篇》中介绍,现在先使用该程序的运行结果。
图1-1
图1-1所示的左图是程序运行的主窗口。在主窗口的编辑框中显示了数值“10084”,这是主引导记录所在扇区中,全部字节的累加算术和。为什么要取这个数值的原因将在《工具篇》中详细说明。
图1-1所示的右图是程序运行后弹出的对话框。该对话框中显示了512字节的十六进制值,每行显示16字节,共显示32行。
在图1-1中,位移从00H到1bdH就是主引导记录。如果用扇区内的字节编号来表示某一字节,设起始号为1,就是从第1到第446字节。为什么要使用位移和扇区内编号这两种计算方式呢?因为在今后分析扇区数据时,或者是手工编制扇区中的字节数据时,某些场合用编号计算是比较方便的。
譬如在《工具篇》中介绍的“修改扇区文件数据.EXE”程序,可以将每个扇区的512字节,按照每行16字节,一共32行的格式显示在屏幕上。如果从1开始编号,则感觉很有对称性,容易查找某一字节。如果用位移值计算,就感觉不太方便。
字节位移是从0开始计数,而字节编号是从1开始编号,所以对同一字节来说,字节编号的值要比字节位移的值大1。
位移从1beH到1fdH是分区表,字节编号为447到510。有关分区表的内容在下一节讨论。
最后两字节是结束标志“55 AA”。因为两字节组成一个字,写入磁盘的顺序是低字节在前,高字节在后,所以“55 AA”写成十六进制应为“aa55H”。
结束标志“55 AA”是查找系统数据扇区的标志,据此对扇区进行搜索,可用于寻找主引导记录、主分区表或分区链表所在的扇区地址,也可以具此查找分区引导记录的扇区地址。
主引导记录扇区所在的磁道,通常称为0磁道,它属于隐藏磁道,这个磁道的63个扇区属于隐藏扇区。操作系统的所有命令,除了FDISK以外都不能访问它们。就连格式化程序FORMAT,对这些隐藏扇区也无能为力。
主引导记录和主分区表的数据,只占用了0磁道的第1个扇区,系统对其他的62个扇区弃之不用。正因为如此,0磁道的剩余62个扇区就成了一些病毒程序代码、操作系统的引导代码、应用软件用于自我保护的识别标记、BIOS功能扩展程序代码的栖息之地。
经常监测并分析0磁道的扇区数据变化,就能发现很多不为人知的秘密,作者举一例来说明这个问题。
美国的MACROMEDIA公司堪称网页制作软件的鼻祖,该公司的三大软件颇具影响力。这三款软件是:网页制作软件DREAMWEAVER MX、图象处理软件FIREWORKS MX和动画制作软件FLASH MX。
这三款软件有试用版,从操作者安装使用开始,时间限制为30天。超过试用期后,软件就不能运行了。即使重新安装操作系统和这三款软件,甚至将硬盘格式化或重新分区,也无济于事。
那么这三款软件采用了什么保护机制呢?作者通过对0磁道扇区数据的监测,发现了这三款软件的一个秘密。
这三款软件中的每一款软件安装以后,都会向0磁道的第32扇区写入一部分识别代码。当操作者对逻辑盘进行格式化,或是对整个硬盘重新分区时,所运行的程序都不会访问第32扇区,所以软件的时间限制仍然有效。
作者用扇区清零程序将32扇区的数据清掉,然后再安装这三款软件的试用版,则可以继续使用了。
采取这种保护方式的软件还有很多,只要经常监测0磁道并用心去分析,就能发现许多不为人知的秘密。
下面用作者使用的两块硬盘运行“监视0磁道变化.EXE”程序,将两块硬盘的0磁道63个扇区的数据分别读出,然后进行比较。所使用的工具程序在《工具篇》中再详细介绍。
先看一块新硬盘的显示数据,如图1-2所示。
图1-2
图1-2所示的扇区编号没有使用线性寻址的表示方法,而是使用了1~63的编号方式,这是为了强调在硬盘的结构中,每磁道有63个扇区的虚拟物理概念。
从图1-2所示的扇区字节算术和可以看出,只有第1扇区写有数据,其他62个扇区全部为0。这是因为该硬盘使用不久,还没有写入其他程序的垃圾代码。
再看一块老硬盘的显示数据,如图1-3所示。
图1-3
如图1-3所示,除了第1扇区写有系统引导数据以外,还有很多扇区也写有数据。与第1扇区字节算术和相同的,如第6扇区,是作者备份的系统数据,目的是日后出现引导故障时修复硬盘。与第1扇区字节算术和不相同的扇区,就是硬盘使用三年多来,各种应用软件写入的垃圾代码。
1.2 主分区表
主分区表占用0号扇区(线性寻址)的64字节,位移从1beH到1fdH,字节编号为447到510。它共有4个分区表项,每个分区表项占16字节。一般只使用2个分区表项,另外2个分区表项全为0。分区表项的格式见表1-1。
表1-1分区表项各字段值的内容
注:偏移量和字节编号是第1个分区表项的值,后面的分区表项按照相同的规律递增。
通常说的分区表指的是主分区表,另外在扩展分区的每一个逻辑驱动器中,都有一个分区链表,对它们的解读方法基本是相同的。
下面将图1-1所示的两个分区表项单独列出来进行分析。
分区表项一。(位移1beH至1cdH,编号447到462)
第1个分区表项记录的是本分区的有关参数。
将16字节按表1-1的格式分为8段,分别进行说明。
第1、2、4、5段与表中的内容一样,不必重复。
第3段是2字节,表示扇区值和柱面值,因为本书介绍的工具程序使用线性寻址方式,所以对本字段的内容就没有必要详细解读了。
第6段是2字节,也表示扇区值和柱面值。
第7段是一个双字,存储顺序低字节在前,高字节在后,写成十六进制是“0000003fH”,十进制是“63”。
第8段是一个双字,它的值是十六进制为“003ffa86H”,十进制为“4192902”。
分区表项二。(位移1ceH至1ddH,编号463到478)
第2个分区表项记录的是下一分区的有关参数。
将16字节按表1-1的格式分为8段,各字段的解读方法与第1个分区表项相同,就不重复说明了。
分区链表的字段组成与解读方法与主分区表基本相同,读者可自行分析研究。需要说明的是,最后一个逻辑驱动器的分区链表中,只使用了1个分区表项,其他3个分区表项的字节数据全为0。
1.3分区引导记录
硬盘的主引导记录只有一个,存储在硬盘的线性0号扇区上。而硬盘的分区引导记录不止一个,每一个逻辑驱动器都有一个分区引导记录。如果将一个硬盘分为C、D、E、F、G5个逻辑驱动器,就应该有5个分区引导记录,分别存储在各个逻辑驱动器的第1个逻辑扇区中。
分区引导记录主要由4部分组成。
(1)BIOS参数记录块BPB(BIOS Parameter Block)。
(2)磁盘标志记录表。
(3)分区引导记录代码区。
(4)结束标志“55 AA”。
与本书内容相关的是第1和第4部分,对第2和第3部分不进行讨论。
BIOS参数记录块BPB(简称BPB表)所记录的有关参数,能帮助操作者确定分区的容量大小、文件分配表FAT的位置和大小、文件目录表FDT的位置。BPB表的结构与使用的文件系统有关,本节讨论FAT16和FAT32两种文件系统的BPB表结构。
结束标志“55 AA”是系统识别引导扇区的标识,也是使用工具程序对硬盘扇区进行搜索,用于寻找分区引导记录所在扇区地址的依据。
1.3.1 FAT16文件系统的BPB表
FAT16文件系统BPB表从扇区字节位移0bH开始,用字节编号计算,就是第12字节, BPB表共占用25字节。
FAT16文件系统BPB表的结构见表1-2。
表1-2 FAT16文件系统BPB表的结构
下面用“读硬盘扇区数据.EXE”程序将一个逻辑驱动器的引导记录读出来,然后结合表1-2进行分析,程序运行界面如图1-4所示。
图1-4
BPB表占用的字节数较多,各个字段值所表示的内容也较为复杂。为了便于分析,下面将BPB表的内容单独列出来。
从第12字节开始,将25字节按表1-2的格式分为12段,分别进行说明。
第1段是1个字,它的值为200H,等于512,说明每个扇区有512字节。
第2段是1字节,值为64,说明每个簇包含64个扇区,则每个簇的字节数是:
64×512=32768。关于簇的概念,在后面有关章节中再作介绍。
第3段是1个字,值为1,说明有1个保留扇区。
第4段是1字节,值为2,说明有2个FAT表。
第5段是1个字,值为512,说明有512个根目录登记项数。因为每个根目录登记项固定占用32字节,据此可算出FDT表总共占用32个扇区。
第6段是1字,在硬盘中设为0。
第7段是1字节,固定为f8H。
第8段是1个字,值为256,说明每个FAT表占用256个扇区。
第9段是1个字,值为63,说明每个磁道划分成63个扇区。
第10段是1个字,值为255,说明磁头数最大是255,这个数值的含义需要进一步解释。这个参数并不是硬盘的物理磁头数,它是BIOS磁盘服务程序为了管理大容量硬盘,采用位移变换后形成的值。在CHS扇区寻址方式中,柱面用10位二进制数表示,其最大值为1024。硬盘的柱面数一般都超过了1024,因此BIOS磁盘服务程序采用了减少柱面数,增加磁头数的移位算法。
举例说明一下,假如一个硬盘有8192个柱面和16个磁头。很明显在CHS寻址方式中,无法表示全部柱面数。这时由BIOS磁盘服务程序将柱面数换算成8192÷8=1024,将磁头数换算成16×8=128。这样既保证硬盘的容量不变,又能使操作系统或应用程序访问到所有的硬盘扇区。
第11段是1个双字,值为63,说明有63个隐藏扇区。
第12段是1个双字,值为4192865,这是逻辑驱动器的总扇区数,但它不包含第11段中的隐藏扇区数。
1.3.2 FAT32文件系统的BPB表
FAT32文件系统BPB表也从扇区字节位移0bH开始,占用53字节。因为FAT16文件系统中的有些磁盘参数在FAT32文件系统中已不适用,必须进行扩充。具体做法是将FAT16文件系统中使用的25字节仍然保留,适用的数据项继续使用,需要扩充的数据项移到后面的28字节里去。目前这28字节只使用了很少一部分,剩下的字节全为0,供系统继续扩充时使用。
FAT32文件系统BPB表的结构见表1-3。
表1-3 FAT32文件系统BPB表的结构
现在将使用FAT32文件系统的一个逻辑驱动器的引导记录读出来,结合表1-3进行分析。程序运行界面如图1-5所示。
图1-5
为了便于分析,将BPB表内容分两部分单独列出来,分段进行介绍。
(1)前25字节。
与FAT16的BPB表相同的数据项不再分析,只分析不同的部分。
第2段的值是8,即每簇有8个扇区。可以看出FAT32的簇比FAT16的簇小得多,这就是FAT32能够节省磁盘空间的原因。因为数据是按簇存储的,即使一个很小的文件也必须至少分配给它一个簇的存储空间,这个簇里没有使用的扇区就不能再分配给其他文件使用了。而FAT16的簇比较大,所以浪费的磁盘空间就多一些。
第3段的值是32,即保留了32个扇区。因为FAT32文件系统的引导记录要占用多个扇区,所以将原来的1个保留扇区增加到32个。
第5段和第8段因需要扩充,所以弃之不用,将有关数据转移到后面的28字节里去。
(2)后28字节。
第1段的参数是每个FAT表占用的扇区数,值是7994。可以看出FAT32文件系统的簇虽然小了,但FAT表占用的扇区数却增加了很多。这就是FAT32文件系统的文件检索速度比FAT16文件系统慢的原因。
第3段是根目录起始簇号,值为2。有2个簇被系统占用。
第5段的值是6,说明引导记录占用6个扇区。
1.4文件分配表FAT
FAT文件系统在管理磁盘上的用户文件时,使用了文件分配表的管理方式。不过系统引导所需要的数据,不在文件分配表的管理范围之内。在这一点上与NTFS文件系统的存储方式是完全不相同的,NTFS文件系统将磁盘上的所有事物都看作文件,不管是用户的还是系统的。
文件分配表在FAT文件系统中占有非常重要的地位,对文件的所有操作,包括读、写、修改和复制,都要依赖于文件分配表中的有关记录。正因为如此,当初设计者将文件分配表作了两份相同的拷贝存储在磁盘上。
1.4.1扇区分簇管理
操作系统或应用程序在将数据写入一个磁盘文件时,必须在磁盘上找到可以使用的未用扇区。反过来要将数据从磁盘文件中读出时,也要在磁盘上找到已经储存了相应数据的有关扇区。要查找扇区必须知道扇区的地址,文件分配表FAT就是记录扇区地址的。
因为硬盘的扇区非常多,如果将每个扇区的地址都记录在文件分配表里,势必造成文件分配表体积庞大,查找时效率将会很低。为解决这个问题,采用了将扇区分组管理的方法。分组的过程称作扇区分簇,是由高级格式化程序在格式化磁盘时完成的。
扇区分簇以后,将每个簇的地址记录到文件分配表FAT里去。由于一个簇能包含很多扇区,所以文件分配表的体积减小了,查找的速度就提高了。
一个簇能包含多少扇区,是由文件系统和分区的大小决定的,在使用FAT16和FAT32两种文件系统时,分区大小和簇大小以及每簇扇区数的关系见表1-4。
表1-4分区大小与簇的对应关系
1.4.2 簇链和文件检索过程
当使用一个新格式化的逻辑驱动器时,文件数据存放的簇号是连续的。使用一段时间以后,由于经常对文件进行删除、拷贝和修改操作,每个文件分配的簇号就不一定是连续的了。为了确保在存取文件时能够检索到所有连续或不连续的扇区地址,文件分配表采用了“簇链”的记录方式。
当需要从磁盘上读取一个文件时,首先从文件目录表中找到该文件的目录登记项。继而从目录登记项的有关字段,查到分配给该文件的第一个簇号,根据第一簇号的内容可以计算出两组数据。
其中一组数据指出了文件在数据区DATA里的第一簇扇区首地址,从第一簇扇区首地址开始,数据是连续存放的,连续存放多少个扇区由分区格式和分区大小决定,表1-4中列出了它们的对应关系。
另外一组数据指出了FAT表内簇登记项的地址,如果其值是结束标志“ffffH”(FAT16格式)或“0fffffffH”(FAT32格式),说明文件至此已经结束。如果不是结束标志,则该登记项的值为第二个簇号,据此又可以计算出两组数据,继而确定文件在数据区里第二簇扇区首地址和FAT表内第二个簇登记项的地址。
继续重复上面的过程,就可以得到文件在DATA区里的全部数据,以及文件在FAT表里所有簇登记项的地址。
详细了解文件数据存取的全过程,就可以从遭到破坏、不能启动的硬盘上,利用读取物理硬盘扇区的工具程序把文件数据读出来。
当需要在磁盘上建立一个新文件时,首先顺序检索FAT表,找到第一个可用簇,可用簇登记项的值为“0000H”(FAT16)或“00000000H”(FAT32)。将该簇作为起始簇,写入文件目录表FDT的相关登记项的起始簇字段中。然后继续检索后面的可用簇,找到以后将其簇号写入第一个可用簇项内。
按照以上过程进行下去,将满足文件长度所需的簇数全部找到。使每一个簇项的值指向下一个所需簇项,在最后的簇登记项内写入结束标志“ffffH”(FAT16)或“0fffffffH”(FAT32),于是一条能够检索整个文件的“簇链”就形成了。
当需要对文件进行扩展时,先检索FAT表,找到1可用簇。将簇项的内容置为结束标志,并将文件原来的最后簇项值修改为指向此可用簇。以此类推,直到满足文件的全部扩展要求。
当删除文件时,除了将文件目录表中登记项的第1字节改为e5H,还要把该文件在FAT表的“簇链”中所对应的簇项全部清零,这些被清零的簇项又可以供其他文件使用。不过在删除文件的操作结束以后,目录登记项的其他字段仍然保存完好,只是文件名的第1字节变成了e5H,并且文件存储在扇区里的所有数据仍然存在。这时只要FAT表中被清零的簇项没有被新文件使用,就可以运行相关软件恢复被删除的文件。
FAT表记录了磁盘文件对磁盘使用情况的信息,其中包含所有未分配的、已分配的或标记为坏的盘簇的信息。
FAT表只记录磁盘文件对磁盘的占用信息,对于系统保留的控制信息并不由FAT表中的盘簇表示。这些保留信息包括引导扇区、分区表、FAT表本身占用的扇区以及文件目录表FDT占用的扇区。
1.4.3 FAT表扇区寻址
FAT表在磁盘文件系统中的地位是非常重要的,为了使磁盘文件的操作安全可靠,文件系统的设计者们制订了两个内容相同的FAT表。虽然当第一个FAT表出错时,操作系统并不利用第二个FAT表去修复它,但技术人员可以使用有关的软件,用第二个FAT表去修复它。
当硬盘的系统控制信息遭到轻微的破坏时,可以通过各种方法去修复它。如上面所讲的四部分系统保留信息,在某一部分出现错误时,可以采用从其他计算机上移植的方法,或是采用手工编制扇区数据的方法进行修复。
但是当这些控制信息严重损坏,譬如分区表链和分区引导记录严重损坏时,上述方法就无能为力了。一般来说,在这种情况下只有重新分区、格式化,硬盘上的所有数据也就全部丢失了。
硬盘的系统控制信息遭到破坏时,一般情况下FAT表被破坏的可能性比较小。特别是第2个FAT表一般能够保存完好,因为第2个FAT表很少受到应用程序的访问。这时如果使用物理硬盘扇区的读写技术,就有可能从硬盘上恢复出重要数据来。这种操作的对象是针对整个硬盘,而不用考虑硬盘的分区情况,也不用考虑硬盘上安装的是什么操作系统。
查找FAT表首扇区地址的方法很简单,可以根据FAT表的特征标记,使用查找扇区特征的工具程序进行查找。不管是FAT16文件系统还是FAT32文件系统,每个FAT表的首扇区里前两字节都是F8 FF。
1.5文件目录表FDT
操作系统为了管理磁盘上的目录和文件,在特定的扇区上建立了一个文件目录表FDT,它是由高级格式化程序FORMAT在格式化磁盘时建立的。
FAT16分区格式的FDT表占用固定的32个扇区,扇区地址紧跟在第2个FAT表之后。FAT32分区格式没有固定的FDT表,在第2个FAT表之后就是数据区DATA。目录名和文件名也作为数据对待,存放在数据区内。
两种分区格式都使用一个32字节长的“目录登记项”,来说明目录或文件的有关特性。FAT16分区的目录登记项存放在FDT表里,FAT32分区的目录登记项存放在数据区里。表1-5列出了目录登记项的各字段内容。
表1-5目录登记项各字段值的内容
表1-5将一个目录登记项的32字节划分为8个字段,下面对其中比较重要的字段进行分析。
第1段是文件名,占用8字节。如果一个文件名不足8字节,则不足的部分填充空格,文件名与扩展名中间的圆点忽略。
第2段是文件扩展名,同样遵守上述规定,不过扩展名不足3个字符的情况较少。
第4段对FAT16和FAT32两种文件系统有所不同,FAT32因为需要管理大于16位的簇,所以将簇的高16位存储在这个字段中,低16位的存储位置与FAT16相同。
第7段是文件的起始簇号,FAT文件系统一系列的寻址过程都是由此开始的。
第8段用一个双字记录文件的字节长度。
1.6数据区DATA
数据区DATA的所有扇区都划分成以簇为单位的逻辑结构,每一个簇在FAT表里都有一个簇登记项与之对应。
在对硬盘的引导故障进行修复时,一般只访问主引导记录、分区表和分区引导记录,极个别的情况下可能访问到FAT表和FDT表,而DATA区是访问不到的。
FAT16文件系统的DATA区紧接在FDT表之后。FAT32文件系统因为没有FDT表,所以紧接在第二个FAT表之后的就是DATA区。