Changeset 461


Ignore:
Timestamp:
11/6/2008 10:16:32 AM (5 years ago)
Author:
lowjoel
Message:

Cherry picked changes from r436-447. Most changes have been rejected (except a few which were valid).

I'm saving the ERROR enum for future versions when we DO have many error codes. Currently just comment them with /*ERROR_WHATEVER_MESSAGE*/, next time, just regex search (/\*ERROR_)

Location:
branches/eraser6/Util
Files:
4 edited

Legend:

Unmodified
Added
Removed
  • branches/eraser6/Util/File.cs

    r447 r461  
    125125                SHGetFileInfoFlags.SHGFI_SMALLICON | SHGetFileInfoFlags.SHGFI_ICON); 
    126126 
    127             /**  Possible Errors: 
    128              * INVALID_ACCESS 
    129              * NOT_ENOUGH_MEMORY 
    130              * NO_TOKEN */ 
    131             if (shfi.hIcon != new IntPtr(0)) 
     127            if (shfi.hIcon != IntPtr.Zero) 
    132128                return Icon.FromHandle(shfi.hIcon); 
    133129            else 
    134             { 
    135                 int lastError = Marshal.GetLastWin32Error(); 
    136                 throw new Win32Exception(lastError, 
    137                     string.Format("Icon load failed\n\tpath: \"{0}\"\n\terrno: \"{1}\"", path, lastError)); 
    138             } 
     130                throw new Win32Exception(Marshal.GetLastWin32Error(), 
     131                    string.Format("Could not load file icon from {0}", path)); 
    139132        } 
    140133 
     
    212205                } 
    213206            } 
     207 
    214208            throw new Win32Exception("Unknown DeviceIoControl error."); 
    215209        } 
     
    286280        private static extern IntPtr SHGetFileInfo(string path, uint fileAttributes, 
    287281            ref SHFILEINFO psfi, int fileInfo, SHGetFileInfoFlags flags); 
    288      
     282 
    289283        enum SHGetFileInfoFlags 
    290284        { 
  • branches/eraser6/Util/KernelAPI.cs

    r447 r461  
    44 * Original Author: Joel Low <lowjoel@users.sourceforge.net> 
    55 * Modified By: Garrett Trant <gtrant@users.sourceforge.net> 
    6  *              Kasra Nasiri <cjax@users.sourceforge.net> @10/7/2008 
    76 *  
    87 * This file is part of Eraser. 
     
    2928namespace Eraser.Util 
    3029{ 
    31     /// <summary> 
    32     /// Win32 Error codes : Marshal.GetLastWin32Error() 
    33     /// </summary> 
    34     public enum ERROR : int 
    35     { 
    36         FILE_NOT_FOUND = 0x2, 
    37         ACCESS_DENIED = 0x5, 
    38         NOT_ENOUGH_MEMORY = 0x8, 
    39         INVALID_ACCESS = 0xC, 
    40         INVALID_DRIVE = 0xF, 
    41         NO_MORE_FILES = 0x12, 
    42         NOT_READY = 0x15, 
    43         MORE_DATA = 0xEA, 
    44         UNRECOGNIZED_VOLUME = 0x3ED, 
    45         NO_TOKEN = 0x3F0, 
    46         NOT_A_REPARSE_POINT = 0x1126, 
    47     }; 
    48  
    4930    public static class KernelAPI 
    5031    { 
     
    340321                throw new NotImplementedException(); 
    341322            } 
    342         }    
     323        } 
    343324 
    344325        /// <summary> 
     
    633614            public IntPtr hStdError; 
    634615 
    635  
    636616            public override int GetHashCode() 
    637617            { 
     
    654634            } 
    655635        } 
    656  
    657636    } 
    658637} 
  • branches/eraser6/Util/UserAPI.cs

    r447 r461  
    2424using System.Text; 
    2525using System.Runtime.InteropServices; 
    26 using System.Drawing; 
    2726 
    2827namespace Eraser.Util 
     
    168167        } 
    169168    } 
    170  
    171     /// <summary> 
    172     /// Summary description for ShellIcon.  Get a small or large Icon with an easy C# function call 
    173     /// that returns a 32x32 or 16x16 System.Drawing.Icon depending on which function you call 
    174     /// either GetSmallIcon(string fileName) or GetLargeIcon(string fileName) 
    175     /// </summary> 
    176     ///  /// <summary> Summary description for ExtractIcon.</summary> 
    177     public class ShellIcon 
    178     { 
    179         [DllImport("shell32.dll", CharSet = CharSet.Auto)] 
    180         private static extern int SHGetFileInfo( 
    181           string pszPath, 
    182           int dwFileAttributes, 
    183           out       SHFILEINFO psfi, 
    184           uint cbfileInfo, 
    185           SHGFI uFlags); 
    186  
    187         /// <summary>Maximal Length of unmanaged Windows-Path-strings</summary> 
    188         private const int MAX_PATH = 260; 
    189         /// <summary>Maximal Length of unmanaged Typename</summary> 
    190         private const int MAX_TYPE = 80; 
    191  
    192         [StructLayout(LayoutKind.Sequential, CharSet = CharSet.Auto)] 
    193         private struct SHFILEINFO 
    194         { 
    195             public SHFILEINFO(bool b) 
    196             { 
    197                 hIcon = IntPtr.Zero; 
    198                 iIcon = 0; 
    199                 dwAttributes = 0; 
    200                 szDisplayName = ""; 
    201                 szTypeName = ""; 
    202             } 
    203  
    204             public IntPtr hIcon; 
    205             public int iIcon; 
    206             public uint dwAttributes; 
    207             [MarshalAs(UnmanagedType.ByValTStr, SizeConst = MAX_PATH)] 
    208             public string szDisplayName; 
    209             [MarshalAs(UnmanagedType.ByValTStr, SizeConst = MAX_TYPE)] 
    210             public string szTypeName; 
    211         }; 
    212  
    213         private ShellIcon() 
    214         { 
    215         } 
    216  
    217         [Flags] 
    218         enum SHGFI : int 
    219         { 
    220             /// <summary>get icon</summary> 
    221             Icon = 0x000000100, 
    222             /// <summary>get display name</summary> 
    223             DisplayName = 0x000000200, 
    224             /// <summary>get type name</summary> 
    225             TypeName = 0x000000400, 
    226             /// <summary>get attributes</summary> 
    227             Attributes = 0x000000800, 
    228             /// <summary>get icon location</summary> 
    229             IconLocation = 0x000001000, 
    230             /// <summary>return exe type</summary> 
    231             ExeType = 0x000002000, 
    232             /// <summary>get system icon index</summary> 
    233             SysIconIndex = 0x000004000, 
    234             /// <summary>put a link overlay on icon</summary> 
    235             LinkOverlay = 0x000008000, 
    236             /// <summary>show icon in selected state</summary> 
    237             Selected = 0x000010000, 
    238             /// <summary>get only specified attributes</summary> 
    239             Attr_Specified = 0x000020000, 
    240             /// <summary>get large icon</summary> 
    241             LargeIcon = 0x000000000, 
    242             /// <summary>get small icon</summary> 
    243             SmallIcon = 0x000000001, 
    244             /// <summary>get open icon</summary> 
    245             OpenIcon = 0x000000002, 
    246             /// <summary>get shell size icon</summary> 
    247             ShellIconSize = 0x000000004, 
    248             /// <summary>pszPath is a pidl</summary> 
    249             PIDL = 0x000000008, 
    250             /// <summary>use passed dwFileAttribute</summary> 
    251             UseFileAttributes = 0x000000010, 
    252             /// <summary>apply the appropriate overlays</summary> 
    253             AddOverlays = 0x000000020, 
    254             /// <summary>Get the index of the overlay in the upper 8 bits of the iIcon</summary> 
    255             OverlayIndex = 0x000000040, 
    256         } 
    257  
    258         /// <summary> 
    259         /// Get the associated Icon for a file or application, this method always returns 
    260         /// an icon.  If the strPath is invalid or there is no idonc the default icon is returned 
    261         /// </summary> 
    262         /// <param name="strPath">full path to the file</param> 
    263         /// <param name="bSmall">the 16x16 icon is returned</param> 
    264         /// <returns></returns> 
    265         public static System.Drawing.Icon GetIcon(string strPath) 
    266         { 
    267             return GetIcon(strPath, true); 
    268         } 
    269  
    270         /// <summary> 
    271         /// Get the associated Icon for a file or application, this method always returns 
    272         /// an icon.  If the strPath is invalid or there is no idonc the default icon is returned 
    273         /// </summary> 
    274         /// <param name="strPath">full path to the file</param> 
    275         /// <param name="bSmall">if true, the 16x16 icon is returned otherwise the 32x32</param> 
    276         /// <returns></returns> 
    277         public static System.Drawing.Icon GetIcon(string strPath, bool bSmall) 
    278         { 
    279             SHFILEINFO info = new SHFILEINFO(true); 
    280             int cbFileInfo = Marshal.SizeOf(info); 
    281             SHGFI flags; 
    282             if (bSmall) 
    283                 flags = SHGFI.Icon | SHGFI.SmallIcon | SHGFI.UseFileAttributes; 
    284             else 
    285                 flags = SHGFI.Icon | SHGFI.LargeIcon | SHGFI.UseFileAttributes; 
    286  
    287             SHGetFileInfo(strPath, 0, out info, (uint)cbFileInfo, flags); 
    288             if(info.hIcon == new IntPtr(0))  
    289                 SHGetFileInfo(strPath, (int)SHGFI.Icon, out info, (uint)cbFileInfo, flags); 
    290             return System.Drawing.Icon.FromHandle(info.hIcon); 
    291         } 
    292     } 
    293169} 
  • branches/eraser6/Util/VolumeInfo.cs

    r446 r461  
    33 * Copyright 2008 The Eraser Project 
    44 * Original Author: Joel Low <lowjoel@users.sourceforge.net> 
    5  * Modified By: Kasra Nasiri <cjax@users.sourceforge.net> @10/7/2008 
     5 * Modified By: 
    66 *  
    77 * This file is part of Eraser. 
     
    5353                    out returnLength)) 
    5454                { 
    55                     if (Marshal.GetLastWin32Error() == (int)ERROR.MORE_DATA) 
     55                    if (Marshal.GetLastWin32Error() == 234/*ERROR_MORE_DATA*/) 
    5656                    { 
    5757                        currentBufferSize *= 2; 
     
    7575            //GetVolumePathNamesForVolumeName function returns a convoluted structure 
    7676            //containing the path names. 
    77  
    78  
    79             /* for virtual devices pathNames == "\0", 
    80              * which causes unexpected exceptions being thrown 
    81              * simply avoid them, by throwing an expected exception */ 
    82             if (pathNames == "\0" && pathNames.Length <= 0) 
    83                 throw new Win32Exception("Eraser.Util.Volume.Volume"); 
    84  
    8577            for (int lastIndex = 0, i = 0; i != pathNames.Length; ++i) 
    8678            { 
     
    8981                    mountPoints.Add(pathNames.Substring(lastIndex, i - lastIndex)); 
    9082 
     83                    lastIndex = i + 1; 
    9184                    if (pathNames[lastIndex] == '\0') 
    9285                        break; 
     
    9790            StringBuilder volumeName = new StringBuilder(MaxPath * sizeof(char)), 
    9891                   fileSystemName = new StringBuilder(MaxPath * sizeof(char)); 
    99  
    10092            uint serialNumber, maxComponentLength, filesystemFlags; 
    101  
    10293            if (!GetVolumeInformation(volumeID, volumeName, MaxPath, out serialNumber, 
    10394                out maxComponentLength, out filesystemFlags, fileSystemName, MaxPath)) 
    10495            { 
    105                 //ERROR.NOT_READY 
    106                 //ERROR.UNRECOGNIZED_VOLUME 
    107                 //ERROR.INVALID_DRIVE 
    108                 int lastError = Marshal.GetLastWin32Error(); 
    109                 throw new Win32Exception(lastError, "Eraser.Util.Volume.Volume"); 
     96                if (Marshal.GetLastWin32Error() != 21 /*ERROR_NOT_READY*/) 
     97                    throw new Win32Exception(Marshal.GetLastWin32Error(), "Eraser.Util.Volume.Volume"); 
    11098            } 
    11199            else 
     
    131119            //Iterate over the volume mountpoints 
    132120            do 
    133             { 
    134                 VolumeInfo info; // keep out of the stack frame 
    135                 try 
    136                 { 
    137                     info = new VolumeInfo(nextVolume.ToString()); 
    138                     result.Add(info); 
    139                 } 
    140                 catch (Win32Exception ex0) 
    141                 { 
    142                     // VolumeInfo was not constructed wel, Ignore. 
    143                     if (ex0.Message != "Eraser.Util.Volume.Volume") 
    144                         throw ex0; 
    145                 } 
    146             } 
     121                result.Add(new VolumeInfo(nextVolume.ToString())); 
    147122            while (FindNextVolume(handle, nextVolume, LongPath)); 
    148123 
    149124            //Close the handle 
    150             if (Marshal.GetLastWin32Error() == (int)ERROR.NO_MORE_FILES ) 
     125            if (Marshal.GetLastWin32Error() == 18 /*ERROR_NO_MORE_FILES*/) 
    151126                FindVolumeClose(handle); 
    152127             
     
    172147                if (GetVolumeNameForVolumeMountPoint(currentDir, volumeID, 50)) 
    173148                    return new VolumeInfo(volumeID.ToString()); 
    174                 else if (Marshal.GetLastWin32Error() != (int)ERROR.NOT_A_REPARSE_POINT) 
     149                else if (Marshal.GetLastWin32Error() != 4390 /*ERROR_NOT_A_REPARSE_POINT*/) 
    175150                    throw new Win32Exception(Marshal.GetLastWin32Error()); 
    176151                mountpointDir = mountpointDir.Parent; 
     
    178153            while (mountpointDir != null); 
    179154 
    180             throw new Win32Exception((int)ERROR.NOT_A_REPARSE_POINT); 
     155            throw new Win32Exception(4390 /*ERROR_NOT_A_REPARSE_POINT*/); 
    181156        } 
    182157 
     
    335310 
    336311                //Close the handle 
    337                 if (Marshal.GetLastWin32Error() == (int)ERROR.NO_MORE_FILES) 
     312                if (Marshal.GetLastWin32Error() == 18 /*ERROR_NO_MORE_FILES*/) 
    338313                    FindVolumeMountPointClose(handle); 
    339314 
Note: See TracChangeset for help on using the changeset viewer.