硬件白皮书001.docx

上传人:b****3 文档编号:4858471 上传时间:2022-12-10 格式:DOCX 页数:51 大小:65.36KB
下载 相关 举报
硬件白皮书001.docx_第1页
第1页 / 共51页
硬件白皮书001.docx_第2页
第2页 / 共51页
硬件白皮书001.docx_第3页
第3页 / 共51页
硬件白皮书001.docx_第4页
第4页 / 共51页
硬件白皮书001.docx_第5页
第5页 / 共51页
点击查看更多>>
下载资源
资源描述

硬件白皮书001.docx

《硬件白皮书001.docx》由会员分享,可在线阅读,更多相关《硬件白皮书001.docx(51页珍藏版)》请在冰豆网上搜索。

硬件白皮书001.docx

硬件白皮书001

硬件白皮书

NTFS文件系统规范

关键字:

WindowsNTNTFS文件系统

NTFS作为MicrosoftWindowsNT®操作系统的标配文件系统克服了FAT/FAT32文件系统的大量缺点;同时又随着MicrosoftWindows2000®、MicrosoftWindowsXP操作系统的推广得到越来越广泛的应用。

矚慫润厲钐瘗睞枥庑赖賃軔。

和FAT/FAT32文件系统相比,NTFS文件系统主要有以下优点。

•支持大容量存储单元(最大支持

GB)

•内建数据压缩支持

•支持事务日志文件

•加强数据安全

基本数据类型

MFT文件记录

文件记录是$MFT文件的基本组成部分,卷中的所有文件都由至少一个文件记录来描述,对于使用多个文件记录的文件,其第一个文件记录叫基本文件记录,其余的叫做扩展文件记录。

趕輾雏纨颗锊讨跃满賺蚬騍。

文件记录由记录头,数个文件属性和结束标志(0xFFFFFFFF)组成。

文件记录头格式:

名字

偏移

尺寸

描述

FR_Sign

0

4

记录签名:

值为:

‘ELIF’

FR_USOff

4

2

更新序列号的偏移(M)(相对文件记录头)

FR_USNSz

6

2

更新序列号个数+1(N)

FR_LSN

8

8

日志文件序列号,该值在记录每次被修改时都会被改动

FR_SN

0x10

2

重复使用更新序列号(删除一次加1)

FR_LnkCnt

0x12

2

目录中记录本文件的引用计数,该值只用于基本文件记录

FR_USAOff

0x14

2

第一个属性数据的偏移

FR_Flags

0x16

2

标志,该成员可以是以下各值中之一

0x0001记录被使用

0x0002目录文件

FR_Size

0x18

4

当前记录的尺寸

FR_AllocSz

0x1c

4

当前记录分配的空间的尺寸

FR_BaseFR

0x20

8

当前文件记录的基本文件记录的索引,

如果当前文件记录是基本文件记录则该值为0,否则指向基本文件记录的记录索引。

注意:

该值的低6字节是MFT记录号,高2字节是该MFT记录的序列号

FR_NxtAttrId

0x28

2

下一个属性的ID。

下一次将会被添加到文件记录的属性的ID,每次往文件记录中添加属性时该值都会增加,每次文件记录被重新使用时该值都会被清零,第一个值肯定是0

FR_Resvd

0x2a

2

保留(XP新增,3.1+)

FR_NumOfFR

0x2c

4

该MFT记录号(XP新增,3.1+)

FR_USN

M

2

序列号。

该值记录文件记录被修改的次数,每次修改时该值+1,(包括文件被删除操作)该值不能为0

FR_USA

M+2

(N-1)*2

序列值占用的空间的原值

更新序列号

更新序列号是Microsoft公司为了确保记录数据的可靠性而在NTFS卷中提出的一项技术,在NTFS卷中,所有的记录类型数据(FR、IR)占用的空间都是按扇区尺寸(512字节)对齐。

保护记录数据时,在每512字节的最末2个字节都会写入一个校验值以确保记录中的所有数据都被正确的写入磁盘中,而校验值所在位置的数据被拷贝到记录头之后被称作USA(UpdateSequenceArray)的数据块中,系统将记录数据从磁盘读入内存时将检查每个校验值是否与记录头的中序列号是否相同,如果相同则用USA中相应位置的数据恢复校验值位置的数据,反之则表明该记录被没有正确地修改。

夹覡闾辁駁档驀迁锬減汆藥。

