首页 | 公司简介 | 数据恢复 | 备份服务 | 成功案例 | 技术中心 | 客户服务 | 服务报价 | 数据恢复软件 | 联系我们 | 北亚博客  
 
  北京总部: 4006-505-646
  天 津 部: 4006-505-646
  上 海 部: 4006-505-646
  深 圳 部: 4006-505-646
  广 州 部: 4006-505-646
  重 庆 部: 4006-505-646
  南 京 部: 4006-505-646
  其它地区: 4006-505-646
北亚数据恢复软件Windows专业版
三星手机数据恢复软件V1.0
北亚苹果手机数据恢复软件V2.0
北亚硬盘录像机数据恢复软件 V
北亚vmware虚拟机数据恢复软件
北亚照片数据恢复软件
北亚摄像机数据恢复软件 v2.1
北亚Sybase数据库修复软件 V2.
raid磁盘阵列应急方案
HP EVA4400/6400/8400/P6000
iphone 通讯录丢失如何恢复?
xen server 存储库(sr)损坏后
RAID6结构原理详解(北亚数据
AIX下删除LV后的现场保护和数
RAID损坏后 对数据的完整备份
您当前的位置:首页 >> 技术中心 >> 文件修复文栏 >> 正文

探索NTFS

  ULONGLONG BaseFileRecord;

  USHORT NextAttributeNumber;

  } FILE_RECORD_HEADER, *PFILE_RECORD_HEADER;

 

  下面我将讨论如何定位$MFT。稍微有点操作系统知识的人都会知道引导扇区(Boot Sector),其物理位置为卷中的第一个扇区。以下由dskprobe.exe(Windows 2000 Resource Kit中的一个小工具)分析的第一个扇区(当然也可以使用WinHex等其他应用程序):

  file: d:\Sector00.bin

  Size: 0x00000200 (512)

  Address | 00 01 02 03-04 05 06 07 : 08 09 0A 0B-0C 0D 0E 0F | 0123456789ABCDEF

  ---------|-------------------------:-------------------------|-----------------

  00000000 | EB 52 90 4E-54 46 53 20 : 20 20 20 00-02 08 00 00 | ?R?NTFS .....

  00000010 | 00 00 00 00-00 F8 00 00 : 3F 00 F0 00-3F 00 00 00 | .....?..?.e.?...

  00000020 | 00 00 00 00-80 00 80 00 : 90 C0 41 00-00 00 00 00 | ......惱A.....

  00000030 | 04 00 00 00-00 00 00 00 : 09 1C 04 00-00 00 00 00 | ................

  00000040 | F6 00 00 00-01 00 00 00 : 04 9D 31 E8-BB 31 E8 94 | ?.......?杌1钄

  . .

  . .

  . .

  000001F0 | 00 00 00 00-00 00 00 00 : 83 A0 B3 C9-00 00 55 AA | ........儬成..U?

 

  这512字节为如下的格式:(摘自Gary Nebbett书中,本文许多代码均来自或参考此书。)

  #pragma pack(push, 1)

  typedef struct {

  UCHAR Jump[3];

  UCHAR Format[8];

  USHORT BytesPerSector;

  UCHAR SectorsPerCluster;

  USHORT BootSectors;

  UCHAR Mbz1;

  USHORT Mbz2;

  USHORT Reserved1;

  UCHAR MediaType;

  USHORT Mbz3;

  USHORT SectorsPerTrack;

  USHORT NumberOfHeads;

  ULONG PartitionOffset;

  ULONG Reserved2[2];

  ULONGLONG TotalSectors;

  ULONGLONG MftStartLcn;

  ULONGLONG Mft2StartLcn;

  ULONG ClustersPerFileRecord;

  ULONG ClustersPerIndexBlock;

  ULONGLONG VolumeSerialNumber;

  UCHAR Code[0x1AE];

  USHORT BootSignature;

  } BOOT_BLOCK, *PBOOT_BLOCK;

  #pragma pack(pop)

  各个字段的详细意义从字段名中即可大致清楚。在linux-ntfs的GNU工程(http://sf.net/projects/linux-ntfs)中也有详细的文档,限于篇幅我不将其列出。可以使用如下代码读出卷中的第一个扇区:

  hVolume = CreateFile(drive, GENERIC_READ, FILE_SHARE_READ | FILE_SHARE_WRITE, 0,

  OPEN_EXISTING, 0, 0);

  ReadFile(hVolume, &bootb, sizeof(bootb), &n, 0);

  bootb是一个BOOT_BLOCK结构,在我的卷中如下格式(请对应Sector00.bin分析):

  Dump BootBlock at below:

  BytesPerSector:200

  SectorsPerCluster:8

  BootSectors:0

  SectorsPerTrack:3F

  NumberOfHeads:F0

  PartitionOffset:3F

  TotalSectors:41C090

  MftStartLcn:4

  Mft2StartLcn:41C09

  ClustersPerFileRecord:F6

  ClustersPerIndexBlock:1

  VolumeSerialNumber:E8319D04

  BootSignature:AA55

 

  以上的MftStartLcn其实是$MFT在卷中的簇(Cluster)号。簇是NTFS的基本单位,最小单位。一个只有1Byte的文件也要占用一簇的空间。NTFS使用LCN(Logical Cluster Number)来代表NTFS卷中的物理位置,其简单的从0到卷中的总簇数减一进行编号。对于一个特定的文件NTFS则使用VCN(Virtual Cluster Number)来映射LCN实现文件的组织。从MftStartLcn的值4可以知道$MFT的LCN为4与SectorsPerCluster、BytesPerSector的大小即可定位$MFT的位置。得到$MFT的位置后,如果遍历$MFT中所有的File Record即可以得到卷中所有的文件列表(前面已经提到File Record只是简单的从0开始编号)。也就是说到目前为止已经可以对文件组织有最简单的认识,但如何得到文件的信息呢,如文件名等等。NTFS中所有文件包括普通的用户文件、元数据文件均用同样的方式组织数据、属性等。我将nfi.exe(来自Windows NT/2000 OEM Support Tools)的输出结果列出,作为我叙述的开始:

本新闻共5页,当前在第2页  1  2  3  4  5  

上一篇:drawing interchange and file formats release 12(AutoCAD DXF 12.0版文件格式说明)
下一篇:Ext2 文件系统的硬盘布局
返回首页 | 联系我们 | 关于我们 | 招聘信息 | 友情链接 | 网站地图 | 合作伙伴
版权所有 北京北亚宸星科技有限公司
全国统一客服热线:4006-505-646
北京总部:北京市海淀区永丰基地丰慧中路7号新材料创业大厦B座205室
京ICP备09039053

OYn