Marshal.SecureStringToGlobalAllocAnsi(SecureString) Método

Definición

Importante

Esta API no es conforme a CLS.

Copia el contenido de un SecureString administrado en la memoria no administrada, convirtiéndolo en formato ANSI mientras realiza la copia.

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

Parámetros

s
SecureString

Objeto administrado que se va a copiar.

Devoluciones

IntPtr

Dirección, en memoria no administrada, donde se copió el parámetro s o 0 si se suministró un objeto null.

Atributos

Excepciones

El parámetro s es null.

No hay suficiente memoria disponible.

Ejemplos

En el ejemplo siguiente se usa el SecureStringToGlobalAllocAnsi método para serializar y descifrar el contenido de un SecureString objeto en un bloque de memoria no administrada. A continuación, usa el ZeroFreeGlobalAllocAnsi método para eliminar y eliminar el bloque no administrado.

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.

Comentarios

El SecureStringToGlobalAllocAnsi método es útil para la serialización personalizada o al mezclar código administrado y no administrado. Dado que este método asigna la memoria no administrada necesaria para una cadena, libere siempre la memoria llamando al ZeroFreeGlobalAllocAnsi método .

Se aplica a

Produto Versións
.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