在每次写记录数据时序列号都会加1,当序列号为0时则再加1。

校验码

第1个512字节扇区末原值

第2个512字节扇区末原值

最后一个512字节扇区末原值

扇区数据结构

虚拟簇号

非驻留数据中的每个簇都有一个特定的序号,这个序号就叫做虚拟簇号,虚拟簇号0指向数据流的第一个簇。

逻辑簇号

卷中的每一个簇都有一个特定的序号,这个序号就叫做逻辑簇号,逻辑簇号0指向卷中的第一个簇(引导扇区)。

数据流描述

存放在间隔的簇中的属性数据称为流。

每一个流都由起始簇号和尺寸来描述。

流的起始簇号是相对于前一个流的偏移,该值是一个有符号数。

流描述的格式如下:

视絀镘鸸鲚鐘脑钧欖粝佥爾。

名字

偏移

尺寸

说明

SD_Desc

0

1

流描述说明,高4位(M)描述流描述偏移的字节数,低4位(N)描述流描述尺寸的字节数

SD_Size

1

N

当前流的尺寸

SD_Off

N+1

M

当前流相对于上一个流的偏移,如果该值的最高位为1则表示该值是一个负数

一个流描述之后紧随着下一个流描述,如果下一个描述的SD_Desc为0则表示当前描述是最后一个。

一般情况下压缩文件和稀疏文件数据都以流的形式描述。

例1:

通常情况

流描述:

2120ED52248748222128C8DB0

流1:

SD_Desc=21–偏移占2个字节,尺寸占1个字节。

SD_Size=20(1字节)

SD_Off=5ED(2字节)

Offset=5ED

Length=20

流2:

SD_Desc=22–偏移占2个字节,尺寸占2个字节。

SD_Size=748(2字节)

SD_Off=2248(2字节)

Offset=2835(2248+5ED)

Length=748

流3:

SD_Desc=21–偏移占2个字节,尺寸占1个字节。

SD_Size=28(1字节)

SD_Off=DBC8(2字节)

Offset=3FD(2835+FFFFDBC8)

Length=28

流4:

SD_Desc=0。

描述结束标志

小计:

0x20个簇存放在簇号0x5ED开始处

  0x748个簇存放在簇号0x2853开始处

  0x28个簇存放在簇号0x3FD开始处

例2:

压缩流

流描述:

1108400108111008110C10010400

流1:

SD_Desc=11–偏移占1个字节,尺寸占1个字节。

SD_Size=8(1字节)

SD_Off=40(1字节)

Offset=40

Length=8

流2:

SD_Desc=01–偏移占0个字节,尺寸占1个字节。

SD_Size=8(1字节)

SD_Off=-

Offset=-

Length=8

流3:

SD_Desc=11–偏移占1个字节,尺寸占1个字节。

SD_Size=10(1字节)

SD_Off=8(1字节)

Offset=48(40+8)

Length=20

流4:

SD_Desc=11–偏移占个字节,尺寸占1个字节。

SD_Size=C(1字节)

SD_Off=10(1字节)

Offset=58(48+10)

Length=C

流5:

SD_Desc=01–偏移占0个字节,尺寸占1个字节。

SD_Size=4

SD_Off=-

Offset=-

Length=4

流6:

SD_Desc=0。

流描述结束标志。

小计:

0x08个簇存放在簇号0x40开始处

0x08个稀疏簇(未分配空间)

0x10个簇存放在簇号0x48开始处

0x0C个簇存放在簇号0x58开始处

0x04个稀疏簇(未分配空间)

文件属性记录

文件中的每个记录都是由属性组成。

每个属性由相同的格式构成,首先是一个标准属性记录头,然后存放属性的专用数据。

下面列出$AttrDef中定义的可用到的属性。

偽澀锟攢鴛擋緬铹鈞錠铃铋。

类型

操作系统

描述

0x10

STANDARD_INFORMATION

0x20

ATTRIBUTE_LIST

0x30

FILE_NAME

0x40

NT

VOLUME_VERSION

0x40

2K

OBJECT_ID

0x50

SECURITY_DESCRIPTOR

0x60

VOLUME_NAME

0x70

VOLUME_INFORMATION

0x80

DATA

0x90

INDEX_ROOT

0xA0

INDEX_ALLOCATION

0xB0

BITMAP

0xC0

NT

SYMBOL_LINK

0xC0

2K

REPARSE_POINT

0xD0

EA_INFORMATION

0xE0

EA

0xF0

