0

我正在编写一个加密其数据的应用程序。然后,它可以在用户输入密码后使用应用程序的 UI 以未加密的方式显示它。我的目标是在 RAM 中尽量减少明文数据的暴露。为此,我想尽可能避免将其交换到磁盘。

我知道我可以调整我的进程的工作集(通过调用SetProcessWorkingSetSize API),然后将那些敏感页面锁定在 RAM 中(通过调用VirtualLock)。理论上,这应该最大限度地减少它被写入磁盘的机会。

我的问题是,我可以对对话框窗口中的常用控件(即编辑框组合框和最重要的RichEdit控件)使用的内存做同样的事情吗?

PS。我假设他们都将堆中的数据用于我的进程。正确的?

编辑: 看到下面我需要澄清的所有评论。说“锁”,我不是说“用挂锁和钥匙把它锁起来,这样没人能看到”。VirtualLock我的意思是,像使用API一样锁定它。

4

2 回答 2

2

您可以使用EM_SETHANDLE为编辑控件的初始分配设置句柄,然后EN_ERRSPACE在(如果)空间不足并需要更多空间时做出响应。

从那里开始,您还可以VirtualLock在该内存块上使用以尽可能将其保存在 RAM 中。如果您要经常这样做,您可能需要考虑对控件进行超类化,以防止到处重复代码。

不管好坏,我不相信富文本控件有等价物。

于 2017-05-20T17:40:45.620 回答
0

实际上,有一个原生的 Windows API 可以帮助最大限度地减少密码等关键项目对内存抓取的影响。

请参阅CryptProtectMemory作为起点。

于 2017-05-20T16:59:32.407 回答