Marshal.SecureStringToGlobalAllocAnsi(SecureString) Metode

Definisi

Penting

API ini bukan kompatibel CLS.

Menyalin konten yang dikelola SecureString ke dalam memori yang tidak dikelola, mengonversi ke format ANSI saat disalin.

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

Parameter

s
SecureString

Objek terkelola untuk disalin.

Mengembalikan

IntPtr

Alamat, dalam memori yang tidak dikelola, ke tempat s parameter disalin, atau 0 jika objek null disediakan.

Atribut

Pengecualian

Parameternya s adalah null.

Tidak tersedia cukup memori.

Contoh

Contoh berikut menggunakan SecureStringToGlobalAllocAnsi metode untuk marshal dan mendekripsi SecureString konten objek ke blok memori yang tidak dikelola. Kemudian menggunakan ZeroFreeGlobalAllocAnsi metode untuk nol keluar dan membuang blok yang tidak dikelola.

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.

Keterangan

Metode SecureStringToGlobalAllocAnsi ini berguna untuk marshaling kustom atau saat mencampur kode yang dikelola dan tidak dikelola. Karena metode ini mengalokasikan memori tidak terkelola yang diperlukan untuk string, selalu bebaskan memori dengan memanggil ZeroFreeGlobalAllocAnsi metode .

Berlaku untuk

Produk Versi
.NET Core 2.0, Core 2.1, Core 2.2, Core 3.0, Core 3.1, 5, 6, 7, 8, 9
.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