Marshal.ZeroFreeCoTaskMemAnsi メソッドとは? わかりやすく解説

Weblio 辞書 > コンピュータ > .NET Framework クラス ライブラリ リファレンス > Marshal.ZeroFreeCoTaskMemAnsi メソッドの意味・解説 

Marshal.ZeroFreeCoTaskMemAnsi メソッド

メモ : このメソッドは、.NET Framework version 2.0 で新しく追加されたものです。

SecureStringToCoTaskMemAnsi メソッドを使用して割り当てられたアンマネージ文字列ポインタを解放します。

名前空間: System.Runtime.InteropServices
アセンブリ: mscorlib (mscorlib.dll 内)
構文構文

Public Shared Sub ZeroFreeCoTaskMemAnsi
 ( _
    s As IntPtr _
)
Dim s As IntPtr

Marshal.ZeroFreeCoTaskMemAnsi(s)
public static void ZeroFreeCoTaskMemAnsi
 (
    IntPtr s
)
public:
static void ZeroFreeCoTaskMemAnsi (
    IntPtr s
)
public static void ZeroFreeCoTaskMemAnsi
 (
    IntPtr s
)
public static function ZeroFreeCoTaskMemAnsi
 (
    s : IntPtr
)

パラメータ

s

解放するアンマネージ文字列のアドレス。

解説解説

ZeroFreeCoTaskMemAnsi メソッドは、SecureStringToCoTaskMemAnsi メソッドを使用して割り当てられたアンマネージ メモリを消去してから解放します。

メモメモ

このメソッドは SecurityAction.LinkDemand を使用して、信頼関係のないコードからの呼び出しを防ぎます。SecurityPermissionAttribute.UnmanagedCode アクセス許可は、直前の呼び出し元にのみ要求されます。信頼性が一部しか確認されていないコードから呼び出すことができるコードの場合、ユーザー入力を検証せずに Marshal クラスに渡すことは避けてください。LinkDemand メンバの使用に関する重要な制約事項については、「Demand と LinkDemand」を参照してください。

使用例使用例

SecureStringToCoTaskMemAnsi メソッドを使用して、SecureString オブジェクトの内容をアンマネージ メモリ ブロックにマーシャリングし、復号化するコード例を次に示します。このコード例では、次に ZeroFreeCoTaskMemAnsi メソッドを使用して、アンマネージ ブロックを消去し破棄します。

Imports System
Imports System.Diagnostics
Imports System.Runtime.InteropServices
Imports System.Security
Imports System.Security.Principal
Imports System.Text




Module MarshalExample



    Sub Main(ByVal args() As
 String)

        Dim unmanagedRef As IntPtr

        Try
            ' 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)


        Catch e As Exception
            Console.WriteLine(e.Message)
        Finally

            If unmanagedRef <> IntPtr.Size Then

                Console.WriteLine("Zeroing out unmanaged memory...")

                Marshal.ZeroFreeCoTaskMemAnsi(unmanagedRef)

            End If

        End Try

        Console.WriteLine("Done.")

        Console.ReadLine()

    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
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.SecureStringToCoTaskMemAnsi(passWord);


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

                    Marshal.ZeroFreeCoTaskMemAnsi(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;
        }
    }
}
.NET Framework のセキュリティ.NET Framework のセキュリティ
プラットフォームプラットフォーム
バージョン情報バージョン情報
参照参照



英和和英テキスト翻訳

英語⇒日本語日本語⇒英語

辞書ショートカット

すべての辞書の索引

「Marshal.ZeroFreeCoTaskMemAnsi メソッド」の関連用語

Marshal.ZeroFreeCoTaskMemAnsi メソッドのお隣キーワード
検索ランキング

   

英語⇒日本語
日本語⇒英語
   



Marshal.ZeroFreeCoTaskMemAnsi メソッドのページの著作権

   
日本マイクロソフト株式会社日本マイクロソフト株式会社
© 2026 Microsoft.All rights reserved.

©2026 GRAS Group, Inc.RSS