Esporta (0) Stampa
Espandi tutto
Espandi Riduci a icona
Questo argomento non è stato ancora valutato - Valuta questo argomento

Metodo Marshal.ZeroFreeGlobalAllocAnsi

Nota: questo metodo è stato introdotto con .NET Framework versione 2.0.

Libera un puntatore a una stringa non gestita allocato tramite il metodo SecureStringToGlobalAllocAnsi.

Spazio dei nomi: System.Runtime.InteropServices
Assembly: mscorlib (in mscorlib.dll)

public static void ZeroFreeGlobalAllocAnsi (
	IntPtr s
)
public static void ZeroFreeGlobalAllocAnsi (
	IntPtr s
)
public static function ZeroFreeGlobalAllocAnsi (
	s : IntPtr
)

Parametri

s

Indirizzo della stringa non gestita da liberare.

Il metodo ZeroFreeGlobalAllocAnsi innanzitutto azzera e quindi libera la memoria non gestita allocata tramite il metodo SecureStringToGlobalAllocAnsi.

NotaNota

Questo metodo utilizza SecurityAction.LinkDemand per evitare di essere chiamato da codice non attendibile; solo il chiamante diretto deve disporre dell'autorizzazione SecurityPermissionAttribute.UnmanagedCode. Se il codice utilizzato può essere chiamato da codice parzialmente attendibile, non passare l'input utente ai metodi della classe Marshal senza convalida. Per le limitazioni rilevanti sull'utilizzo del membro LinkDemand, vedere Demand e LinkDemand.

Nel codice di esempio riportato di seguito viene utilizzato il metodo SecureStringToGlobalAllocAnsi per eseguire il marshalling e la decrittografia del contenuto di un oggetto SecureString in un blocco di memoria non gestita. Viene quindi utilizzato il metodo ZeroFreeGlobalAllocAnsi per azzerare ed eliminare il blocco non gestito.

using System;
using System.Diagnostics;
using System.Runtime.InteropServices;
using System.Security;
using System.Security.Principal;
using System.Text;

namespace SecureStringExample
{

    class MarshalExample
    {


        static void Main(string[] args)
        {
            IntPtr unmanagedRef = IntPtr.Zero;

            try
            {
                // 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);

            }
            catch (Exception e)
            {
                Console.WriteLine(e.Message);
            }
            finally
            {
                if (unmanagedRef != IntPtr.Zero)
                {
                    Console.WriteLine("Zeroing out unmanaged memory...");

                    Marshal.ZeroFreeGlobalAllocAnsi(unmanagedRef);
                }
            }

            Console.WriteLine("Done.");

            Console.ReadLine();


        }

        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;
        }
    }
}

Windows 98, Windows 2000 SP4, Windows Millennium Edition, Windows Server 2003, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP SP2, Windows XP Starter Edition

.NET Framework non supporta tutte le versioni di ciascuna piattaforma. Per un elenco delle versioni supportate, vedere Requisiti di sistema.

.NET Framework

Supportato in: 2.0
Il documento è risultato utile?
(1500 caratteri rimanenti)
Grazie per i commenti inviati.

Aggiunte alla community

AGGIUNGI
Microsoft sta conducendo un sondaggio in linea per comprendere l'opinione degli utenti in merito al sito Web di MSDN. Se si sceglie di partecipare, quando si lascia il sito Web di MSDN verrà visualizzato il sondaggio in linea.

Si desidera partecipare?
Mostra:
© 2014 Microsoft. Tutti i diritti riservati.