一种将备份镜像挂载成为Windows卷的方法与流程

文档序号:37519882发布日期:2024-04-01 14:34阅读:21来源:国知局
一种将备份镜像挂载成为Windows卷的方法与流程

本发明属于数据安全,具体为一种将备份镜像挂载成为windows卷的方法。


背景技术:

1、由于目前市面上大多数的备份软件采用的备份方式都是将需要备份的数据通过加压、加密的方式,如果用户想浏览镜像文件里面的内容则需通常需要将镜像做一次还原后才能看到镜像里面的数据,即使只需要少量的数据也需要做一次还原操作,对于用户来说非常复杂,而且用户也不一定有空余的磁盘做还原操作,所以,发明一种能够直接将磁盘、分区、系统备份的镜像文件挂载为虚拟卷则支持读取的方法,这样用户就能非常方便的查看到备份源卷里面的数据、从镜像文件中拷贝数和直接打开镜像文件的文件以及运行镜像文件里面的程序。


技术实现思路

1、本发明的目的在于提供一种将备份镜像挂载成为windows卷的方法,以解决背景技术中提出的现有技术中,用户想从备份后的镜像文件中获取出部分数据非常麻烦,以及不能查看镜像文件里面的数据和运行镜像文件里面的程序,传统的方法需要将整个镜像文件还原才能够找到需要的文件问题。

2、为解决上述技术问题,本发明所采用的技术方案是:

3、一种将备份镜像挂载成为windows卷的方法,包括以下步骤:

4、步骤s1,初始化驱动程序:首先在windows nt对象管理器命名空间下创建一个临时目录f;然后在临时目录f下通过iocreatedevicesecure创建类型为磁盘的设备;

5、步骤s2,设备创建成功后,调用keinitializeevent初始化device_extension中的事件对象e;

6、具体的,e指的是一个事件对象event,是一个windows的内核对象,用于表示一个事件;

7、步骤s3,调用initializelisthead初始化一个链表对象l,链表对象l用于存储irp请求;设备的扩展参数里面包括镜像中卷对象的句柄v、文件句柄h、设备编号n、盘符d以及镜像文件读取对象;

8、步骤s4,通过调用pscreatesystemthread为磁盘设备创建一个工作线程,工作线程用于接收事件对象e的通知;

9、步骤s5,为驱动程序指定irp_mj_create、irp_mj_close、irp_mj_read、irp_mj_write、irp_mj_device_control这三个事件的派遣函数和驱动卸载例程的分发函数;

10、步骤s6,当驱动程序的irp_mj_device_control例程收到来自用户层的挂载卷的消息时,将包含用户层传入参数的irp插入到链表l中,并且调用keseteven触发对应设备的事件对象e;

11、步骤s7,事件对象e触发工作线程,工作线程进入工作状态;

12、步骤s701,首先从链表l中获取irp请求,如果获取的irp请求是挂载镜像文件的请求,则根据用户层传入的镜像文件的路径以及版本信息,打开对应的镜像文件,并且从镜像文件的版本链中找到对应的版本,再通过镜像文件模块从对应的版本中获取出对应卷的对象;

13、步骤s702,如果打开镜像文件成功,则将卷对象的句柄存储到设备对象的扩展信息的卷对象的句柄v中;如果打开镜像文件失败,则向用户层返回失败的原因的错误码并结束当前i rp;

14、步骤s703,驱动程序会根据用户层传入的盘符参数,为设备创建一个盘符,如果盘符创建成功,则向用户层返回成功并结束i rp,如果创建失败则需要关闭打开的镜像文件且向用户层返回失败的错误码信息;

15、完成上述步骤后,在wi ndows的资源管理器中会有一个由用户层指定的盘符,用户能够直接访问该卷,并拷贝里面的数据以及运行里面的程序。

