Ignore:
Timestamp:
6/18/2010 11:33:59 AM (4 years ago)
Author:
lowjoel
Message:

Allow us to query the size of non-ready partitions and disks (for more informative UIs)

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/eraser/Eraser.Util/VolumeInfo.cs

    r2185 r2187  
    463463            get 
    464464            { 
    465                 if (!IsReady) 
    466                     throw new InvalidOperationException("The volume has not been mounted or is not " + 
    467                         "currently ready."); 
    468  
    469465                ulong result, dummy; 
    470466                if (NativeMethods.GetDiskFreeSpaceEx(VolumeId, out dummy, out result, out dummy)) 
     
    473469                } 
    474470 
     471                //Try the alternative method 
     472                using (SafeFileHandle handle = OpenHandle(NativeMethods.GENERIC_READ, 
     473                    FileShare.ReadWrite, FileOptions.None)) 
     474                { 
     475                    if (handle.IsInvalid) 
     476                        throw Win32ErrorCode.GetExceptionForWin32Error(Marshal.GetLastWin32Error()); 
     477 
     478                    long result2; 
     479                    uint returned = 0; 
     480                    if (NativeMethods.DeviceIoControl(handle, 
     481                        NativeMethods.IOCTL_DISK_GET_LENGTH_INFO, IntPtr.Zero, 0, out result2, 
     482                        out returned, IntPtr.Zero)) 
     483                    { 
     484                        return result2; 
     485                    } 
     486                } 
     487 
     488                //Otherwise, throw 
    475489                throw Win32ErrorCode.GetExceptionForWin32Error(Marshal.GetLastWin32Error()); 
    476490            } 
Note: See TracChangeset for help on using the changeset viewer.