【问题标题】:Reading file content from the MFT at runtime在运行时从 MFT 读取文件内容
【发布时间】:2015-08-24 16:34:07
【问题描述】:

我必须读取正在运行的 Windows(XP 或更高版本)的 MFT 文件,并通过它到达保存机器上特定文件内容 ($DATA) 的 HD 扇区。

问题在于,在读取 MFT 直到获取相关扇区并读取它们之间,文件系统结构可能会发生变化,并且位置可能不再相关。

有没有办法将系统“冻结”一段时间?也许保证不会对此文件进行更改?锁定特定文件以使其不在扇区之间移动? (包括由于优化和间接的变化)

当然,我不希望复制整个硬盘并静态工作,因为这是一个缓慢的操作,此时将无法正常使用系统。不用说,我不想使用操作系统的API函数,也不想写驱动。

【问题讨论】:

  • 从问题中我不明白您是否真的想读取 $DATA 属性的内容或实际的文件数据 - 由于延迟写入操作和其他几种情况,这不是一回事。
  • 我实际上需要我们调用 ReadFile 时显示的真实数据。
  • 转向另一个奇怪的方向 - 您可以安装像 WinPE 这样的预启动操作系统,然后从那里开始工作。在这样的环境中,您是唯一的用户进程,您可以不受干扰地处理所有文件。我正在开发一种“修复和成像”产品来做到这一点。搞乱 BCD 有点像跳舞,但拥有固定、稳定的文件状态是如此了不起。 winPE中的用户进程以管理员身份运行,顺便说一句。
  • stackoverflow 'mft' 标签不引用主文件表。它代表 Media Foundation Transform,在这里似乎并不适用。
  • 在这种情况下,可能需要考虑使用卷 shadow copy

标签: ntfs ntfs-mft


【解决方案1】:

我只需以读取共享模式打开文件,请求读/写访问权限。如果您成功打开文件,则可以保证在关闭句柄之前数据不会更改。见https://msdn.microsoft.com/en-us/library/windows/desktop/hh449422%28v=vs.85%29.aspx

如果你想在已经被不同进程打开和锁定的文件上实现这一点,那就完全不同了,我相信你必须编写自己的过滤器驱动程序。

【讨论】:

  • 问题是我不需要影响系统日志,也不需要留下痕迹或对文件系统进行更改
  • 除非你对文件执行写操作,你不会改变文件(它的内容),但你会改变文件的访问时间。我不确定您想到了什么日志(审计、日志),或者您如何定义跟踪 - ?尽管如此,我相信这是唯一的高级选项。
【解决方案2】:

如果系统中的文件位置发生变化,则会相应地反映在 MFT 中。因此,您可以简单地比较读取文件前后的 MFT 信息,而不是尝试停止文件的任何活动。除非您对文件的内容进行碎片整理或删除,否则文件存储结构不会改变。对文件的添加不会影响您读取的数据的一致性。因此,如果这是您的情况,您可以继续使用上述方法。

【讨论】:

    猜你喜欢
    • 2010-11-30
    • 1970-01-01
    • 2017-08-13
    • 1970-01-01
    • 2013-03-19
    • 1970-01-01
    • 2017-04-19
    • 2012-02-26
    • 1970-01-01
    相关资源
    最近更新 更多