Marshal.ZeroFreeGlobalAllocAnsi(IntPtr) メソッド

定義

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

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

パラメーター

s
IntPtr

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

属性

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

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

class Example
{
    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.SecureStringToGlobalAllocAnsi(passWord);
        passWord.Dispose();

        if (unmanagedRef != IntPtr.Zero) {
            Console.WriteLine("Zeroing out unmanaged memory...");
            Marshal.ZeroFreeGlobalAllocAnsi(unmanagedRef);
        }
        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;
    }
}
// The example displays output like the following:
//       Please enter your password: ********
//       Copying and decrypting the string to unmanaged memory...
//       Zeroing out unmanaged memory...
//       Done.

注釈

メソッドは ZeroFreeGlobalAllocAnsi 最初にゼロアウトし、 メソッドを使用して割り当てられたアンマネージ メモリを SecureStringToGlobalAllocAnsi 解放します。

適用対象

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