Marshal.SecureStringToCoTaskMemAnsi(SecureString) メソッド

定義

重要

この API は CLS 準拠ではありません。

アンマネージド COM タスク アロケーターから割り当てられたメモリ ブロックに、マネージド SecureString オブジェクトの内容をコピーします。

C#
public static IntPtr SecureStringToCoTaskMemAnsi(System.Security.SecureString s);
C#
[System.CLSCompliant(false)]
public static IntPtr SecureStringToCoTaskMemAnsi(System.Security.SecureString s);
C#
[System.Security.SecurityCritical]
public static IntPtr SecureStringToCoTaskMemAnsi(System.Security.SecureString s);

パラメーター

s
SecureString

コピーするマネージド オブジェクト。

戻り値

IntPtr

s パラメーターのコピー先となったアンマネージ メモリ内のアドレス。null オブジェクトが指定された場合は 0。

属性

例外

s パラメーターが null です。

使用できるメモリが不足しています。

次の例では、 メソッドを 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;
     }
}

注釈

メソッドは SecureStringToCoTaskMemAnsi 、カスタム マーシャリングや、マネージド コードとアンマネージド コードを混在させる場合に便利です。 このメソッドは、文字列に必要なアンマネージ メモリを割り当てるので、 を呼び出 ZeroFreeCoTaskMemAnsiして常にメモリを解放します。 文字列の文字は ANSI 文字としてコピーされます。

適用対象

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