Marshal.ZeroFreeCoTaskMemAnsi(IntPtr) メソッド

定義

SecureStringToCoTaskMemAnsi(SecureString) メソッドを使用して割り当てられたアンマネージ文字列ポインターを解放します。

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

パラメーター

s
IntPtr

解放するアンマネージ文字列のアドレス。

属性

次の例では、 メソッドを SecureStringToCoTaskMemAnsi 使用して、オブジェクトの内容をアンマネージド メモリの SecureString ブロックにマーシャリングおよび復号化します。 次に、 メソッドを ZeroFreeCoTaskMemAnsi 使用して、アンマネージド ブロックをゼロにして破棄します。

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 解放します。

適用対象

製品 バージョン
.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