首页 | 公司简介 | 数据恢复 | 成功案例 | 技术中心 | 客户服务 | 服务报价 | 联系我们 | 技术论坛  
 
  北京总部: 4006-505-808
  上 海 部: 021-58358765
  深 圳 部: 0755-83692929
  浙 江 部: 13666673722
  广 州 部: 020-83821091
  重 庆 部: 023-86870422
  福 建 部: 0591-83300680
  哈尔滨部: 13946167430
  其它地区: 4006-505-808

中国联通信息平台-HP-UX数据恢
中国石油管理局-Oracle数据库恢
工商银行山东分行-AIX删除LV数
濮阳市地方税务局-CHKDSK后数据
台湾HD公司-FreeBSD Nas无法启
promise乔鼎硬盘阵列数据恢复成
IBM EXP300 磁盘阵列数据恢复成
NAS 8100无法挂载数据卷

RAID损坏后 对数据的完整备份
LINUX FSCK数据出错灾难应急方
误删除、误格式化数据灾难应急
误GHOST、误一键恢复灾难应急方
磁盘未被格式化,是否格式化数据
raid磁盘阵列OFFLINE后的应急方
硬盘出现异响应急处理
您当前的位置:首页 >> 技术中心 >> 文件修复文栏 >> 正文

探索NTFS

  0023:00344E18 00000006 00000000 00240304 0046004D ..........$.M.F.

  -- --------

  | |___找到$MFT的FileName了吧。

  |_NameLength

  0023:00344E28 00000054 00000000 00000080 00000190 T...............

  0023:00344E38 00400001 00010000 00000000 00000000 ..@.............

  这儿给出了Dump Attribute的一个具体方法。最后我将给出遍历File Record的代码,在给出代码前应该说明一下$MFT中$BITMAP属性。NTFS的这个Attribute相当于LINUX EXT2的s_inode_bitmap数组(Linux 2.0版本)。所以很容易明白$BITMAP的作用,即每bit指出相应File Record的在用情况。以下是DumpAllFileRecord的代码:

  BOOL bitset(PUCHAR bitmap, ULONG i)

  {

  return (bitmap[i >> 3] & (1 << (i & 7))) != 0;

  }

  VOID DumpAllFileRecord()

  {

  PATTRIBUTE attr = FindAttribute(MFT, AttributeBitmap, 0);

  PUCHAR bitmap = new UCHAR[AttributeLengthAllocated(attr)];

  ReadAttribute(attr, bitmap);

  ULONG n = AttributeLength(FindAttribute(MFT, AttributeData, 0)) / BytesPerFileRecord;

  PFILE_RECORD_HEADER file = PFILE_RECORD_HEADER(new UCHAR[BytesPerFileRecord]);

  for (ULONG i = 0; i < n; i++) {

  if (!bitset(bitmap, i)) continue;

  ReadFileRecord(i, file);

  if (file->Ntfs.Type == 'ELIF' && (file->Flags & 3 )) {

  attr = FindAttribute(file, AttributeFileName, 0);

  if (attr == 0) continue;

  PFILENAME_ATTRIBUTE name

  = PFILENAME_ATTRIBUTE(Padd(attr, PRESIDENT_ATTRIBUTE(attr)->ValueOffset));

  printf("%8lu %.*ws\n", i, int(name->NameLength),name->Name)

  }

  }

  }

  本文引用Gary Nebbett的些定义可能对Windows 2000版本有些很小的出入,不过Internet有其神奇的地方,虽然Microsoft不提供这些信息,但诸如linux-ntfs GNU工程等均是学习NTFS的一个很好的资料,本文也参考了很多它提供的文档。另外Mark Russinovich的《Inside Win2K NTFS》、《Inside NTFS》、《Exploring NTFS On-disk Structures》等也是很好的NTFS资料。本文仍未涉及NTFS中目录的组织(B+树)等等,可能的话我会另行介绍。文中介绍的完整代码可到http://webcrazy.yeah.net下载。出现的错误也欢迎来信指教(tsu00@263.net)!

 

  最后感谢Anton Altaparmakov,感谢我的同事在出差时抽空给我买到Gary Nebbett的书。感谢我看到的所有资料的原作者们。感谢他们!

参考资料:

  1.Gary Nebbett《Windows NT/2000 Native API Reference》

  2.Linux-NTFS Project NTFS Documentation Version 0.4

  3.Mark Russinovich相关文档

  4.David Solomom《Inside Windows NT,2nd Edition》

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

上一篇:drawing interchange and file formats release 12(AutoCAD DXF 12.0版文件格式说明)
下一篇:Ext2 文件系统的硬盘布局
返回首页 | 联系我们 | 关于我们 | 招聘信息 | 友情链接 | 网站地图 | 合作伙伴
版权所有 北京北亚数据恢复中心
24小时免费咨询电话:4006-505-808 或 800-810-5880
中关村部:北京市海淀区中关村大街11号E世界A座832B室
皂君庙部:北京市海淀区学院南路68号吉安大厦C座(汇智楼)528室
京ICP备06061795