NT

PROPERTY_SET

0x100

2K

LOGGED_UNTILITY_STREAM

属性记录头

每个MFT属性记录都有一个属性记录头,这个头记录了属性的类型、名字(可选)、有两种格式:

驻留属性

名字

偏移

尺寸

说明

ATTR_Type

0x00

4

属性类型。

该值必须是$AttrDef文件中定义的属性列表中的一项

ATTR_Size

0x04

4

记录尺寸(包括记录头)

ATTR_NonResFlag

0x08

1

属性数据非驻留标志,值为0,驻留属性不能被压缩

ATTR_NamSz

0x09

1

属性名尺寸,该值为0时表示当前属性没有名字

ATTR_NamOff

0x0a

2

属性名相对于属性头的偏移,该值总是固定为0x18

ATTR_Flags

0x0c

2

属性标志,在当前的版本中只支持以下3个标志:

0x4000属性被加密

0x8000稀疏属性

注意:

只有非驻留的数据(Data)属性才能被压缩

ATTR_Id

0x0d

2

属性ID,在MFT记录中的每个属性都有一个唯一的ID。

与MFT的FR_NxtAttrId对应

ATTR_DatSz

0x10

4

属性数据尺寸

ATTR_DatOff

0x14

2

属性数据相对于属性头的偏移

ATTR_Indx

0x16

1

属性索引标志(对FILE_NAME有效)

ATTR_Resvd

0x17

1

保留

ATTR_AttrNam

0x18

2*N

属性名字Unicode字符串,这个字符串不用在结尾处加0

ATTR_AttrDat

0x18+2*N

属性数据,所以的数据都应该按双字对齐

(为各常驻属性实体部分)

>=24bytes

非驻留属性

名字

偏移

尺寸

说明

ATTR_Type

0x00

4

属性类型。

该值必须是$AttrDef文件中定义的属性列表中的一项

ATTR_Size

0x04

4

记录尺寸(包括记录头)

ATTR_NonResFlag

0x08

1

属性数据非驻留标志,值为1

ATTR_NamSz

0x09

1

属性名尺寸,该值为0时表示当前属性没有名字

ATTR_NamOff

0x0a

2

属性名相对于属性头的偏移,该值总是固定为0x18

ATTR_Flags

0x0c

2

属性标志,在当前的版本中只支持以下3个标志:

0x0001属性被压缩

0x4000属性被加密

0x8000稀疏属性

注意:

只有非驻留的数据(Data)属性才能被压缩

ATTR_Id

0x0d

2

属性ID,在MFT记录中的每个属性都有一个唯一的ID。

ATTR_StartVCN

0x10

8

本属性中数据流开始的簇号

ATTR_EndVCN

0x18

8

本属性中数据流最后一簇的簇号

ATTR_DataOff

0x20

2

数据流描述相对于属性头的偏移,数据应该按双字对齐

ATTR_CmpSz

0x22

2

压缩单元的尺寸。

压缩单元的尺寸必须是2的整数次幂,为0表示未压缩

ATTR_Resvd

0x24

4

保留

ATTR_AllocSz

0x28

8

属性记录数据块分配的空间的尺寸,该尺寸按簇尺寸对齐

ATTR_ValidSz

0x30

8

属性记录数据块的实际尺寸

ATTR_InitedSz

0x38

8

属性记录数据块已经初始化数据的尺寸,到目前为止该值都与属性记录数据块分配的尺寸相同

ATTR_AttrNam

0x40

2*N

属性名的UNICODE字符串,该字符串不以0结尾

ATTR_DataRuns

0x40+2*N

属性数据流描述(为各非常驻属性逻辑簇区域指向,具体实体在指向区域)

>=64bytes

注意

只有非驻留的数据(Data)属性才可以被压缩或是稀疏类型。

只有驻留属性才有索引标志,是否表示只有驻留属性才能被索引?

STANDARD_INFORMATION(0x10常驻属性len=0x30,0x48)

在老的NTFS版本中,STARDAND_INFORMATION属性只用于存放文件的时间和DOS文件属性信息。

在Windows2000中新引进了4个域来描述配额、安全、文件尺寸和日志信息。

緦徑铫膾龋轿级镗挢廟耬癣。

属性描述如下表:

名字

偏移

尺寸

描述

-

-

标准属性头(24字节)

SI_CreatTime

0x00

8

文件创建时间

SI_AlterTime

0x08

8

文件最后一次修改时间

