// // Copyright © Nick Lowe 2009 // // Nick Lowe // nick@int-r.net // http://processprivileges.codeplex.com/ namespace ProcessPrivileges { using System; using System.ComponentModel; using System.Runtime.ConstrainedExecution; using System.Runtime.InteropServices; using Microsoft.Win32.SafeHandles; internal sealed class ProcessHandle : SafeHandleZeroOrMinusOneIsInvalid { internal ProcessHandle(IntPtr processHandle, bool ownsHandle) : base(ownsHandle) { handle = processHandle; } [ReliabilityContract(Consistency.WillNotCorruptState, Cer.MayFail)] protected override bool ReleaseHandle() { if (!NativeMethods.CloseHandle(handle)) { throw new Win32Exception(Marshal.GetLastWin32Error()); } return true; } } }