16、根据上述技术方案,步骤s1中,调用i ocreatedevi cesecure时需要指定安全描述符字符串"d:p(a;;ga;;;sy)(a;;ga;;;ba)(a;;ga;;;bu)(a;;ga;;;au)(a;;ga;;;i u)",并且将创建的设备设置为只读状态。

17、根据上述技术方案,步骤s701中,从链表l中获取i rp请求是读请求,则通过以下步骤读取卷数据:

18、步骤a1,设备的链表l中获得i rp请求,并从i rp请求的参数中获取出需要读取的起始位置以及总字节数;

19、步骤a2,将起始字节以及总字节都需要转换为扇区,起始扇区等于起始字节除以每个扇区的字节数,总扇区等于需要读取的总字节数除以每个扇区的字节数;

20、步骤a3,根据irp请求传入的总字节数,通过exallocatepool分配一个类型为pagepool的临时缓存内存空间,

21、步骤a3,如果device_extension中的v不为空则通过调用镜像模块的读接口将对应起始扇区致起始扇区加总扇区的数据读取到缓存中;

22、具体的,v指的是一个卷对象,读取某个卷中的数据都是通过卷对象实现,因为增量备份的数据可能存在于多个镜像文件中的,通过卷对象来处理从哪个镜像文件中拿取正确的数据;

23、步骤a4,如果扩展信息中的v为空且文件句柄h不为空,那么用户层需要读取的是卷的文件数据;通过zwreadfile并使用文件的句柄h读取数据到缓冲区;

24、步骤a5,如果成功读取数据到缓冲区,则将缓存中的数据拷贝到r3传入的缓冲区内,并且通知用户层读取成功,如果失败则返回用户层对应的失败原因的错误码,最后释放临时的内存缓存并将irp设置为完成状态。

25、根据上述技术方案,步骤s701中,从链表l中获取irp请求是写请求,在irp_mj_write例程中直接返回写入失败的消息。

26、根据上述技术方案,步骤s701中,从链表l中获取irp的请求是来自上层获取卷大小的请求,会根据挂载时从r3传入的大小信息返回给windows资源管理器。

27、根据上述技术方案,步骤s701中,从链表l中获取irp的请求是用户层应用程序的卸载信号,则关闭对应设备对象中扩展参数中的v对象,并且删除对应的设备的盘符。

28、根据上述技术方案,步骤s701中,从链表l中获取irp的请求是来自上层的irp_mj_device_control,且为打开文件的请求;

29、驱动程序首先会使用用户层传入的安全属性进行模拟,把驱动程序当前线程的访问权限模拟为具有用户层的访问权限,

30、然后通过调用zwcreatefile开打文件,如果打开成功则将文件的名称、句柄信息存储到该设备对象的扩展属性中,并且在打开的时候需要指定文件的访问权限为共享读,

31、最后通过zwqueryinformationfile获得文件的大小和该文件底层缓冲区的对齐情况存储到该文件设备信息的扩展结构中,再向用户层返回成功的通知。

32、根据上述技术方案,步骤s701中,从链表l中获取irp的请求是来自上层的irp_mj_device_control请求,且请求类型为关闭文件的操作;

33、驱动程序将关闭该设备对象的扩展信息中的h句柄,并且翻释放文件相关的资源且相关的参数恢复初始值,并设置irp的完成状态。

34、与现有技术相比,本发明具有以下有益效果:

35、通过本发明中的方法,将备份镜像挂载为windows卷后,用户可以直接在资源管理器中访问该卷,与普通的本地磁盘卷没有区别。这样可以方便地浏览、复制、编辑和运行镜像中的数据和程序,提高了操作的便利性。

36、通过将备份镜像挂载为wi ndows卷,可以直接从镜像中恢复丢失或损坏的数据。同时,也可以将新的数据备份到镜像中,实现数据的安全存储和备份。将备份镜像挂载为windows卷后,可以将其用作虚拟化环境或测试环境的基础。例如,可以将镜像挂载到虚拟机中,以便在隔离的环境中运行和测试应用程序,从而降低了对实际硬件和系统的依赖性。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1