我想检索某些进程正在使用的非常大的文件(数百GB到x TB)的句柄。我正在考虑暂时关闭正在运行的进程,然后将它们复制到某个特定位置。但出于几个原因,这种方法看起来很笨拙。
所以我有2个问题,
答案 0 :(得分:0)
如果原始进程以非共享模式打开文件(似乎很可能是这样的大文件),那么在不关闭该进程的情况下执行此操作可能会运气不好 - 或者至少让它放弃文件。如果它允许至少读取共享,我建议您使用事务性NTFS - 尽管所有文档都有关于此的警告。
创建一个KTM事务管理器(通过CreateTransactionManager),创建一个KTM事务(使用CreateTransaction),然后使用CopyFileTransacted进行实际复制。最后提交事务(CommitTransaction),然后关闭所有句柄。这样做将确保文件处于一致状态(不会从原始进程部分写入)。
也可能是备份API可以忽略共享模式(我知道如果你的进程启用了适当的权限,而不确定共享,它可以忽略安全检查。)