boost::进程间消息队列-Windows 7低完整性进程
boost::interprocess message_queue - Windows 7 low integrity process
我正在从一个中等完整性进程创建一个boost::interprocess::message_queue,比如so:
permissions p;
p.set_unrestricted();
message_queue queue(create_only, queueName, 1, sizeof(message_args), p);
从低完整性过程打开队列:
message_queue queue(open_only, queueName);
这在带有Access denied.
的Windows中失败。这是因为用于存储消息队列的目录位于%ProgramData%
(%ProgramData%boost_interprocess
)中,低完整性进程没有写入权限。
有什么方法可以更改boost存储进程间消息队列的目录吗?在中等或高完整性流程和低完整性流程之间,是否有其他方法可以实现这一点?
我使用的是Windows 7上的boost 1.55,它是在Visual Studio 2013中使用VC++v120版本构建的。
我自己没有尝试过,但根据boost文档,这似乎是可能的。
在Windows平台中,如果注册表中,"boost_interprocess"文件夹在该目录中创建(在XP通常为"C:\Documents and Settings\All Users\Application Data"和在Vista"C:\ProgramData"中)。对于没有此功能的Windows平台注册表项和Unix系统,在系统中创建共享内存临时文件目录("/tmp"或类似目录)。
有关详细信息,请参阅链接。
我确实在Windows注册表中搜索了"Common AppData"键,并在以下位置找到了它:
HKEY_LOCAL_MACHINESOFTWAREMicrosoftWindowsCurrentVersionExplorerShell Folders
HKEY_LOCAL_MACHINESOFTWAREMicrosoftWindowsCurrentVersionExplorerUser Shell Folders
HKEY_LOCAL_MACHINESOFTWAREWow6432NodeMicrosoftWindowsCurrentVersionExplorerShell Folders
HKEY_LOCAL_MACHINESOFTWAREWow6432NodeMicrosoftWindowsCurrentVersionExplorerUser Shell Folders
Common AppData
键指向%ProgramData%
,因此您可以尝试将其更改为其他内容或完全删除该键,并查看默认位置是否对每个人都具有写入权限。
编辑:我找到了更好的选择。在interprocess #includes
之前使用BOOST_INTERPROCESS_SHARED_DIR_PATH
定义新路径。(在增压1.56中添加)
- boost::进程间消息队列引发错误
- 在进程中对同一管道进行读取和写入时C++管道出现问题
- 是否可以通过C++扩展强制多个python进程共享同一内存
- IPC使用多个管道和分支进程来运行Python程序
- 异常属于C++中的线程还是进程
- WMI检测进程创建事件-c++
- c++多进程编写一个唯一的文件
- 如何在C++中将函数发送到另一个进程
- 在Qt Creator中,如何在连接到正在运行的进程后查看控制台输出
- 终止 QProcess 不会终止子进程
- 将返回值从 exe 传递到 bat,并将其传递给 C# 中的进程
- COM :是否可以查看是否存在对我的某个 COM 对象的进程外引用?我可以释放它吗?
- Windows 进程间同步类似事件?
- 在挂钩启动新线程时解除挂钩进程
- pclose() 不会给我进程退出代码
- 运行代码时,c++ 会终止进程
- 可以读入进程内存的最大块大小是多少?
- 枚举进程模块在有效句柄上返回无效句柄
- 如何挂钩具有更高完整性级别的进程
- boost::进程间消息队列-Windows 7低完整性进程