fat32 文件系统 误删除文件数据恢复 SDK 介绍
fat32_analyze.dll 是一个专门用于恢复 fat32 文件系统误删除文件的标准的动态链接库(DLL), 可被任何其他程序直接加载调用。
下载地址:
https://gitee.com/tankaishuai/powerful_sdks/tree/master/fat32_analyze
fat32_analyze.dll 导出的基本操作接口如下:
-
打开设备接口:
参数 dev_name 为设备标识符,对于物理磁盘,可以直接指定磁盘的序号(“0”、”1”、”2”……),对于逻辑分区,可以直接指定分区名称(如:”D:”、”E:”、”F:”……)
参数 extFlags可以指定0或者其它一些附加标记,如下:
一般图形界面程序传入 (FAT32_FLAG_GUI | FAT32_FLAG_NOALERT) 即可。
如果打开设备成功,该函数返回一个操作句柄,后续的所有接口的第一个参数都需要传入该操作句柄。
2.关闭设备接口:
当文件恢复所有操作彻底完成之后,需要调用该接口关闭操作句柄,以清理内部内存数据,否则会有内存泄漏问题。
3.读取数据(块)接口:
参数pData为接收数据的一块缓冲区地址;
参数 offset 为读取的物理磁盘偏移量,此处不要求扇区对齐;
参数 bytes 为读取的数据总数,注意一次性读取不能超过 512字节。
为了方便读取操作,同时也提供了另外一个更方便的接口:
该函数可以快速读取小于8字节的数据,并直接以返回值形式返回。
4.查询当前目录接口:
引擎内部记录了当前正在操作的目录是哪一个。
参数 parentClusters用于接收当前目录的全部父级目录簇序列号;
参数 numClusters 用于传入以及接收当前目录的全部父级目录的簇序列号数量。
该函数直接返回当前目录的全路径。注意根目录是:\ 。
5.切换当前目录接口:
参数 dir_name 为需要切换的目录名,也可以指定切换到根目录:\ ;
参数 pvJmpBuf 目前必须传 NULL,用于向后兼容。
如果我们需要操作某个目录,必须先使用该接口切换到它下面。
注意:该接口成功返回 1,失败返回其他值。如果目录不存在,返回 0。
6.执行(打开并读取)当前目录接口:
切换目录之后,通常还需要使用该接口读取当前目录下的文件以及子目录信息。
该接口成功返回 0,失败返回其他值。
7.查询当前目录下文件、目录列表接口:
该函数提供了通过使用文件名来定位查询文件、目录信息的功能。
参数 file_name 即为需要查询的文件、子目录名;
参数 dir_offset 用于逐次地递归遍历,一般传入 0 即可。
参数 fetch_name 用于接收查询到的真实文件、子目录名称,可以传入 NULL忽略。
如果查询成功,该函数返回了指定文件的一些基本信息,FAT32_FILEINFO 结构体定义如下:
这是一个重要的结构,各个字段的意义如下:
字段 dir_offset:当前文件所在目录的物理磁盘偏移位置;
字段 parent_cluster:当前文件所在目录的簇号;
字段 data_cluster:当前文件的起始簇号;
字段 reserved:保留,结构体对齐用;
字段 data_length:当前文件的数据大小。如果是目录,该字段始终为 0。
字段 file_attrs:文件属性,取windows操作系统定义的如下一些常量:
除了上述接口外,SDK还提供了另外一个更加高效的查询接口:
参数 pfnCallback 指定一个回调函数;
参数 pUser 为任意用户自定义的一个指针参数。
该接口可通过一个回调函数的方式快速的列出当前目录下的文件、子目录情况:
相对于 fat32_grep 接口,fat32_ls 接口效率更高。
该接口返回当前目录下的文件、子目录总数。
8.恢复文件接口:
SDK 提供了以下2个接口用于恢复指定的文件:
参数 file_name 为待恢复的文件名;
参数 fat32Info 为待恢复的文件信息;根据文件信息恢复更加可靠。
参数 save_path 为目标恢复的文件保存路径。
如果成功,返回 0,失败返回其它值。
SDK附带一个简单的图形界面demo。图形界面程序可以直观地查看指定地FAT32磁盘的文件内容。通过使用该程序,用户可以只进行较为简单的少量操作实现恢复被删除的文件,做到既能减少用户因文件丢失而导致的损失,又能免去用户为购买数据恢复软件而带来的额外开销。
本程序运行的主界面如下所示:
本程序要求以管理员权限启动,如果当前不是管理员权限,则会弹出UAC界面提示以管理员方式启动。
左上角的下拉组合框将列出所有可选择的物理磁盘或者逻辑驱动分区。双击目录浏览列表框中的目录项,我们可以进入到指定的目录中并展示其下的内容。
当用户选中一个文件之后,可以点击【恢复选定文件】按钮进行恢复操作。
如果选中文件已经存在,则会给出提示。如果选中的文件不存在(以?开头),则没有提示,直接恢复。恢复的默认路径在:C:\fat32\ 目录下。
需要注意的是,任何程序对已删除文件的恢复并非总是能100%保证成功的,本SDK当然也不能例外。通常来说,在文件较小,且误删除后没有其他多余覆盖操作的情况下恢复成功的概率比较大。