我需要清除一个具有敏感信息的
TEdit
控件,这样进程内存就不会包含它(此时我不担心页面文件)。
我尝试直接访问
String
以将当前长度设置为空格(使用 _wmemset()
),然后我将使用它来更新 Edit
控件。通过使用相同大小的空格字符串,我假设 Edit
控件将使用其现有缓冲区进行覆盖。
但是,我连
String
缓冲区都无法直接更新。我见过使用 UniqueString(EditControl->Text)
但最终以 candidate function not viable: expects an l-value for 1st argument
加上另外两个关于 no known conversion of the other string types. If I use data()
or c_str()
it apparently changing a copy 而不是字符串,因为如果你打印出EditControl->Text
,你会得到相同的未修改的字符串。
所以我的第一个问题是如何清除
String
中使用的缓冲区以确保敏感数据不再在内存中。第二个是你最终如何清除Edit
控制。
TIA!!
我发现访问
Text
的TEdit
属性总是临时的,用于直接从控件发送/检索数据。
因此,对于敏感数据,您希望避免使用
Text
属性,而是使用一些老式的 Win32 SetWindowText()/GetWindowText()
即 ::SetWindowText(EditControl->Handle, TCharBufWithString);
然后您可以控制自己的缓冲区。