File: System\IO\Log\CoTaskMemHandle.cs
Project: ndp\cdf\src\NetFx35\System.IO.Log\System.IO.Log.csproj (System.IO.Log)
//------------------------------------------------------------
// Copyright (c) Microsoft Corporation.  All rights reserved.
//------------------------------------------------------------
namespace System.IO.Log
{
    using System;
    using System.Runtime.InteropServices;
    using System.Runtime.ConstrainedExecution;
    using System.Runtime.Versioning;
    using System.Security;
 
    internal sealed class CoTaskMemHandle : SafeHandle
    {
        public CoTaskMemHandle() : base(IntPtr.Zero, true)
        {
        }
 
        public override bool IsInvalid
        {
            get
            {
                return IsClosed || this.handle == IntPtr.Zero;
            }
        }
        
        [DllImport("ole32.dll"),
        SuppressUnmanagedCodeSecurity,
        ReliabilityContract(Consistency.WillNotCorruptState, Cer.Success)]
        [ResourceExposure(ResourceScope.None)]     
        private static extern void CoTaskMemFree(IntPtr ptr);
        override protected bool ReleaseHandle()
        {
            CoTaskMemFree(this.handle);
            return true;
        }
    }    
}