78 lines
2.8 KiB
C#
78 lines
2.8 KiB
C#
|
//------------------------------------------------------------
|
||
|
// 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);
|
||
|
}
|
||
|
}
|
||
|
}
|