从字节数组c++ winapi创建句柄

Create a handle from byte array c++ winapi

本文关键字:winapi 创建 句柄 c++ 数组 字节 字节数      更新时间:2023-10-16

我有一个应用程序,它接受句柄并执行一些任务。句柄当前正在用CreateFile创建。我的问题是CreateFile将文件路径作为参数之一。我正在寻找一种方法从字节数组返回句柄,因为我需要处理的数据不在磁盘上。有人知道有什么函数可以接受字节数组并返回句柄吗?或者我该怎么做?

您有几个选择:

  1. 重新设计你的处理逻辑,从内存指针而不是HANDLE读取数据,然后你可以将你的字节数组按原样传递给你的处理逻辑。如果您还需要处理文件,您可以将文件数据读入字节数组,然后相应地处理它。

  2. 重新设计你的处理逻辑,从IStream接口读取数据,然后你可以使用SHCreateStreamOnFileEx()SHCreateMemStream(),就像Jonathan Potter建议的。

  3. 如果您必须使用ReadFile()或相关功能从HANDLE读取数据,您可以:

    。将字节数组写入临时文件,然后从该文件中读取。

    b。使用CreatePipe()创建一个匿名管道,然后将字节数组写入一端,并从另一端读取数据,就像Harry Johnston建议的那样。

使用CreateFile()FILE_ATTRIBUTE_TEMPORARY属性允许操作系统将文件保存在内存中。当你必须将内存缓冲区写入文件,然后从文件中读取数据时,你仍然有一个副本发生,但是如果你有足够的缓存内存,什么都不会击中硬盘驱动器。

查看更多细节:

CREATEFILE2_EXTENDED_PARAMETERS结构|缓存行为

您也可以使用文件映射,其中写入文件的数据被强制保留在内存中,但这要复杂得多,可能没有任何好处,因为它不太可能整体上变慢。