为了方便广大一键还原爱好者进行自己的一键还原程序开发,贝壳一键还原提供了备份还原的后台程序供各位爱好者进行一键还原二次开发,贝壳一键还原各系列软件也是基于这样的备份后台,因此开发出来的一键还原所生成的镜像文件是和贝壳一键还原生成的镜像文件是通用的,可以用贝壳一键还原PE版里面的文件提取工具进行文件提取。
由于有很多一键还原程序是调用其它备份还原程序的exe文件,因此在获取进度方面和释放exe文件方面会比较麻烦。所以这里提供的是beikel.dll文件,并提供备份还原接口,通过简单的调用可以方便的进行一键还原软件的开发。

本程序的备份内核基于贝壳的备份还原内核,运行于PE之下,本程序需要beikel.dll库。

下面是一个简单的例子程序,可以看到通过简单的一些代码就可以制作出属于自己的DIY的一键还原软件,后面有下载包,里面有例子代码和beikel.dll文件,各爱好者可以根据自己的水平制作出有漂亮界面或者纯控制台等等的一键还原软件。

// main.cpp
///
/*说明:
*1、此程序属于贝壳一键还原系列的后台程序,运行于PE之下,进行分区备份还原。本程序只备份还原NTFS分区,目的分区亦需要是NTFS分区。
*2、本软件为贝壳完全自主开发的备份还原后台程序。
*3、凡以此beikel.dll进行二次开发,必须注明属于贝壳后台。
*4、未经作者允许,不可以将此程序和DLL文件进行商业用途,贝壳软件保留一切追究的权利。
*5、凡以此开发的软件所造成的后果,作者不负任何责任。
*6、作者QQ:554074233, 贝壳一键还原交流群:132195934,msn:beikel@msn.com
*7、Email:beikel@163.com
*/#include <Windows.h>
#include <tchar.h>
#include <iostream>
using namespace std;/*
* 进度处理函数
*/
typedef void (*Process_t)(int);/*
* @PartLetter:需要备份的分区的盘符,如:'C'
* @ImagePathName:备份的镜像文件路径名,如:K:\\win7_image\\win7.bkp,注意,必须是以.bkp后缀名,否则出错。
* @Process:进度处理回调函数,将会传回备份的进度(1 -- 100)
* @bOutputLog:是否输出log信息,帮助分区备份状态信息,如果备份失败,请查看log信息,log文件和备份镜像同一个目录,如:K:\\win7_image\\beikel.log
* 返回值:true:表示备份成功,false:表示备份失败。
*/
typedef bool (*BackupPartition320_t)(_TCHAR PartLetter, const _TCHAR *ImagePathName, Process_t Process, bool bOutputLog);
/*
* @PartLetter:需要还原的分区的盘符,如:'C'
* @ImagePathName:镜像文件路径名,如:K:\\win7_image\\win7.bkp,注意,必须是以.bkp后缀名,否则出错。
* @Process:进度处理回调函数,将会传回备份的进度(1 -- 100)
* @bOutputLog:是否输出log信息,帮助分区备份状态信息,如果备份失败,请查看log信息,log文件和备份镜像同一个目录,如:K:\\win7_image\\beikel.log
* 返回值:true:表示还原成功,false:表示还原失败。
*/
typedef bool (*RestorePartition320_t)(_TCHAR PartLetter, const _TCHAR *ImagePathName, Process_t Process, bool bOutputLog);static ULONGLONG StartTicks = 0;
static ULONGLONG EndTicks = 0;
static bool StartTime = false;/*
* 进度处理函数,progress的值为 1 至 100,表示进度百分比
*/
static void Process(int progress)
{if (progress && !StartTime){/* 开始计算备份或者还原时间* 因为备份后台在开始做备份或者做还原时需要进行初始化,* 因此在第一次传数据出来时开始进行时间计算是最准确的。*/StartTime = true;StartTicks = GetTickCount64();}cout<<"process: "<< progress<<"%"<<endl;;
}int _tmain(int argc, _TCHAR* argv[])
{BackupPartition320_t BackupPartition;RestorePartition320_t RestorePartition;HINSTANCE hinstLib = LoadLibrary(_T("beikel.dll"));if(!hinstLib){cerr<<"Can not load beikel.dll\n";return -1;}BackupPartition = (BackupPartition320_t) GetProcAddress(hinstLib, "BackupPartition320");RestorePartition = (RestorePartition320_t) GetProcAddress(hinstLib, "RestorePartition320");int type;cout<<"select backup or restore (input 1(backup) or 2(restore): ";cin>>type;cout<<endl;bool b;if (type == 1){b = BackupPartition(_TCHAR('H'), _T("K:\\win7_image\\win7.bkp"), Process, true);}else if (type == 2){b = RestorePartition(_TCHAR('H'), _T("K:\\win7_image\\win7.bkp"), Process, true);}else{cout<<"Error input!";return -1;}EndTicks = GetTickCount64();ULONGLONG SpendTime = EndTicks - StartTicks;SpendTime /= 1000;if (SpendTime > 3600){int h = SpendTime/3600;int m = SpendTime%3600/60;int s = SpendTime%3600%60;cout<<"Time spend:"<<h<<":"<<m<<":"<<s<<endl;}else if(SpendTime > 60){int m = SpendTime/60;int s = SpendTime%60;cout<<"Time spend:"<<"0:"<<m<<":"<<s<<endl;}else{cout<<"Time spend:"<<"0:"<<"0:"<<SpendTime<<endl;}if (b){if (type == 1)cout<<"Backup Success!"<<endl;elsecout<<"Restore Success!"<<endl;}else{if (type == 1)cout<<"Backup Failed!"<<endl;elsecout<<"Restore Failed!"<<endl;}return 0;
}

