Auf Englisch lesen

Freigeben über


Marshal.ZeroFreeCoTaskMemAnsi(IntPtr) Methode

Definition

Gibt einen nicht verwalteten Zeichenfolgenzeiger frei, der mit der SecureStringToCoTaskMemAnsi(SecureString)-Methode reserviert wurde.

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

Parameter

s
IntPtr

Die Adresse der nicht verwalteten Zeichenfolge, die freigegeben werden soll.

Attribute

Beispiele

Im folgenden Beispiel wird die SecureStringToCoTaskMemAnsi -Methode verwendet, um den Inhalt eines SecureString Objekts in einen Block nicht verwalteten Arbeitsspeichers zu marshallen und zu entschlüsseln. Anschließend wird die ZeroFreeCoTaskMemAnsi -Methode verwendet, um den nicht verwalteten Block zu löschen und zu löschen.

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;
     }
}

Hinweise

Die ZeroFreeCoTaskMemAnsi -Methode stellt zuerst null und gibt dann nicht verwalteten Arbeitsspeicher frei, der mithilfe der SecureStringToCoTaskMemAnsi -Methode zugeordnet wurde.

Gilt für:

Produkt Versionen
.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, 10
.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