Marshal.ZeroFreeGlobalAllocAnsi(IntPtr) Méthode

Définition

Libère un pointeur de chaîne non managé qui a été alloué à l'aide de la méthode SecureStringToGlobalAllocAnsi(SecureString).

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

Paramètres

s
IntPtr

Adresse de la chaîne non managée à libérer.

Attributs

Exemples

L’exemple suivant utilise la SecureStringToGlobalAllocAnsi méthode pour marshaler et déchiffrer le contenu d’un SecureString objet dans un bloc de mémoire non managée. Il utilise ensuite la ZeroFreeGlobalAllocAnsi méthode pour supprimer zéro et supprimer le bloc non managé.

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.

Remarques

La ZeroFreeGlobalAllocAnsi méthode commence par zéro, puis libère la mémoire non managée qui a été allouée à l’aide de la SecureStringToGlobalAllocAnsi méthode .

S’applique à

Produit Versions
.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