В настоящее время у меня есть проблема в проекте, где защищенная строка отображается следующим образом:
IntPtr unmanagedString = IntPtr.Zero;
try
{
unmanagedString = Marshal.SecureStringToGlobalAllocUnicode(secureString);
string str = Marshal.PtrToStringUni(unmanagedString);
...
...
}
finally
{
Marshal.ZeroFreeGlobalAllocUnicode(ptr);
}
После вызова Marshal.SecureStringToGlobalAllocUnicode(secureString)
копия содержимого защищенной строки сохраняется в неуправляемой памяти. Даже после того, как Marshal.ZeroFreeGlobalAllocUnicode(ptr)
вызванная строка может быть легко найдена с помощью инструментов памяти, просто ищите все строки.
Есть ли способ полностью удалить ее или, по крайней мере, go вокруг нее, например, переписать это?