internal static GenericSafeHandle GetReadHandle(IntPtr handle, ReleaseHandleCallback releaseCallback) { IntPtr readHandle = NativeMethods.DuplicateHandle(handle, (int)StandardRights.ReadPermissions); if (readHandle == IntPtr.Zero) { int err = Marshal.GetLastWin32Error(); switch (err) { case NativeConstants.ERROR_ACCESS_DENIED: throw new UnauthorizedAccessException(); default: throw new System.ComponentModel.Win32Exception(err); } } return(new GenericSafeHandle(readHandle, releaseCallback)); }
public GenericSafeHandle(IntPtr handle, ReleaseHandleCallback releaseCallback) : base(IntPtr.Zero, true) { base.handle = handle; m_ReleaseCallback = releaseCallback; }
internal static GenericSafeHandle GetReadHandle(IntPtr handle, ReleaseHandleCallback releaseCallback) { IntPtr readHandle = NativeMethods.DuplicateHandle(handle, (int)StandardRights.ReadPermissions); if (readHandle == IntPtr.Zero) { int err = Marshal.GetLastWin32Error(); switch (err) { case NativeConstants.ERROR_ACCESS_DENIED: throw new UnauthorizedAccessException(); default: throw new System.ComponentModel.Win32Exception(err); } } return new GenericSafeHandle(readHandle, releaseCallback); }