在windows中,如果一个文件以独占的方式被打开了,一般来讲,别的应用程序就不能再打开这个文件了,但是如果要备份这个文件,怎么办呢?

一般有两种方法来处理。

第一种方法:

使用VSS,这也是微软推荐备份的方法,对该文件所在的卷做volume snapshot, 就可以从VSS里面读取该文件内容了。关于VSS编程开发相关信息,可以参考微软文档。

第二种方法:

可以在内核中比如mini filter中打开这个文件,然后将文件的handle传到应用层,应用层就可以使用这个handle去读文件内容了。

比如内核程序打开这个被占用的文件代码如下:

NTSTATUS
GetFileHandleByFileName(
IN PUNICODE_STRING FullFileName,
OUT PHANDLE Handle
)
{HANDLE FileHandle = NULL;PFILE_OBJECT FileObject = NULL;OBJECT_ATTRIBUTES    ObjectAttributes;IO_STATUS_BLOCK        IoStatus;InitializeObjectAttributes(&ObjectAttributes,FullFileName,OBJ_KERNEL_HANDLE | OBJ_CASE_INSENSITIVE,NULL,NULL);NTSTATUS status = FltCreateFileEx(gFilterHandle,NULL,&FileHandle,&FileObject,GENERIC_READ,&ObjectAttributes,&IoStatus,NULL,FILE_ATTRIBUTE_NORMAL,FILE_SHARE_READ | FILE_SHARE_WRITE | FILE_SHARE_DELETE,FILE_OPEN,FILE_NON_DIRECTORY_FILE | FILE_SYNCHRONOUS_IO_ALERT | FILE_SEQUENTIAL_ONLY ,NULL,0,IO_IGNORE_SHARE_ACCESS_CHECK);PT_DBG_PRINT(PTDBG_TRACE_ROUTINES, ("SSMF:GetFileHandleByFileName open the file status is status=%08x\n", status));if (NT_SUCCESS(status) && FileObject){status = ObOpenObjectByPointer(FileObject,0,0,GENERIC_READ,*IoFileObjectType,UserMode,Handle);PT_DBG_PRINT(PTDBG_TRACE_ROUTINES, ("SSMF:ObOpenObjectByPointer open the file (%p) status is status=%08x\n", Handle,status));}if (FileHandle)FltClose(FileHandle);if (FileObject)ObDereferenceObject(FileObject);return status;
}

如何备份被独占文件?相关推荐

  1. 实验: VMware使用快照间接备份原始VMDK文件

    资料上看的使用快照备份运行着的虚拟机     当虚拟机开着时,快照提供了一个备份原始 VMDK 文件的好办法.所有的写入操作 在原始文件上暂停了,因此,复制它在另一个存储卷很安全.这就是像 VMwar ...

  2. oracle 无备份恢复数据文件

    场景:  1.数据库没有备份  2.数据文件损坏  3.不符合使用控制文件和日志文件恢复的场景 1.模拟数据文件损坏 SYS@orcl11g> host cp /etc/passwd /u01/ ...

  3. 根据输入时间段备份压缩日志文件

    根据输入时间段备份压缩日志文件为tar包, ant-1.7.1.jar import java.io.File; import java.io.FileInputStream; import java ...

  4. SpringBoot项目中对mysql数据库进行定时备份为sql文件的实现思路

    场景 在SpringBoot搭建的项目架构中,为了防止数据库被清库或者误删数据库的情况. 所以需要一个定时将mysql的数据库中的数据进行备份成sql文件,并将重要的sql文件通过邮件服务器的方式 发 ...

  5. [20161031]rman备份与数据文件OS块.txt

    [20161031]rman备份与数据文件OS块.txt --每个数据文件都有一个OS块,位于数据文件的第1块(也是0块).通过bbed无法访问: BBED> set dba 7,0 BBED- ...

  6. win2003无法进入桌面_救急,如何通过命令行备份桌面重要文件?

    今天要说的问题,日常使用中还蛮常见的,比如出现紧急:近期系统更新后进不了系统的一定要看!中类似的情况. 对于具有U盘启动盘的朋友们来说,这不是事,因为我们可以通过U盘启动进PE来备份数据,但是日常中, ...

  7. oracle sh文件怎么打开,Oracle数据库逻辑备份的SH文件

    该Oracle教程将告诉诸位学习Oracle的朋友:Oracle数据库逻辑备份的SH文件. 完全备份的SH文件:exp_comp.sh rq=` date +"%m%d" ` su ...

  8. dedecms备份mysql数据库文件_dedecms备份的数据库文件在哪里

    织梦内容管理系统(DedeCms) 是一个简单.实用.开源的PHP开源网站管理系统,也是使用用户最多的PHP类CMS系统. dedecms备份的数据库文件在哪里 大家平常使用dedecms后台备份数据 ...

  9. 如何迁移mac电脑上的itunes备份iphone的文件

    我把mac系统装在128G的ssd固态硬盘上,结果发现我的用户名下的文件夹有20多G不明文件,又显示不出来,想节约一些ssd上的空间,想把这些可能有用可能没用的文件转移到我250G的机械硬盘上. 通过 ...

最新文章

  1. scrapy 中不同页面的拼接_scrapy官方文档提供的常见使用问题
  2. SQL Tips:兼顾检索速度和精确性
  3. java 上下文加载器_如何将JDK6 ToolProvider和JavaCompiler与上下文类加载器一起使用?...
  4. 6种CSS控制元素上下居中效果
  5. 链表题目---6 复制带随机指针的链表
  6. 工作336:uni-ele-el-table修改宽度问题
  7. 计算机视觉论文-2021-06-09
  8. 赠书5本包邮:数据思维实践、Cloud Native分布式架构原理与实践
  9. Java实训项目6:GUI学生信息管理系统 - 实现步骤 - 创建项目
  10. Idea快捷键大全(比较全的)
  11. 桂林老兵php,中间件解析漏洞
  12. 关于PHP的著作文献,著作类参考文献格式
  13. cocos2d-x 3.2 之 三消类游戏——万圣大作战
  14. Duplicate entry问题
  15. 对讲机CE认证需做什么测试
  16. 《西部世界》S2E9:蝶化庄周,浮生若梦
  17. JDBC的传统连接弊端
  18. ad9850c语言编程,AD9850与单片机波形生成程序及设计
  19. 青海大学昆仑学院计算机机考,青海大学昆仑学院英语六级考试报名入口2020年上半年...
  20. 《安富莱嵌入式周报》第310期:集成大语言模型的开源调试器ChatDBG, 多功能开源计算器,M7内核航空航天芯片评估板, Zigbee PRO规范

热门文章

  1. php docker开发环境,使用Docker的PHP开发环境
  2. Java:Java的输入类Scanner
  3. linux root登陆ftp,LINUX服务器下用root登录ftp
  4. 求一个集合的所有子集 Python实现
  5. java 协程线程的区别_为什么 Java 坚持多线程不选择协程?
  6. 基于spark mllib_Spark高级分析指南 | 机器学习和分析流程详解(下)
  7. python 笔记:装饰器
  8. 文巾解题 77. 组合
  9. R语言实战应用精讲50篇(十三)-如何使用JAVA调用R语言,两种语言的完美结合
  10. MATLAB中的varargin,varargout在函数中运用