您的位置:首页 > 其它

ntfs下数据恢复软件编写心得

2011-11-01 15:52 330 查看
本人是业余电脑爱好者,在学习ntfs知识的过程中编写了一款小工具,其在xp和win7下均能使用,前提是文件系统的版本号:ntfs3.1。其查找文件的速度远快于系统的“搜索”功能,且具有随手的恢复功能,使用简单。

链接:ntfs系统文件查找恢复工具 http://download.csdn.net/detail/ty_love/3742019

在开发的过程中遇到一些问题,通过调试独立解决。在此简单提示如下,希望对感兴趣的朋友有所启发:

1.CreateFile(pchar('\\.\c:'),GENERIC_READ,FILE_SHARE_READ or FILE_SHARE_WRITE,nil,OPEN_EXISTING,0,0);

其中第二个参数使用时要注意,在win7系统上不要用GENERIC_ALL,否则会出现函数调用失败。

2. 在文件记录FR、索引记录IR分布的扇区中,每个扇区最后的2个字节固定用于保存校验值(UPDATE SEQUENCE NUMBER, 简称USN),而原本应该写于此处的数据被转移到USA(UPDATE SEQUENCE ARRAY)中,具体USA在哪里,请参考相关书籍。如不注意,你的程序将会出现不可预见的错误。

3.在解析$80属性、$A0或$B0属性的datarun时存在一个相对偏移量的问题,由于下一个数据块不一定就在前一个数据块的后面,也有可能在前面,即这个偏移量要带有正负的信息,所以它必须是一个有符号数。假如一定要用无符号数,那么在datarunlist中的每个数据块都要有个绝对地址,无疑会浪费有限的记录空间。总之我认为设计者设计这个datarun时主要考虑了节省属性占用的空间。

4.不要忽略了文件记录FR中的$20属性,否则当你遇到解析大目录例如system32或含有成千上万碎片的文件时必然会发生错误。通常此时的$80属性、$A0属性的相关信息只能从$20属性中获取,你必须认真解析这个$20属性。

5.不要认为$MFT文件不会有碎片。$MFT文件存在碎片的可能性还是比较大,忽略该问题会产生以下几个错误:(1)遍历搜索文件记录的范围不全,导致产生遗漏;(2)恢复文件内容不全或显示目录不全,这是因为当$MFT文件存在碎片时,利用文件记录ID来定位的方法发生了改变,具体怎么改变在此不再赘述,聪明的你应该也会想到。

6.文件是否已经被覆盖无法确定。通常我们根据$BITMAP中对应位置的bits来判断,但是删除后的文件对应bits为0的就一定没有覆盖过吗?事实上也可能在覆盖后又被删除了,而且这样的过程不一定就一次,所以文件恢复全靠运气。

以上是本人的一些不成熟的看法,希望高手不吝指正! 天易love
2011-11-1
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: