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); }
/// <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); }
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"); } }
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); }
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; }
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; }