File: System\ServiceModel\Diagnostics\Utility.cs
Project: ndp\cdf\src\WCF\SMDiagnostics\SMDiagnostics.csproj (SMDiagnostics)
//------------------------------------------------------------
// Copyright (c) Microsoft Corporation.  All rights reserved.
//------------------------------------------------------------
 
namespace System.ServiceModel.Diagnostics
{
    using System.Runtime;
    using System.Runtime.CompilerServices;
    using System.Runtime.ConstrainedExecution;
    using System.Diagnostics;
    using System.Threading;
    using System.Runtime.InteropServices;
    using System.Security;
    using System.Security.Permissions;
    using System.Diagnostics.CodeAnalysis;
 
    class Utility
    {
        ExceptionUtility exceptionUtility;
 
        [Obsolete("For SMDiagnostics.dll use only. Call DiagnosticUtility.Utility instead")]
        internal Utility(ExceptionUtility exceptionUtility)
        {
            this.exceptionUtility = exceptionUtility;
        }
 
        // Call this when a p/invoke with an 'out SafeHandle' parameter returns an error.  This will safely clean up the handle.
        [SuppressMessage(FxCop.Category.Security, FxCop.Rule.TransparentMethodsMustNotReferenceCriticalCode)] // we got APTCA approval with no requirement to fix this transparency warning
        internal static void CloseInvalidOutSafeHandle(SafeHandle handle)
        {
            // Workaround for 64-bit CLR bug VSWhidbey 546830 - sometimes invalid SafeHandles come back null.
            if (handle != null)
            {
#pragma warning disable 618
                Fx.Assert(handle.IsInvalid, "CloseInvalidOutSafeHandle called with a valid handle!");
#pragma warning restore 618
 
                // Calls SuppressFinalize.
                handle.SetHandleAsInvalid();
            }
        }
 
        // Copy of the above for CriticalHandles.
        [SuppressMessage(FxCop.Category.Security, FxCop.Rule.TransparentMethodsMustNotReferenceCriticalCode)] // we got APTCA approval with no requirement to fix this transparency warning. plus, the callers of this method are not supported in partial trust.
        internal static void CloseInvalidOutCriticalHandle(CriticalHandle handle)
        {
            if (handle != null)
            {
#pragma warning disable 618
                Fx.Assert(handle.IsInvalid, "CloseInvalidOutCriticalHandle called with a valid handle!");
#pragma warning restore 618
 
                handle.SetHandleAsInvalid();
            }
        }
 
        internal Guid CreateGuid(string guidString)
        {
            return Fx.CreateGuid(guidString);
        }
 
        internal bool TryCreateGuid(string guidString, out Guid result)
        {
            return Fx.TryCreateGuid(guidString, out result);
        }
 
        internal byte[] AllocateByteArray(int size)
        {
            return Fx.AllocateByteArray(size);
        }
 
        internal char[] AllocateCharArray(int size)
        {
            return Fx.AllocateCharArray(size);
        }
    }
}