/* Copyright (C) 2014 Tal Aloni . All rights reserved. * * You can redistribute this program and/or modify it under the terms of * the GNU Lesser Public License as published by the Free Software Foundation, * either version 3 of the License, or (at your option) any later version. */ using System; using System.Collections.Generic; using System.Text; using DiskAccessLibrary.LogicalDiskManager; using Utilities; namespace DiskAccessLibrary { public partial class VolumeHelper { /// /// Will return or generate a persistent volume unique ID /// [Obsolete] public static Guid? GetVolumeUniqueID(Volume volume) { if (volume is MBRPartition) { MBRPartition partition = (MBRPartition)volume; MasterBootRecord mbr = MasterBootRecord.ReadFromDisk(partition.Disk); byte[] firstSectorBytes = BigEndianConverter.GetBytes(partition.FirstSector); return new Guid((int)mbr.DiskSignature, 0, 0, firstSectorBytes); } else if (volume is GPTPartition) { return ((GPTPartition)volume).VolumeGuid; } else if (volume is DynamicVolume) { return ((DynamicVolume)volume).VolumeGuid; } else { return null; } } [Obsolete] public static Volume GetVolumeByGuid(List disks, Guid volumeGuid) { List volumes = GetVolumes(disks); foreach (Volume volume in volumes) { Guid? guid = GetVolumeUniqueID(volume); if (guid == volumeGuid) { { return volume; } } } return null; } public static List GetVolumes(List disks) { List result = new List(); List dynamicDisks = new List(); // Get partitions: foreach (Disk disk in disks) { if (!DynamicDisk.IsDynamicDisk(disk)) { List partitions = BasicDiskHelper.GetPartitions(disk); foreach (Partition partition in partitions) { result.Add(partition); } } else { dynamicDisks.Add(DynamicDisk.ReadFromDisk(disk)); } } // Get dynamic volumes List dynamicVolumes = DynamicVolumeHelper.GetDynamicVolumes(dynamicDisks); foreach (DynamicVolume volume in dynamicVolumes) { result.Add(volume); } return result; } /// /// Return volumes that are stored (or partially stored) on the given disk /// [Obsolete] public static List GetDiskVolumes(Disk disk) { List result = new List(); DynamicDisk dynamicDisk = DynamicDisk.ReadFromDisk(disk); if (dynamicDisk == null) { // basic disk List partitions = BasicDiskHelper.GetPartitions(disk); foreach (MBRPartition partition in partitions) { result.Add(partition); } } else { // dynamic disk List dynamicVolumes = DynamicVolumeHelper.GetDynamicDiskVolumes(dynamicDisk); foreach (DynamicVolume volume in dynamicVolumes) { result.Add(volume); } } return result; } [Obsolete] public static bool ContainsVolumeGuid(List volumes, Guid volumeGuid) { foreach (Volume volume in volumes) { if (volume is DynamicVolume) { DynamicVolume dynamicVolume = (DynamicVolume)volume; if (dynamicVolume.VolumeGuid == volumeGuid) { return true; } } } return false; } } }