C++-windows跨进程权限问题

发布于 2016-11-26 22:22:42 字数 194 浏览 1353 评论 3

我在服务端创建了一段共享内存。并把exe生成服务后台运行。
客户从IE访问服务器,将数据通过网页提交上来,服务器得到网页参数后,建立一个COM对象访问exe的共享内存,然后将在共享内存中的查询结果返回给客户。
问题是现在无法用COM对象访问exe的共享内存,提示访问拒绝 。我在本地经过测试工作流程肯定没有问题,问题肯定在权限方面,我该如何解决?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

夜无邪 2017-10-07 00:07:02

如果是服务程序创建映射,CreateFileMapping的第2参数不要赋值为NULL,因为NULL表示使用当前进程默认的安全描述符,一般应用程序无权访问。可以创建一个安全描述符,添加everyone用户组的访问权限。
如果由应用程序创建映射,应该不会有这样的问题。

可以参考:进程访问共享内存的权限问题

清晨说ぺ晚安 2017-04-19 07:49:56

找到问题所在了,需要在创建共享内存时指定一个安全描述符,增加一个新的访问控制项目(ACE)给进程的拥有者。默认的访问控制列表(ACL)只包含创建者和管理员组。

类似如下代码:

SECURITY_ATTRIBUTES sa;

hMapFile = CreateFileMapping(INVALID_HANDLE_VALUE, // Current file handle.
sa, // 这里要把sa进行一些设置,以便进程可以访问.
// NULL,
PAGE_READWRITE, // Read/write permission.
0, // Max. object size.
FileSize, // Size of hFile.
MapName); // Name of mapping object.

相关资料:
http://msdn.microsoft.com/en-us/library/windows/desktop/aa379560(v=vs.85).aspx

http://msdn.microsoft.com/en-us/library/windows/desktop/aa446595(v=vs.85).aspx

灵芸 2017-03-22 15:12:42

这个问题是因为权限问题造成的,可以从两个方面来考虑:
1)共享内存的创建时创建一个其他所有程序都能访问的共享内存
2)另外一个是提升服务者的权限,比如把访问者变成具有管理员权限的角色,这样就能访问该共享内存

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文