8fc30896db
Former-commit-id: c477e03582759447177c6d4bf412cd2355aad476
59 lines
1.7 KiB
C#
59 lines
1.7 KiB
C#
using System.Security;
|
|
using System.Runtime.InteropServices;
|
|
|
|
namespace System.Net
|
|
{
|
|
static partial class UnsafeNclNativeMethods
|
|
{
|
|
internal unsafe static class SecureStringHelper
|
|
{
|
|
internal static string CreateString(SecureString secureString)
|
|
{
|
|
string plainString;
|
|
IntPtr bstr = IntPtr.Zero;
|
|
|
|
if (secureString == null || secureString.Length == 0)
|
|
return String.Empty;
|
|
#if MONO
|
|
try
|
|
{
|
|
bstr = Marshal.SecureStringToGlobalAllocUnicode(secureString);
|
|
plainString = Marshal.PtrToStringUni(bstr);
|
|
}
|
|
finally
|
|
{
|
|
if (bstr != IntPtr.Zero)
|
|
Marshal.ZeroFreeGlobalAllocUnicode(bstr);
|
|
}
|
|
#else
|
|
try
|
|
{
|
|
bstr = Marshal.SecureStringToBSTR(secureString);
|
|
plainString = Marshal.PtrToStringBSTR(bstr);
|
|
}
|
|
finally
|
|
{
|
|
if (bstr != IntPtr.Zero)
|
|
Marshal.ZeroFreeBSTR(bstr);
|
|
}
|
|
#endif
|
|
return plainString;
|
|
}
|
|
|
|
internal static SecureString CreateSecureString(string plainString)
|
|
{
|
|
SecureString secureString;
|
|
|
|
if (plainString == null || plainString.Length == 0)
|
|
return new SecureString();
|
|
|
|
fixed (char* pch = plainString)
|
|
{
|
|
secureString = new SecureString(pch, plainString.Length);
|
|
}
|
|
|
|
return secureString;
|
|
}
|
|
}
|
|
}
|
|
} |