首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >boost::进程间message_queue - Windows 7低完整性处理

boost::进程间message_queue - Windows 7低完整性处理
EN

Stack Overflow用户
提问于 2015-06-30 09:55:36
回答 1查看 1.1K关注 0票数 2

我正在从一个中等完整性过程创建一个boost::interprocess::message_queue,如下所示:

代码语言:javascript
运行
复制
permissions p;
p.set_unrestricted();
message_queue queue(create_only, queueName, 1, sizeof(message_args), p);

并从低完整性进程打开队列:

代码语言:javascript
运行
复制
message_queue queue(open_only, queueName);

这在Access denied.中失败--这是因为用于存储message_queue的目录位于%ProgramData% (%ProgramData%\boost_interprocess\)中,而低完整性进程没有写权限。

是否有任何方法更改boost存储区进程间消息队列所在的目录?在中等或高完整性的过程和低完整性的过程之间,还有什么其他方法可以让这个过程发挥作用吗?

我在Windows7上使用boost 1.55,它是在Visual 2013中用VC++版本v120构建的。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-06-30 11:41:00

我没有亲自尝试过,但根据boost文档,这似乎是可能的。

在Windows平台中,如果注册表中存在“公共AppData”键,则在该目录中创建"boost_interprocess“文件夹(在XP中通常是"C:\Documents和Settings\All User\Application Data”和Vista中的"C:\ProgramData")。对于没有该注册表项和Unix系统的Windows平台,共享内存是在系统临时文件目录("/tmp“或类似文件)中创建的。

有关更多详细信息,请参阅链接

我在Windows注册表中搜索了“公共AppData”键,并在下面找到了它:

代码语言:javascript
运行
复制
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Shell Folders
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\User Shell Folders
HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\Windows\CurrentVersion\Explorer\Shell Folders
HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\Windows\CurrentVersion\Explorer\User Shell Folders

Common AppData键指向%ProgramData%,因此您可以尝试将其更改为其他东西,或者完全删除键,并查看默认位置是否对每个人都具有写权限。

编辑:我找到了更好的选择。使用BOOST_INTERPROCESS_SHARED_DIR_PATHinterprocess #includes之前定义新路径。(加进boost 1.56)

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/31135073

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档