SI_MFTChgTime

0x10

8

文件的MFT记录修改的时间

SI_ReadTime

0x18

8

最后一次访问的时间

SI_DOSAttr

0x20

4

DOS文件属性,可以是以下各值的组合:

0x0001只读

0x0002隐藏

0x0004系统

0x0020归档

0x0040设备

0x0080常规

0x0100临时文件

0x0200稀疏文件

0x0400重解析点

0x0800压缩

0x1000离线

0x2000无内容索引

0x4000加密

SI_MaxVer

0x24

4

文件可用的最大版本号,此值为0表示版本功能被禁止(目前未使用?

SI_Ver

0x28

4

文件版本号,如果最大版本号为0则值也必须为0

SI_ClassId

0x2c

4

不明(目前未使用?

SI_OwnerId

0x30

4(2K)

文件拥有者的ID,本ID是$Quota文件中$O或$Q记录中的键,如果该值为0则表示配额设置被禁止

SI_SecurityId

0x34

4(2K)

安全ID,本值是$Securce文件中$SII索引及$SDS数据流的键

SI_QuotaCharged

0x38

8(2K)

该文件最大可使用的空间配额。

如果该值为0则表示无配额限制

SI_USN

0x40

8(2K)

文件最后一次更新的记录号,该值是$UsnJrnl文件的直接索引,如果该值为0则表示更新日志被禁止

ATTRIBUTE_LIST(0x20len>26)

当MFT记录中的属性太多太长时,MFT记录就容纳不下这么多属性记录了,这时就只能将属性的数据以非驻留数据的形式存放到卷中的其他位置,如果这样还是存放不下,就必须用到属性表属性了。

存放不下的属性会被转移到一个新分配的MFT记录中,然后在原MFT中加入一个属性表属性以描述如何搜索到当前文件的所有属性。

騅憑钶銘侥张礫阵轸蔼揽齊。

紧随标准属性头之后存放各属性的描述记录,记录了属性的位置和所在MFT记录,每个属性描述按4字对齐,记录了属性的类型、名字(有名属性)、序号。

疠骐錾农剎貯狱颢幗騮鸪詼。

属性表属性中不包括对自身的描述。

名字

偏移

尺寸

描述

-

-

标准属性头

AL_RD_Type

0

4

属性类型

AL_RD_Len

4

2

属性描述尺寸

AL_RD_NamLen

6

1

属性名尺寸,值为N

AL_RD_NamOff

7

1

属性名相对于属性描述的偏移

AL_RD_StartVCN

8

8

本属性中数据流开始的簇号

AL_RD_BaseFRS

0x10

8

本属性记录所属的MFT记录的记录号。

注意:

该值的低6字节是MFT记录号,高2字节是该MFT记录的序列号

AL_RD_AttrId

0x18

2

属性的ID

AL_RD_Name

0x1a

2*N

属性名UNICODE字符串。

该字符串不以0字符为结束标志

注:

使用属性表属性通常因为以下情况:

文件有太多的别名。

碎片太多以至于数据流描述填满了MFT记录。

有太复杂的安全描述(在NTFS 3.0以后的版本中不会再出现这种情况)。

有太多的命令流,比如数据流。

FILE_NAME(0x30常驻属性len=68~578))

本属性用于描述文件的名字,本属性总是驻留在MFT记录中。

在$AttrDef的定义中,本属性的最小尺寸是68字节,最大是578字节,因此最大文件名长度是255个字节。

镞锊过润启婭澗骆讕瀘載撻。

名字

偏移

尺寸

描述

-

-

标准属性头(24字节)

FN_ParentFR

0

8

父目录的MFT记录的记录索引。

注意:

该值的低6字节是MFT记录号,高2字节是该MFT记录的序列号

FN_CreatTime

8

8

文件创建的时间

FN_AlterTime

0x10

8

文件最后一次被修改的时间

FN_MFTChg

0x18

8

文件的MFT记录被修改的时间

FN_ReadTime

0x20

8

最后一次访问文件的时间

FN_AllocSz

0x28

8

文件数据占用的空间尺寸,该值按簇尺寸对齐

FN_ValidSz

0x30

8

文件的真实尺寸,索引项(目录项)中显示的文件尺寸就是该值。

如果文件的数据属性中的开始簇号不为0则本项的值为空,此时需要查询文件尺寸的话必须访问SI属性

FN_DOSAttr

0x38

4

DOS文件属性,可以是以下各值的组合:

0x0001只读

0x0002隐藏

0x0004系统

0x0020归档

0x0040设备

0x0080常规

0x0100临时文件

0x0200稀疏文件

0x0400重解析点

0x0800压缩

0x1000离线

0x2000无内容索引

0x4000加密

0x10000000目录

0x20000000索引视

FN_EA_Reparse

0x3c

4

扩展属性与链接

FN_NameSz

0x40

1

文件名的字符数

FN_NamSpace

0x41

1

命名空间,该值可为以下值中的任意一个

0:

POSIX 可以使用除NULL和分隔符“/”之外的所有UNICODE字符,最大可以使用255个字符。

注意:

“:

”是合法字符,但Windows不允许使用。

1:

Win32 Win32是POSIX的一个子集,不区分大小写,可以使用除““”、“*”、“?

”、“:

”、“/”、“<”、“>”、“\”、“|”之外的任意UNICODE字符,但名字不能以“.”或空格结尾。

2:

DOS DOS命名空间是Win32的子集,只支持ASCII码大于空格的8BIT大写字符并且不支持以下字符““”、“*”、“?

”、“:

”、“/”、“<”、“>”、“\”、“|”、“+”、“,”、“;”、“=”;同时名字必须按以下格式命名:

1~8个字符,然后是“.”,然后再是1~3个字符。

3:

Win32&DOS 这个命名空间意味着Win32和DOS文件名都存放在同一个文件名属性中。

FN_FileName

0x42

2*L

不需要以0作为结束字符

将POSIX或Win32文件名转换成DOS文件名要遵循以下步骤:

去掉所有的UNICODE字符。

去掉除最后一个以外的所有“.”,除非该符号在文件名的最前面。

所有字符转换成大写。

去掉所有禁止的字符。

把“.”号前面的字符减少到6个,然后在后面加上“~1”。

把“.”号后面的字符缩减为3个。

如果文件名已经存在,则增加字符串“~1”的值。

VOLUME_VERSION(0x40NT)

  本属性只用于MicrosoftWindowsNT。

OBJECT_ID(0x402K)

对象ID属性是从MicrosoftWindows2000开始引入的新属性。

每个MFT记录都有一个唯一的GUID。

同样地,一个记录也包含了出生卷ID,原始对象ID和域ID,它们都拥有GUID。

榿贰轲誊壟该槛鲻垲赛纬闼。

该属性没有最小尺寸限制,但最大尺寸不得超过256个字节。

名字

偏移

尺寸

描述

-

-

标准属性头

OID_Head

-

-

属性头

OID_ObjID

0

16

文件的GUID

OID_BirthVolID

0x10

16

文件建立时所在卷的ID

OID_BirthID

0x20

16

文件的原始ID

OID_DomainID

0x30

16

对象所创建时所在域的ID

SECRUITY_DESCRIPTOR(0x50)

偏移

尺寸

描述

0x00

1

Revision(a)

0x01

1

Padding

0x02

2

ControlFlags(b)

0x04

4

OffsettoUserSID

0x08

4

OffsettoGroupSID

0x0C

4

OffsettoSACL

0x10

4

OffsettoDACL

VOLUME_NAME(0x60)

该属性记录卷的名字。

该属性最小2个字节,最大256个字节,因此卷标最大允许有127个字符。

卷名的UNICODE字符串紧随属性头存放,卷名的长度由记录头中的ATTR_DatSz来指定。

邁茑赚陉宾呗擷鹪讼凑幟结。

卷序列号存放在$Boot文件中。

偏移

尺寸

描述

-

-

标准属性头(24字节)

0x00

Unicode命名字符串

VOLUME_INFORMATION(0x70len=0x0c)

该属性记录卷的基本信息,如版本号。

名字

偏移

尺寸

描述

-

-

标准属性头(24字节)

VI_Resvd

0

8

保留,始终为0

VI_MajVer

8

1

卷主版本号

VI_MinVer

9

1

卷次版本号

VI_Flags

0x0a

2

标志位,可以是以下各值组合

0x0001脏位,当该值被设置时Windows将会在下次启动时运行chkdsk/F命令。

0x0002日志文件改变尺寸

0x0004卷挂接时升级

0x0008由WindowsNT4挂接

0x0010启动时删除USN

0x0020修复过的ID

0x8000被chkdsk修改过

0x0c

4

保留,始终为0

操作系统

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 解决方案 > 商业计划

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1