Ejemplo n.º 1
0
        private static List <DynamicColumn> GetDynamicVolumeColumns(List <DynamicDisk> disks, VolumeManagerDatabase database, ComponentRecord componentRecord, VolumeRecord volumeRecord)
        {
            // extentRecords are sorted by offset in column
            List <ExtentRecord> extentRecords = database.FindExtentsByComponentID(componentRecord.ComponentId);

            if (componentRecord.NumberOfExtents != extentRecords.Count || extentRecords.Count == 0)
            {
                // database record is invalid
                throw new InvalidDataException("Number of extents in component record does not match actual number of extent records");
            }

            SortedList <uint, List <DynamicDiskExtent> > columns = new SortedList <uint, List <DynamicDiskExtent> >();

            foreach (ExtentRecord extentRecord in extentRecords)
            {
                DiskRecord        diskRecord = database.FindDiskByDiskID(extentRecord.DiskId);
                DynamicDisk       disk       = DynamicDiskHelper.FindDisk(disks, diskRecord.DiskGuid); // we add nulls as well
                DynamicDiskExtent extent     = DynamicDiskExtentHelper.GetDiskExtent(disk, extentRecord);

                if (columns.ContainsKey(extentRecord.ColumnIndex))
                {
                    columns[extentRecord.ColumnIndex].Add(extent);
                }
                else
                {
                    List <DynamicDiskExtent> list = new List <DynamicDiskExtent>();
                    list.Add(extent);
                    columns.Add(extentRecord.ColumnIndex, list);
                }
            }

            List <DynamicColumn> result = new List <DynamicColumn>();

            foreach (List <DynamicDiskExtent> extents in columns.Values)
            {
                result.Add(new DynamicColumn(extents));
            }
            return(result);
        }
Ejemplo n.º 2
0
        /// <summary>
        /// Sorted by first sector
        /// </summary>
        /// <returns>null if there was a problem reading extent information from disk</returns>
        public static List <DynamicDiskExtent> GetDiskExtents(DynamicDisk disk)
        {
            List <DynamicDiskExtent> result        = new List <DynamicDiskExtent>();
            PrivateHeader            privateHeader = disk.PrivateHeader;

            if (privateHeader != null)
            {
                VolumeManagerDatabase database = VolumeManagerDatabase.ReadFromDisk(disk);
                if (database != null)
                {
                    DiskRecord          diskRecord    = database.FindDiskByDiskGuid(privateHeader.DiskGuid);
                    List <ExtentRecord> extentRecords = database.FindExtentsByDiskID(diskRecord.DiskId);
                    foreach (ExtentRecord extentRecord in extentRecords)
                    {
                        DynamicDiskExtent extent = GetDiskExtent(disk, extentRecord);
                        result.Add(extent);
                    }
                    SortExtentsByFirstSector(result);
                    return(result);
                }
            }
            return(null);
        }
Ejemplo n.º 3
0
        private static SimpleVolume GetSimpleVolume(List <DynamicDisk> disks, VolumeManagerDatabase database, ComponentRecord componentRecord, VolumeRecord volumeRecord)
        {
            List <ExtentRecord> extentRecords = database.FindExtentsByComponentID(componentRecord.ComponentId);

            if (extentRecords.Count == 1)
            {
                ExtentRecord extentRecord = extentRecords[0];

                DiskRecord        diskRecord = database.FindDiskByDiskID(extentRecord.DiskId);
                DynamicDisk       disk       = DynamicDiskHelper.FindDisk(disks, diskRecord.DiskGuid); // we add nulls as well
                DynamicDiskExtent extent     = DynamicDiskExtentHelper.GetDiskExtent(disk, extentRecord);

                SimpleVolume volume = new SimpleVolume(extent, volumeRecord.VolumeGuid, database.DiskGroupGuid);
                volume.VolumeID      = volumeRecord.VolumeId;
                volume.Name          = volumeRecord.Name;
                volume.DiskGroupName = database.DiskGroupName;
                return(volume);
            }
            else
            {
                // component / extent records are invalid
                throw new InvalidDataException("Number of extents in component record does not match actual number of extent records");
            }
        }
