DiskOfflineHelper.cs 2.5 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273
  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. namespace DiskAccessLibrary.LogicalDiskManager
  11. {
  12. public class DiskOfflineHelper
  13. {
  14. public static bool AreDynamicDisksOnlineAndWriteable()
  15. {
  16. List<DynamicDisk> disksToLock = WindowsDynamicDiskHelper.GetPhysicalDynamicDisks();
  17. List<PhysicalDisk> physicalDisks = new List<PhysicalDisk>();
  18. foreach (DynamicDisk dynamicDisk in disksToLock)
  19. {
  20. if (dynamicDisk.Disk is PhysicalDisk)
  21. {
  22. physicalDisks.Add((PhysicalDisk)dynamicDisk.Disk);
  23. }
  24. }
  25. foreach (PhysicalDisk disk in physicalDisks)
  26. {
  27. bool isReadOnly;
  28. bool isOnline = disk.GetOnlineStatus(out isReadOnly);
  29. if (!isOnline || isReadOnly)
  30. {
  31. return false;
  32. }
  33. }
  34. return true;
  35. }
  36. /// <summary>
  37. /// Will not persist across reboots
  38. /// </summary>
  39. public static bool OfflineAllDynamicDisks()
  40. {
  41. List<DynamicDisk> disksToLock = WindowsDynamicDiskHelper.GetPhysicalDynamicDisks();
  42. return OfflineAllOrNone(disksToLock);
  43. }
  44. public static void OnlineAllDynamicDisks()
  45. {
  46. List<DynamicDisk> disksToOnline = WindowsDynamicDiskHelper.GetPhysicalDynamicDisks();
  47. foreach (DynamicDisk disk in disksToOnline)
  48. {
  49. ((PhysicalDisk)disk.Disk).SetOnlineStatus(true);
  50. }
  51. }
  52. /// <summary>
  53. /// Will not persist across reboots
  54. /// </summary>
  55. public static bool OfflineAllOrNone(List<DynamicDisk> disksToLock)
  56. {
  57. List<PhysicalDisk> physicalDisks = new List<PhysicalDisk>();
  58. foreach (DynamicDisk dynamicDisk in disksToLock)
  59. {
  60. if (dynamicDisk.Disk is PhysicalDisk)
  61. {
  62. physicalDisks.Add((PhysicalDisk)dynamicDisk.Disk);
  63. }
  64. }
  65. return PhysicalDiskHelper.OfflineAllOrNone(physicalDisks);
  66. }
  67. }
  68. }