Marshal.ZeroFreeCoTaskMemAnsi(IntPtr) 方法

定義

釋放之前使用 SecureStringToCoTaskMemAnsi(SecureString) 方法配置的 Unmanaged 字串指標。

C#
[System.Security.SecurityCritical]
public static void ZeroFreeCoTaskMemAnsi (IntPtr s);
C#
public static void ZeroFreeCoTaskMemAnsi (IntPtr s);

參數

s
IntPtr

要釋放的 Unmanaged 字串的位址。

屬性

範例

下列範例會 SecureStringToCoTaskMemAnsi 使用 方法來封送處理對象的內容 SecureString ,並將其解密為 Unmanaged 記憶體區塊。 然後, ZeroFreeCoTaskMemAnsi 它會使用 方法來零出並處置 Unmanaged 區塊。

C#
using System;
using System.Runtime.InteropServices;
using System.Security;

class MarshalExample
{
     static void Main()
     {
         IntPtr unmanagedRef = IntPtr.Zero;

          // Ask the user for a password.
          Console.Write("Please enter your password: ");

          SecureString passWord = GetPassword();

          Console.WriteLine("Copying and decrypting the string to unmanaged memory...");

          // Copy the Secure string to unmanaged memory (and decrypt it).
          unmanagedRef = Marshal.SecureStringToCoTaskMemAnsi(passWord);

          if (unmanagedRef != IntPtr.Zero)
          {
              Console.WriteLine("Zeroing out unmanaged memory...");

              Marshal.ZeroFreeCoTaskMemAnsi(unmanagedRef);
          }
          passWord.Dispose();

         Console.WriteLine("Done.");
     }

     public static SecureString GetPassword()
     {
         SecureString password = new SecureString();

         // get the first character of the password
         ConsoleKeyInfo nextKey = Console.ReadKey(true);

         while (nextKey.Key != ConsoleKey.Enter)
         {
             if (nextKey.Key == ConsoleKey.Backspace)
             {
                 if (password.Length > 0)
                 {
                     password.RemoveAt(password.Length - 1);

                     // erase the last * as well
                     Console.Write(nextKey.KeyChar);
                     Console.Write(" ");
                     Console.Write(nextKey.KeyChar);
                 }
             }
             else
             {
                 password.AppendChar(nextKey.KeyChar);
                 Console.Write("*");
             }

             nextKey = Console.ReadKey(true);
         }

         Console.WriteLine();

         // lock the password down
         password.MakeReadOnly();
         return password;
     }
}

備註

方法 ZeroFreeCoTaskMemAnsi 會先零出,然後釋放使用 SecureStringToCoTaskMemAnsi 方法配置的 Unmanaged 記憶體。

適用於

產品 版本
.NET Core 1.0, Core 1.1, Core 2.0, Core 2.1, Core 2.2, Core 3.0, Core 3.1, 5, 6, 7, 8, 9
.NET Framework 2.0, 3.0, 3.5, 4.0, 4.5, 4.5.1, 4.5.2, 4.6, 4.6.1, 4.6.2, 4.7, 4.7.1, 4.7.2, 4.8, 4.8.1
.NET Standard 1.1, 1.2, 1.3, 1.4, 1.5, 1.6, 2.0, 2.1
UWP 10.0