Ejemplo n.º 4
0
        ListViewItem CreateListViewItemForDisk(DiskRecord dsk)
        {
            ListViewItem lvi = new ListViewItem(dsk.Info.UserFriendlyName);

            if (dsk.Hotplug == null)
            {
                lvi.SubItems.Add("N/A");
                lvi.SubItems.Add("N/A");
                lvi.ImageIndex = 0;
            }
            else
            {
                lvi.SubItems.Add(dsk.Hotplug.DeviceHotplug ? "yes" : "no");
                lvi.SubItems.Add(dsk.Hotplug.MediaRemovable ? "yes" : "no");
                if (!dsk.Hotplug.MediaRemovable)
                {
                    if (dsk.Descriptor != null && dsk.Descriptor.BusType == DiskDevice.STORAGE_BUS_TYPE.BusTypeUsb)
                    {
                        lvi.ImageIndex = 5;
                    }
                    else
                    {
                        lvi.ImageIndex = 0;
                    }
                }
                else
                {
                    if (rgSD.IsMatch(dsk.Info.UserFriendlyName))
                    {
                        lvi.ImageIndex = 2;
                    }
                    else if (rgMS.IsMatch(dsk.Info.UserFriendlyName))
                    {
                        lvi.ImageIndex = 1;
                    }
                    else if (rgSM.IsMatch(dsk.Info.UserFriendlyName))
                    {
                        lvi.ImageIndex = 3;
                    }
                    else if (rgCF.IsMatch(dsk.Info.UserFriendlyName))
                    {
                        lvi.ImageIndex = 4;
                    }
                    else
                    {
                        if (dsk.Descriptor != null && dsk.Descriptor.BusType == DiskDevice.STORAGE_BUS_TYPE.BusTypeUsb)
                        {
                            lvi.ImageIndex = 6;
                        }
                        else
                        {
                            lvi.ImageIndex = 0;
                        }
                    }
                }
            }

            lvi.Tag = dsk;

            if (dsk.VolumeSize > 0)
            {
                lvi.SubItems.Add(StringHelpers.FormatByteCount(dsk.VolumeSize));
            }
            else
            {
                lvi.SubItems.Add("No media");
            }
            return(lvi);
        }
Ejemplo n.º 5
0
        ListViewItem CreateListViewItemForDisk(DiskRecord dsk)
        {
            ListViewItem lvi = new ListViewItem(dsk.Info.UserFriendlyName);
            if (dsk.Hotplug == null)
            {
                lvi.SubItems.Add("N/A");
                lvi.SubItems.Add("N/A");
                lvi.ImageIndex = 0;
            }
            else
            {
                lvi.SubItems.Add(dsk.Hotplug.DeviceHotplug ? "yes" : "no");
                lvi.SubItems.Add(dsk.Hotplug.MediaRemovable ? "yes" : "no");
                if (!dsk.Hotplug.MediaRemovable)
                {
                    if (dsk.Descriptor != null && dsk.Descriptor.BusType == DiskDevice.STORAGE_BUS_TYPE.BusTypeUsb)
                        lvi.ImageIndex = 5;
                    else
                        lvi.ImageIndex = 0;
                }
                else
                {
                    if (rgSD.IsMatch(dsk.Info.UserFriendlyName))
                        lvi.ImageIndex = 2;
                    else if (rgMS.IsMatch(dsk.Info.UserFriendlyName))
                        lvi.ImageIndex = 1;
                    else if (rgSM.IsMatch(dsk.Info.UserFriendlyName))
                        lvi.ImageIndex = 3;
                    else if (rgCF.IsMatch(dsk.Info.UserFriendlyName))
                        lvi.ImageIndex = 4;
                    else
                    {
                        if (dsk.Descriptor != null && dsk.Descriptor.BusType == DiskDevice.STORAGE_BUS_TYPE.BusTypeUsb)
                            lvi.ImageIndex = 6;
                        else
                            lvi.ImageIndex = 0;
                    }
                }
            }

            lvi.Tag = dsk;

            if (dsk.VolumeSize > 0)
                lvi.SubItems.Add(StringHelpers.FormatByteCount(dsk.VolumeSize));
            else
                lvi.SubItems.Add("No media");
            return lvi;
        }
Ejemplo n.º 6
0
 bool ShouldHideDiskItem(DiskRecord dsk)
 {
     if (!chbHideDevices.Checked)
         return false;
     if (dsk.Hotplug != null && !dsk.Hotplug.MediaRemovable)
         return true;
     if (dsk.VolumeSize == 0)
         return true;
     return false;
 }