我需要安全地清除一个包含敏感信息的TEdit
控件,这样进程内存就不会包含它(此时我不担心分页文件)。
我已经尝试直接访问String
来设置当前长度为空格(使用_wmemset()
),然后我将使用它来更新TEdit
控件。通过使用相同大小的空格字符串,我假设TEdit
控件将使用其现有的缓冲区来覆盖。
但是,我甚至不能直接更新String
缓冲区。
我见过使用UniqueString(EditControl->Text)
的示例,但最终出现了以下错误:
候选函数不可行:第一个参数需要一个左值
另外两个关于:
其他字符串类型没有已知的转换
如果我使用data()
或c_str()
,它显然是在改变一个副本,而不是字符串,因为如果我打印出EditControl->Text
,我会得到相同的未修改的字符串。
因此,我的第一个问题是,如何清除String
中使用的缓冲区,以确保敏感数据不再位于内存中。
第二个问题是,我最终如何清除TEdit
控件?
1条答案
按热度按时间iyfamqjs1#
我发现访问
TEdit
的Text
属性总是临时的,用于直接从控件发送/检索数据。因此,对于敏感数据,您希望避免使用
Text
属性,而是使用一些老式的Win32SetWindowText()/GetWindowText()
,即::SetWindowText(EditControl->Handle, TCharBufWithString);
然后,您可以控制自己的缓冲区。