2017-03-01 71 views
1

我打算对hFile使用带有INVALID_HANDLE_VALUE的CreateFileMapping()函数,以便存储由页面文件支持。可能有几个进程正在创建这些映射对象。我还需要运行另一个只能从这些映射对象读取的进程。有没有办法让这个过程以编程方式获取内存映射对象列表?即使它是一个系统命令,进程可以运行,然后解析来找出句柄列表,它将起作用。在窗口中查找内存映射对象的列表

我在堆栈溢出中看到了几个类似的问题,但找不到具体的答案。任何见解都会被赞赏

+1

不,您有责任协调文件映射的名称,以便读取过程知道要使用的名称。 (一种可能的方法是使用已知名称的主文件映射,其中包含所有其他映射的名称。) –

回答

1

尽管在技术上有可能让list of handles进入一个进程,然后尝试找出哪些句柄是内存映射文件,但您很快就会不得不调用无证函数,而且还必须处理named pipe hang issue

我会建议您采取不同的方法:

  • 给这些映射名称,以便您可以通过名称来打开它们。这可能需要一个带有已知名称的映射,其中只包含其他名称的列表。

  • 使用句柄继承或DuplicateObject将句柄置入其他进程。使用命名的管道或窗口消息将重复句柄的句柄值发送到其他进程。

  • 只需使用普通文件即可。 FILE_ATTRIBUTE_TEMPORARYFILE_FLAG_DELETE_ON_CLOSE可能会有所帮助。