File: System\Transactions\Oletx\CoTaskMemHandle.cs
Project: ndp\cdf\src\NetFx20\System.Transactions\System.Transactions.csproj (System.Transactions)
//------------------------------------------------------------
// Copyright (c) Microsoft Corporation.  All rights reserved.
//------------------------------------------------------------
namespace System.Transactions.Oletx
{
    using System;
    using System.Runtime.ConstrainedExecution;
    using System.Runtime.InteropServices;
    using System.Security;
 
    internal sealed class CoTaskMemHandle : SafeHandle
    {
        // FXCop is complaining because we don't have any callers to the constructor.  But they are created by COMInterop when we use them
        // as "out" parameters to calls to the proxy shim interfaces.
        [System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")]
        public CoTaskMemHandle() : base(IntPtr.Zero, true)
        {
        }
 
        public override bool IsInvalid
        {
            get
            {
                return IsClosed || this.handle == IntPtr.Zero;
            }
        }
/*
        [System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")]
        [DllImport("ole32.dll", EntryPoint="CoTaskMemAlloc"),
         SuppressUnmanagedCodeSecurity]
        public static extern CoTaskMemHandle Alloc(IntPtr size);
*/
        [DllImport("ole32.dll"),
         SuppressUnmanagedCodeSecurity,
         ReliabilityContract(Consistency.WillNotCorruptState, Cer.Success)]
        private static extern void CoTaskMemFree(IntPtr ptr);
        
        override protected bool ReleaseHandle()
        {
            CoTaskMemFree(this.handle);
            return true;
        }
 
    }    
}