【发布时间】:2018-09-29 08:04:44
【问题描述】:
我想做一些类似映射共享内存 (CreateFileMapping()) 的事情,但我希望虚拟文件在进程终止后继续存在,并且在我明确删除它之前可以被其他进程读取。
该应用程序与存储密码有关,因此我不想使用物理文件或其他易于读取的持久方法(如注册表)。我想将数据泵入内存,保留在那里直到被删除,并在需要时从中读取。它应该会在重新启动时消失。
【问题讨论】:
-
这会给您一种安全的错觉,但会增加您的复杂性。
-
听起来你在重新发明轮子。您也可以使用 PasswordCredential 类来存储您的密码,并从专业级安全性中受益,而无需尝试自己动手。
-
是的……实际上那是我(没有意识到我)正在重新发明的轮子。谢谢你指点我。不过,讨论确实很棒,因为很高兴知道还有其他方法可以使用永久句柄将数据插入持久共享内存。谢谢大家,指导。设置 SeCreatePermanentPrivilege 后,我能够得到这个工作
-
句柄是对Section对象的引用。您没有使手柄永久化。您正在使 Section 永久化,这是可能的,因为它在对象命名空间中命名。永久标志防止内核的对象管理器删除名称,从而保持对象被引用。
-
仅供参考,如果您没有在会话 0 中的服务或任务中创建部分,请使用“全局”链接,例如
L"Global\\SectionName"(仅限反斜杠;正斜杠是名称字符)。 Windows 为会话的命名对象目录“\Sessions\[会话标识符]\BaseNamedObjects”创建相对于RootDirectory句柄的命名内核对象,并且“全局”是该目录中的一个 SymbolicLink 对象,它重新解析为会话 0“\ BaseNamedObjects" 全局对象目录。
标签: winapi shared-memory