Marshal.ZeroFreeCoTaskMemAnsi(IntPtr) Yöntem

Tanım

yöntemi kullanılarak ayrılan yönetilmeyen bir dize işaretçisini SecureStringToCoTaskMemAnsi(SecureString) serbest koyar.

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

Parametreler

s
IntPtr

Yönetilmeyen dizenin serbest olarak dağıtıldığı adres.

Öznitelikler

Örnekler

Aşağıdaki örnek, bir nesnenin SecureStringToCoTaskMemAnsi içeriğini yönetilmeyen bellek SecureString bloğuna sıralamak ve şifresini çözmek için yöntemini kullanır. Ardından yöntemini kullanarak ZeroFreeCoTaskMemAnsi sıfırlar ve yönetilmeyen bloğu atılır.

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

Açıklamalar

ZeroFreeCoTaskMemAnsi yöntemi önce sıfırdan çıkar ve ardından yöntemi kullanılarak SecureStringToCoTaskMemAnsi ayrılan yönetilmeyen belleği serbest bırakır.

Şunlara uygulanır

Ürün Sürümler
.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