Auf Englisch lesen

Freigeben über


Marshal.ZeroFreeGlobalAllocAnsi(IntPtr) Methode

Definition

Gibt einen nicht verwalteten Zeichenfolgenzeiger frei, der mit der SecureStringToGlobalAllocAnsi(SecureString)-Methode reserviert wurde.

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

Parameter

s
IntPtr

Die Adresse der nicht verwalteten Zeichenfolge, die freigegeben werden soll.

Attribute

Beispiele

Im folgenden Beispiel wird die SecureStringToGlobalAllocAnsi -Methode verwendet, um den Inhalt eines SecureString Objekts in einen Block nicht verwalteten Arbeitsspeichers zu marshallen und zu entschlüsseln. Anschließend wird die ZeroFreeGlobalAllocAnsi -Methode verwendet, um den nicht verwalteten Block zu löschen und zu löschen.

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.

Hinweise

Die ZeroFreeGlobalAllocAnsi -Methode stellt zuerst null und gibt dann nicht verwalteten Arbeitsspeicher frei, der mithilfe der SecureStringToGlobalAllocAnsi -Methode zugeordnet wurde.

Gilt für:

Produkt Versionen
.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