using System; using System.Runtime.ConstrainedExecution; using System.Security.Permissions; using Microsoft.Win32.SafeHandles; namespace ArchestrAServices.Common; [SecurityPermission(SecurityAction.InheritanceDemand, UnmanagedCode = true)] [SecurityPermission(SecurityAction.Demand, UnmanagedCode = true)] internal class ArchestraSafeHandle : SafeHandleZeroOrMinusOneIsInvalid { internal static ArchestraSafeHandle Empty => new ArchestraSafeHandle(); internal IntPtr Handle { get { return handle; } set { SetHandle(value); } } private ArchestraSafeHandle() : base(ownsHandle: true) { } [ReliabilityContract(Consistency.WillNotCorruptState, Cer.MayFail)] protected override bool ReleaseHandle() { return NativeMethods.CloseHandle(handle); } }