我开发了一个使用共享内存的 Windows 应用程序——即——用于进程间通信的内存映射文件。我有一个 Windows 服务,它进行一些处理并定期将数据写入内存映射文件。我有一个单独的 Windows 应用程序,它从内存映射文件中读取并显示信息。该应用程序在 Windows XP、XP Pro 和 Server 2003 上按预期工作,但在 Vista 上却不行。
我可以看到 Windows 服务正在正确地写入内存映射文件的数据,因为我可以使用文本编辑器打开文件并查看存储的消息,但“消费者”应用程序无法从文件中读取。这里要注意的一件有趣的事情是,如果我关闭消费者应用程序并重新启动它,它会使用之前写入内存映射文件的消息。
另外,另一个奇怪的事情是,当我使用远程桌面连接到 Windows 主机并通过远程桌面调用/使用消费者应用程序时,我得到了相同的行为。但是,如果我调用远程桌面并使用以下命令连接到目标主机的控制台会话:mstsc -v:servername /F -console
,一切正常。
所以这就是为什么我认为问题与权限有关。任何人都可以对此发表评论吗?
编辑:
我用来创建内存映射文件和同步访问的 Mutex 对象的 ACL 如下:
TCHAR * szSD = TEXT("D:")
TEXT("(A;;RPWPCCDCLCSWRCWDWOGAFA;;;S-1-1-0)")
TEXT("(A;;GA;;;BG)")
TEXT("(A;;GA;;;AN)")
TEXT("(A;;GA;;;AU)")
TEXT("(A;;GA;;;LS)")
TEXT("(A;;GA;;;RD)")
TEXT("(A;;GA;;;WD)")
TEXT("(A;;GA;;;BA)");
我认为这可能是问题的一部分。