Changeset 1062


Ignore:
Timestamp:
5/16/2009 10:07:16 AM (5 years ago)
Author:
lowjoel
Message:

Use the Marshal to convert Win32 error codes to .NET exceptions - we tend to get more useful exceptions.

Location:
branches/eraser6/Eraser.Util
Files:
4 edited

Legend:

Unmodified
Added
Removed
  • branches/eraser6/Eraser.Util/AdvApi.cs

    r1005 r1062  
    6363                NativeMethods.TOKEN_QUERY, out hToken); 
    6464            if (!result || hToken == IntPtr.Zero) 
    65                 throw new Win32Exception(Marshal.GetLastWin32Error(), 
    66                     "Could not open process token."); 
     65                throw KernelApi.GetExceptionForWin32Error(Marshal.GetLastWin32Error()); 
    6766 
    6867            IntPtr pElevationType = Marshal.AllocHGlobal(Marshal.SizeOf( 
     
    7978                //Check the return code 
    8079                if (!result) 
    81                     throw new Win32Exception(Marshal.GetLastWin32Error(), 
    82                         "Could not retrieve token information."); 
     80                    throw KernelApi.GetExceptionForWin32Error(Marshal.GetLastWin32Error()); 
    8381 
    8482                NativeMethods.TOKEN_ELEVATION_TYPE elevationType = 
  • branches/eraser6/Eraser.Util/KernelApi.cs

    r1049 r1062  
    105105        } 
    106106 
     107        /// <summary> 
     108        /// Converts a Win32 Error code to a HRESULT. 
     109        /// </summary> 
     110        /// <param name="errorCode">The error code to convert.</param> 
     111        /// <returns>A HRESULT value representing the error code.</returns> 
     112        internal static int GetHRForWin32Error(int errorCode) 
     113        { 
     114            const uint FACILITY_WIN32 = 7; 
     115            return errorCode <= 0 ? errorCode : 
     116                (int)((((uint)errorCode) & 0x0000FFFF) | (FACILITY_WIN32 << 16) | 0x80000000); 
     117        } 
     118 
     119        /// <summary> 
     120        /// Gets a Exception for the given Win32 error code. 
     121        /// </summary> 
     122        /// <param name="errorCode">The error code.</param> 
     123        /// <returns>An exception object representing the error code.</returns> 
     124        internal static Exception GetExceptionForWin32Error(int errorCode) 
     125        { 
     126            int HR = GetHRForWin32Error(errorCode); 
     127            return Marshal.GetExceptionForHR(HR); 
     128        } 
     129 
    107130        public static void GetFileTime(SafeFileHandle file, out DateTime creationTime, 
    108131            out DateTime accessedTime, out DateTime modifiedTime) 
     
    118141                out modifiedTimeNative)) 
    119142            { 
    120                 throw new Win32Exception(Marshal.GetLastWin32Error()); 
     143                throw GetExceptionForWin32Error(Marshal.GetLastWin32Error()); 
    121144            } 
    122145 
     
    139162                out accessedTimeNative, out modifiedTimeNative)) 
    140163            { 
    141                 throw new Win32Exception(Marshal.GetLastWin32Error()); 
     164                throw KernelApi.GetExceptionForWin32Error(Marshal.GetLastWin32Error()); 
    142165            } 
    143166 
     
    152175                ref accessedTimeNative, ref modifiedTimeNative)) 
    153176            { 
    154                 throw new Win32Exception(Marshal.GetLastWin32Error()); 
     177                throw KernelApi.GetExceptionForWin32Error(Marshal.GetLastWin32Error()); 
    155178            } 
    156179        } 
  • branches/eraser6/Eraser.Util/StreamInfo.cs

    r1049 r1062  
    137137                        return false; 
    138138 
    139                     throw new Win32Exception(Marshal.GetLastWin32Error()); 
     139                    throw KernelApi.GetExceptionForWin32Error(Marshal.GetLastWin32Error()); 
    140140                } 
    141141            } 
     
    246246            else 
    247247                if (!KernelApi.NativeMethods.DeleteFile(FullName)) 
    248                     throw new Win32Exception(Marshal.GetLastWin32Error()); 
     248                    throw KernelApi.GetExceptionForWin32Error(Marshal.GetLastWin32Error()); 
    249249        } 
    250250 
     
    350350                (uint)share, IntPtr.Zero, (uint)mode, (uint)options, IntPtr.Zero); 
    351351            if (result.IsInvalid) 
    352                 throw new Win32Exception(Marshal.GetLastWin32Error()); 
     352                throw KernelApi.GetExceptionForWin32Error(Marshal.GetLastWin32Error()); 
    353353            return result; 
    354354        } 
  • branches/eraser6/Eraser.Util/VolumeInfo.cs

    r1009 r1062  
    191191            while (mountpointDir != null); 
    192192 
    193             throw new Win32Exception(4390 /*ERROR_NOT_A_REPARSE_POINT*/); 
     193            throw Marshal.GetExceptionForHR(KernelApi.GetHRForWin32Error( 
     194                4390 /*ERROR_NOT_A_REPARSE_POINT*/)); 
    194195        } 
    195196 
Note: See TracChangeset for help on using the changeset viewer.