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));
        }
Exemple #2
0
 public GenericSafeHandle(IntPtr handle, ReleaseHandleCallback releaseCallback)
     : base(IntPtr.Zero, true)
 {
     base.handle       = handle;
     m_ReleaseCallback = 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);
 }