【问题标题】:how to map a file in RAM by offset and size in windows如何在Windows中通过偏移量和大小映射RAM中的文件
【发布时间】:2017-11-14 07:38:52
【问题描述】:

我有一个 C++ programfind 来删除硬盘上的文件。所以程序从分区的开头开始读取,每当它看到一个有效的签名时,它就会读取它并根据文件类型找到文件大小。

然后它将文件的开始大小和偏移量保存到数据库中。 现在我想要的是在这个过程完成后将文件提供给一些分析器!

我现在正在做的是将文件恢复到硬盘中,然后将它们的地址提供给分析器。但是太长了。

我想通过虚拟文件系统将这些文件加载​​到 RAM 中,它获取文件地址偏移量和文件大小,然后提供一个虚拟地址,分析器可以通过 fopen() 读取这些文件,它变得更快,但我没有不想在分区上写文件。

实际上文件已经存在于分区中,但不存在于文件系统表中。

这种方式有什么解决办法吗?

【问题讨论】:

    标签: c++ windows memory-mapped-files memory-mapping virtualfilesystem


    【解决方案1】:

    你必须知道一个简单的技巧。如您所知,请致电CreateFile,但请通过FILE_ATTRIBUTE_TEMPORARY。这是对 Windows 将文件保留在 RAM 中的强烈提示,因为您打算在使用后立即将其删除。

    您也可以通过FILE_FLAG_DELETE_ON_CLOSE 让自己更轻松。

    【讨论】:

    • 我根本不想将文件保存在磁盘上。我有文件偏移量和大小,我想把它作为文件放在 ram 上而不用硬写。换句话说,我在 ram 上有一个流我想把它映射到一个分区上,但不会让任何事情变得困难
    • 嗯,你不知道它是否在 RAM 中,是吗?不在任何具有虚拟地址空间的现代操作系统上。您可能会认为它在 RAM 中,并且实际上已换出到磁盘。或者相反,您可能认为它在磁盘上,但实际上它在文件缓存中。我知道你在说什么,但我也知道 Windows 与你的心智模型有多么相似。
    猜你喜欢
    • 2020-10-30
    • 2011-03-26
    • 2014-01-26
    • 2015-03-29
    • 2023-03-25
    • 1970-01-01
    • 2010-10-04
    • 2011-11-15
    相关资源
    最近更新 更多