VolumeHelper.cs 4.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141
  1. /* Copyright (C) 2014 Tal Aloni <tal.aloni.il@gmail.com>. All rights reserved.
  2. *
  3. * You can redistribute this program and/or modify it under the terms of
  4. * the GNU Lesser Public License as published by the Free Software Foundation,
  5. * either version 3 of the License, or (at your option) any later version.
  6. */
  7. using System;
  8. using System.Collections.Generic;
  9. using System.Text;
  10. using DiskAccessLibrary.LogicalDiskManager;
  11. using Utilities;
  12. namespace DiskAccessLibrary
  13. {
  14. public partial class VolumeHelper
  15. {
  16. /// <summary>
  17. /// Will return or generate a persistent volume unique ID
  18. /// </summary>
  19. [Obsolete]
  20. public static Guid? GetVolumeUniqueID(Volume volume)
  21. {
  22. if (volume is MBRPartition)
  23. {
  24. MBRPartition partition = (MBRPartition)volume;
  25. MasterBootRecord mbr = MasterBootRecord.ReadFromDisk(partition.Disk);
  26. byte[] firstSectorBytes = BigEndianConverter.GetBytes(partition.FirstSector);
  27. return new Guid((int)mbr.DiskSignature, 0, 0, firstSectorBytes);
  28. }
  29. else if (volume is GPTPartition)
  30. {
  31. return ((GPTPartition)volume).VolumeGuid;
  32. }
  33. else if (volume is DynamicVolume)
  34. {
  35. return ((DynamicVolume)volume).VolumeGuid;
  36. }
  37. else
  38. {
  39. return null;
  40. }
  41. }
  42. [Obsolete]
  43. public static Volume GetVolumeByGuid(List<Disk> disks, Guid volumeGuid)
  44. {
  45. List<Volume> volumes = GetVolumes(disks);
  46. foreach (Volume volume in volumes)
  47. {
  48. Guid? guid = GetVolumeUniqueID(volume);
  49. if (guid == volumeGuid)
  50. {
  51. {
  52. return volume;
  53. }
  54. }
  55. }
  56. return null;
  57. }
  58. public static List<Volume> GetVolumes(List<Disk> disks)
  59. {
  60. List<Volume> result = new List<Volume>();
  61. List<DynamicDisk> dynamicDisks = new List<DynamicDisk>();
  62. // Get partitions:
  63. foreach (Disk disk in disks)
  64. {
  65. if (!DynamicDisk.IsDynamicDisk(disk))
  66. {
  67. List<Partition> partitions = BasicDiskHelper.GetPartitions(disk);
  68. foreach (Partition partition in partitions)
  69. {
  70. result.Add(partition);
  71. }
  72. }
  73. else
  74. {
  75. dynamicDisks.Add(DynamicDisk.ReadFromDisk(disk));
  76. }
  77. }
  78. // Get dynamic volumes
  79. List<DynamicVolume> dynamicVolumes = DynamicVolumeHelper.GetDynamicVolumes(dynamicDisks);
  80. foreach (DynamicVolume volume in dynamicVolumes)
  81. {
  82. result.Add(volume);
  83. }
  84. return result;
  85. }
  86. /// <summary>
  87. /// Return volumes that are stored (or partially stored) on the given disk
  88. /// </summary>
  89. [Obsolete]
  90. public static List<Volume> GetDiskVolumes(Disk disk)
  91. {
  92. List<Volume> result = new List<Volume>();
  93. DynamicDisk dynamicDisk = DynamicDisk.ReadFromDisk(disk);
  94. if (dynamicDisk == null)
  95. {
  96. // basic disk
  97. List<Partition> partitions = BasicDiskHelper.GetPartitions(disk);
  98. foreach (MBRPartition partition in partitions)
  99. {
  100. result.Add(partition);
  101. }
  102. }
  103. else
  104. {
  105. // dynamic disk
  106. List<DynamicVolume> dynamicVolumes = DynamicVolumeHelper.GetDynamicDiskVolumes(dynamicDisk);
  107. foreach (DynamicVolume volume in dynamicVolumes)
  108. {
  109. result.Add(volume);
  110. }
  111. }
  112. return result;
  113. }
  114. [Obsolete]
  115. public static bool ContainsVolumeGuid(List<Volume> volumes, Guid volumeGuid)
  116. {
  117. foreach (Volume volume in volumes)
  118. {
  119. if (volume is DynamicVolume)
  120. {
  121. DynamicVolume dynamicVolume = (DynamicVolume)volume;
  122. if (dynamicVolume.VolumeGuid == volumeGuid)
  123. {
  124. return true;
  125. }
  126. }
  127. }
  128. return false;
  129. }
  130. }
  131. }