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
链接: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
相关文章推荐
- 数据恢复软件开发、编程-NTFS扫描恢复通用库
- 自己动手“数据恢复编程、数据恢复软件开发”- NTFS扫描恢复通用库
- MCG格式监控录像数据恢复软件 1.0
- 数据恢复软件如何换机使用?
- 介绍十种数据恢复的软件工具
- 速达软件/管家婆软件/用友软件/金蝶软件/餐饮软件/财务软件数据库修复/数据初始化恢复
- SQL数据库碎片级别数据恢复软件---蓝梦软件BestRecoveryForSQL
- 在 Linux 下使用 RAID(八):当软件 RAID 故障时如何恢复和重建数据
- 免费的数据恢复软件
- 数据恢复软件哪个好,easy recovery专业恢复软件,easyrecovery免费版
- 如何更好利用恢复软件恢复清除的数据
- 【数据恢复软件】
- u盘raw数据恢复,小牛数据恢复软件
- CentOs6.5安装使用数据恢复软件extundelete
- 主流数据恢复软件——EasyRecovery/Ashampoo Undeleter/Wise Data Recovery/Recuva/Undelete 360
- SQL SERVER数据库误删除误格式化误重装软件覆盖数据恢复修复
- 数据恢复软件哪个好用比特数据恢复当仁不让
- 数据恢复恢复(2):硬盘恢复那些基本软件
- 有种软件你不得不备着,那就是数据恢复类软件
- [数据恢复答疑]为什么我的EasyRecovery Professional数据恢复软件恢复OFFICE文件打开是乱码呢!