使用:
将代码拷贝为main.cpp,然后在vc下新建一个工程,并加入main.cpp并编译,编译成功后把beikel.dll拷贝到生产exe文件的目录下即可运行程序进行备份和还原。

源代码和beikel.dll包下载地址:
http://www.vdisk.cn/down/index/10989215
百度网盘下载地址:
http://pan.baidu.com/share/link?shareid=66660&uk=3525712704

为了防止下载到他人制作的虚假dll文件,各位可以下载完压缩包后,可以对压缩包进行md5和sha校验。
压缩包校验:
MD5: a2cb138ac796ae947c3156f037053fb8
Sha: 387b39c05e85f5403302d3cbca9fa9bc58163989

教你打造基于贝壳内核的最简单一键备份还原软件(源代码)相关推荐

  1. 基于Linux内核时钟的简单闹钟应用

    目录 技术路线 应用程序 模块设计 总体功能以及设计 流程图 代码 Makefile timer.c alarm.c 编译过程及编译结果 清理工程 编译工程 运行或测试结果 导入模块 调用应用程序 参 ...

  2. U大师一键备份还原系统操作步骤,教你电脑一键备份还原怎么用

    针对于系统重装费时问题,系统的备份还原软件越来越受广大电脑用户的亲睐,U大师推出一款"电脑版备份还原系统"软件,本教程介绍使用该软件对已经安装的操作系统(也就是系统所在的C盘)进行 ...

  3. 教你打造一道超级防御的电脑防火墙

    教你打造一道超级防御的电脑防火墙<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office&quo ...

  4. 单独组件_阿里P8年薪百万大牛-教你打造一个Android组件化开发框架

    作者简介 本篇来自 lucky_billy 的投稿,分享了他的开源组件化框架,详细地讲解框架形成的思路,希望对大家有所帮助. lucky_billy 的博客地址: http://blog.csdn.n ...

  5. websockert后台定时向前端发送状态_(文末送书)手把手教你打造属于自己团队的前端小报系统...

    本文首发于政采云前端团队博客:手把手教你打造属于自己团队的前端小报系统 https://www.zoo.team/article/building-a-tabloid-system 前言 经常关注我们 ...

  6. 何以解忧,唯有暴富,手把手教你打造财富方程式

    引言 上一篇<前端工程师如何才能不焦虑?> 发表后,很多小伙伴都评论说"何以解忧,唯有暴富".这是一句实在话,正所谓焦虑也许不只是工作上,其实是生活. 但是大多数都是普 ...

  7. 手工打造基于MM32F5微控制器的MicroPython开发板

    手工打造基于MM32F5微控制器的MicroPython开发板 苏勇,2022-07-21 文章目录 手工打造基于MM32F5微控制器的MicroPython开发板 引言 MM32F5微控制器简介 制 ...

  8. 网络编程懒人入门(八):手把手教你写基于TCP的Socket长连接

    转自即时通讯网:http://www.52im.net/ 本文原作者:"水晶虾饺",原文由"玉刚说"写作平台提供写作赞助,原文版权归"玉刚说" ...

  9. 直播回顾:如何基于Linux内核构建起商用密码基础设施?| 龙蜥技术

    编者按:本文整理自龙蜥大讲堂技术解读,分享主题为<构建商用密码操作系统>,直播视频回放已上线至龙蜥社区官网(文末阅读原文直接跳转):首页-支持-视频,欢迎观看. 作者张天佳,来⾃阿⾥云操作 ...

最新文章

  1. .NET软件开发, 你应该知道 (整)
  2. bootstrap 数据加载中提示_解决Quartz定时器中查询懒加载数据no session的问题
  3. 递归函数与二分查找算法
  4. 远程桌面连接的几种方法
  5. 项目管理团队建设成功经验
  6. WPE下载 WPE 各版本下载 及 教程
  7. Team Viewer 远程链接一直显示-正在初始化显示参数
  8. python存储数据到mysql--针对dataframe格式下的
  9. Android配置启动页
  10. spark Kafka 线程安全问题
  11. 率土之滨服务器维护2月19日,率土之滨连发两封致歉信后,资深月卡党的我决定重新入坑...
  12. hdwiki下model目录功能
  13. 汇编语言中xor指令_这个汇编代码有什么作用? (TEST,XOR,JNZ)
  14. (7)centos7 同步服务器时间
  15. 计算机反复几次才能启动,电脑连续开机几次才能启动怎么办?
  16. 长链剖分(知识点整理+板子总结)
  17. 注意GetMessage()的返回值
  18. 计算机安全措施方案,计算机安全应急预案
  19. Tomcat报错:waiting for changelog lock.
  20. html 全景图three,Three.js 3D 城市模型(全景图)

热门文章

  1. □ 影片名:《算死草》(3638) 在线播放
  2. javaweb 前端发送list对象,后台接收过程实现代码
  3. 华为软件开发云——个人评测
  4. EVB_Air724UG_A13开发板使用指南
  5. 产品思维训练 | 新用户从注册到绑卡流失率很高是什么原因?
  6. cad对计算机的配置要求高吗,AutoCAD2018对电脑配置要求 需要什么配置的电脑
  7. 为什么要 conda 作用_商标有哪些作用?为什么要重视商标
  8. 文字时钟罗盘动态html代码_HTML5 很有趣的文字时钟
  9. java swing 常用的三种布局方式:边界布局、流布局、网格布局管理器
  10. 锤子手机使用android启动器,领略拟物风的魅力 -- 锤子桌面 #Android