gpt4 book ai didi

c++ - VirtualLock 真的按照它说的做吗?

转载 作者:太空宇宙 更新时间:2023-11-04 02:26:58 25 4
gpt4 key购买 nike

为了安全起见,我目前正在研究如何避免在程序执行期间交换某些数据 block 。

就我的搜索而言,我在 Linux 上找到了 mlock,这似乎正是我需要的工具,在 Windows 上找到了 VirtualLock。

对于后者,我发现了不同的看法。 the documentation说是

Pages that a process has locked remain in physical memory until the process unlocks them or terminates.

然而,人们似乎不同意并声称VirtualLock only lock the memory in the working set of the process ,因此只要至少有一个程序线程在运行,内存就不会被交换。这意味着如果由于某种原因每个线程都被阻塞,则数据可能会被换出。

有人可以为我澄清这一点吗?如果文档确实是错误的,这只是一个理论上的风险,还是我应该认真考虑一下?我可以使用什么解决方案来真正将内存锁定在 RAM 中?

如果有帮助,我的目标是确定在加密应用程序中删除内存的好的做法和坏的做法

编辑:this article回答问题,肯定是lock in RAM。然而它引发了另一个问题:如何摆脱缓存问题?我最终可能会得到我的数据的多个拷贝...

最佳答案

如果您需要安全性,您实际上有两个选择:

  1. 进入内核模式
  2. 使用CryptProtectMemory加密内存中的数据

问题是,即使您将 ram 锁定在适当的位置,如果其他进程具有正确的访问权限,它们也可以读取它。有一些方法可以使用进程隔离来潜在地防止这种情况发生,但它们需要访问 MS 限制 DRM 开发人员使用的 SDK。

请记住,当您使用完内存后,您需要使用 SecureZeroMemory 清除它,编译器不会优化它。

关于c++ - VirtualLock 真的按照它说的做吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49676457/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com