Marshal.ZeroFreeCoTaskMemAnsi(IntPtr) 方法     
定义
重要
一些信息与预发行产品相关,相应产品在发行之前可能会进行重大修改。 对于此处提供的信息,Microsoft 不作任何明示或暗示的担保。
释放非托管字符串指针,该指针是使用 SecureStringToCoTaskMemAnsi(SecureString) 方法分配的。
public:
 static void ZeroFreeCoTaskMemAnsi(IntPtr s);[System.Security.SecurityCritical]
public static void ZeroFreeCoTaskMemAnsi(IntPtr s);public static void ZeroFreeCoTaskMemAnsi(IntPtr s);[<System.Security.SecurityCritical>]
static member ZeroFreeCoTaskMemAnsi : nativeint -> unitstatic member ZeroFreeCoTaskMemAnsi : nativeint -> unitPublic Shared Sub ZeroFreeCoTaskMemAnsi (s As IntPtr)参数
- s
- 
				
				IntPtr
nativeint 
要释放的非托管字符串的地址。
- 属性
示例
以下示例使用 SecureStringToCoTaskMemAnsi 方法将 对象的内容 SecureString 封送和解密到非托管内存块。 然后, ZeroFreeCoTaskMemAnsi 它使用 方法将非托管块归零并释放。
using System;
using System.Runtime.InteropServices;
using System.Security;
class MarshalExample
{
     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.SecureStringToCoTaskMemAnsi(passWord);
          if (unmanagedRef != IntPtr.Zero)
          {
              Console.WriteLine("Zeroing out unmanaged memory...");
              Marshal.ZeroFreeCoTaskMemAnsi(unmanagedRef);
          }
          passWord.Dispose();
         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;
     }
}
Imports System.Runtime.InteropServices
Imports System.Security
Module Example
    Sub Main()
        Dim unmanagedRef As IntPtr
         ' Ask the user for a password.
         Console.Write("Please enter your password: ")
         Dim passWord As SecureString = GetPassword()
         Console.WriteLine("Copying and decrypting the string to unmanaged memory...")
         ' Copy the Secure string to unmanaged memory (and decrypt it).
         unmanagedRef = Marshal.SecureStringToCoTaskMemAnsi(passWord)
         If unmanagedRef <> IntPtr.Size Then
             Console.WriteLine("Zeroing out unmanaged memory...")
             Marshal.ZeroFreeCoTaskMemAnsi(unmanagedRef)
         End If
         passWord.Dispose()
        Console.WriteLine("Done.")
    End Sub
    Function GetPassword() As SecureString
        Dim password As New SecureString()
        ' get the first character of the password
        Dim nextKey As ConsoleKeyInfo = Console.ReadKey(True)
        While nextKey.Key <> ConsoleKey.Enter
            If nextKey.Key = ConsoleKey.BackSpace Then
                If password.Length > 0 Then
                    password.RemoveAt(password.Length - 1)
                    ' erase the last * as well
                    Console.Write(nextKey.KeyChar)
                    Console.Write(" ")
                    Console.Write(nextKey.KeyChar)
                End If
            Else
                password.AppendChar(nextKey.KeyChar)
                Console.Write("*")
            End If
            nextKey = Console.ReadKey(True)
        End While
        Console.WriteLine()
        ' lock the password down
        password.MakeReadOnly()
        Return password
    End Function
End Module
注解
方法 ZeroFreeCoTaskMemAnsi 首先将归零,然后释放使用 SecureStringToCoTaskMemAnsi 方法分配的非托管内存。