内存映射文件是否支持 uwp 应用程序和 win32 进程之间的 ipc

Is Memory-mapped-files as ipc between uwp app and win32 process supported

官方文档没有正确说明 uwp 是否支持通过内存映射文件的 ipc。我正在研究 uwp 应用程序及其桌面扩展之间的 ipc 场景。虽然我可以使用 System.IO.MemoryMappedFiles 从具有 codeGeneration 功能的 uwp 应用程序创建内存映射文件,但从 win32 进程打开失败并显示消息 Unable to find the specified file.。 uwp 是否支持通过内存映射文件的 ipc,如果是,正确的方法是什么?

Minimal reproduceable sample.

更新 1

Updated sample implementing answer from @Peter Torr - MSFT.

更新 2

Working sample in which memory-mapped-file created from uwp app can be read by win32 process. 在由 win32 进程创建的 uwp 应用程序中读取内存映射文件仍然无法正常工作。

是的,它受支持,但如果您在 UWP 上下文中创建对象并从桌面上下文打开它,则桌面进程需要显式使用命名对象的命名空间。

在您的 UWP 进程中,调用 GetAppContainerNamedObjectPath(nullptr, nullptr, ...) 以确定命名空间是什么,然后在末尾添加反斜杠和您的映射文件名。它将类似于 AppContainerNamedObjects\S-1-15-2-xxxxxxx\YourMappedName

您应该只需要执行一次,除非您更改您的包名称(包括发布者哈希)。因此,一旦您生成了它,您就可以 hard-code 将该值输入到您的桌面应用程序中,然后忘记它。

请注意,如果您以相反的方式进行 - Desktop 创建对象,UWP 打开它 - 那么您无需担心命名空间,但您必须改为修改访问控制,即比较棘手。