1

我使用 CreateFileMapping 和 MapViewOfFile 将文件用作两个进程之间的共享存储。

进程A,它在会话0中作为服务运行,以清除文件映射中的内容。

进程B,它是会话1中运行的正常进程,读取和写入文件映射中的内容。

首先使用进程B,有一些数据被存储到文件映射中并终止。然后,运行进程 A 以清除数据。在我的预期中,执行进程 A 后,文件映射将变为空。但它没有。

如果我更改进程 A 的权限,将其作为正常进程运行并在会话 1 中运行。所有这些都正常工作。

我的问题是,Windows 上不同会话之间的同名文件映射不相同?

是否有任何函数可以从会话 0 中的进程创建一个线程以在会话 1 中运行?(我在会话0的过程中尝试在create_thread之前模拟用户会话,它不起作用)

谢谢你。

4

1 回答 1

3

Global\如果要从不同的会话访问对象,则必须在名称前加上前缀。

为避免安全问题,您还希望服务创建对象:

通过使用 CreateFileMapping 从会话零以外的会话在全局命名空间中创建文件映射对象是一项特权操作。因此,在任意远程桌面会话主机(RD 会话主机)服务器会话中运行的应用程序必须启用 SeCreateGlobalPrivilege 才能在全局命名空间中成功创建文件映射对象。权限检查仅限于创建文件映射对象,不适用于打开现有对象。例如,如果服务或系统创建了文件映射对象,则在任何会话中运行的任何进程都可以访问该文件映射对象,前提是用户具有必要的访问权限。

于 2017-05-05T10:15:25.877 回答