在 Windows 的不同会话中使用文件映射
Using file mapping in different sessions on Windows
我使用 CreateFileMapping 和 MapViewOfFile 将文件用作两个进程之间的共享存储。
进程A,它运行正在session 0中作为Service,清除文件映射中的内容。
进程B,是会话1中的正常进程运行,读写文件映射中的内容。
首先使用进程B,有一些数据被存储到文件映射中并终止。
然后,运行进程A清除数据。在我的预料中,执行进程A后,文件映射将变为空。但它没有。
如果我更改进程 A 的特权,运行将其作为正常进程并在会话 1 中运行。所有进程均正常工作。
我的问题是,同名文件映射在 windows 的不同会话之间不相同?
是否有任何函数可以从会话 0 中的进程创建到会话 1 中 运行 的线程? (我在session 0的进程create_thread之前试过模拟用户session,没用)
谢谢。
如果要从不同的会话访问对象,名称必须以 Global\
为前缀。
为避免安全问题,您还希望服务创建对象:
The creation of a file-mapping object in the global namespace, by using CreateFileMapping, from a session other than session zero is a privileged operation. Because of this, an application running in an arbitrary Remote Desktop Session Host (RD Session Host) server session must have SeCreateGlobalPrivilege enabled in order to create a file-mapping object in the global namespace successfully. The privilege check is limited to the creation of file-mapping objects, and does not apply to opening existing ones. For example, if a service or the system creates a file-mapping object, any process running in any session can access that file-mapping object provided that the user has the necessary access.
我使用 CreateFileMapping 和 MapViewOfFile 将文件用作两个进程之间的共享存储。
进程A,它运行正在session 0中作为Service,清除文件映射中的内容。
进程B,是会话1中的正常进程运行,读写文件映射中的内容。
首先使用进程B,有一些数据被存储到文件映射中并终止。 然后,运行进程A清除数据。在我的预料中,执行进程A后,文件映射将变为空。但它没有。
如果我更改进程 A 的特权,运行将其作为正常进程并在会话 1 中运行。所有进程均正常工作。
我的问题是,同名文件映射在 windows 的不同会话之间不相同?
是否有任何函数可以从会话 0 中的进程创建到会话 1 中 运行 的线程? (我在session 0的进程create_thread之前试过模拟用户session,没用)
谢谢。
如果要从不同的会话访问对象,名称必须以 Global\
为前缀。
为避免安全问题,您还希望服务创建对象:
The creation of a file-mapping object in the global namespace, by using CreateFileMapping, from a session other than session zero is a privileged operation. Because of this, an application running in an arbitrary Remote Desktop Session Host (RD Session Host) server session must have SeCreateGlobalPrivilege enabled in order to create a file-mapping object in the global namespace successfully. The privilege check is limited to the creation of file-mapping objects, and does not apply to opening existing ones. For example, if a service or the system creates a file-mapping object, any process running in any session can access that file-mapping object provided that the user has the necessary access.