boost::进程间消息队列-Windows 7低完整性进程

boost::interprocess message_queue - Windows 7 low integrity process

本文关键字:进程 完整性 -Windows 消息 boost 队列      更新时间:2023-10-16

我正在从一个中等完整性进程创建一个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中添加)