繁体   English   中英

是否可以锁定应用程序中通用控件使用的内存?

[英]Is it possible to lock memory used by common controls in my application?

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

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

我的问题是,我可以做所使用的通用控件在我的对话框窗口,即在内存中相同的编辑框组合框 ,最重要的RichEdit控制?

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

编辑: 看到所有的评论下面我需要澄清。 说“锁定”,我不是这个意思,“用挂锁和钥匙锁住它,这样没有人能看到它。” 我的意思是,将其锁定为与VirtualLock API。

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

从那里开始,还取决于您是否在该内存块上使用VirtualLockVirtualLock尽可能地保留在RAM中。 如果您打算做很多事情,则可能要考虑对控件进行超类化,以防止在各处复制代码。

不管是好是坏,我都不相信富文本控件具有等效功能。

实际上,有一个本机Windows API可以帮助最大程度地减少关键内容(例如密码)对内存刮取的影响。

请参阅CryptProtectMemory作为起点。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM