2 // System.Runtime.InteropServices.CriticalHandle
5 // Kazuki Oikawa (kazuki@panicode.com)
10 using System.Runtime.ConstrainedExecution;
11 using System.Runtime.Serialization;
13 namespace System.Runtime.InteropServices
15 public abstract class CriticalHandle : CriticalFinalizerObject, IDisposable
17 protected IntPtr handle;
18 bool _disposed = false;
20 [ReliabilityContract (Consistency.WillNotCorruptState, Cer.MayFail)]
21 protected CriticalHandle (IntPtr invalidHandleValue)
23 handle = invalidHandleValue;
26 [ReliabilityContract (Consistency.WillNotCorruptState, Cer.Success)]
32 [ReliabilityContract (Consistency.WillNotCorruptState, Cer.Success)]
38 [ReliabilityContract (Consistency.WillNotCorruptState, Cer.Success)]
39 public void Dispose ()
44 [ReliabilityContract (Consistency.WillNotCorruptState, Cer.Success)]
45 protected virtual void Dispose (bool disposing)
51 if (!_disposed && !ReleaseHandle ()) {
52 GC.SuppressFinalize (this);
54 // Failed in release...
60 [ReliabilityContract (Consistency.WillNotCorruptState, Cer.Success)]
61 protected abstract bool ReleaseHandle ();
63 [ReliabilityContract (Consistency.WillNotCorruptState, Cer.Success)]
64 protected void SetHandle (IntPtr handle)
69 [ReliabilityContract (Consistency.WillNotCorruptState, Cer.Success)]
70 public void SetHandleAsInvalid()
75 public bool IsClosed {
76 [ReliabilityContract (Consistency.WillNotCorruptState, Cer.Success)]
77 get { return _disposed; }
80 public abstract bool IsInvalid {
81 [ReliabilityContract (Consistency.WillNotCorruptState, Cer.Success)]