LockManager.cs 1.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051
  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;
  11. using DiskAccessLibrary.LogicalDiskManager;
  12. namespace DiskAccessLibrary.LogicalDiskManager
  13. {
  14. public class LockManager
  15. {
  16. private static List<DynamicDisk> m_lockedDisks = new List<DynamicDisk>();
  17. private static List<DynamicVolume> m_lockedVolumes = new List<DynamicVolume>();
  18. public static LockStatus LockAllDynamicDisks(bool lockAllDynamicVolumes)
  19. {
  20. List<DynamicDisk> disksToLock = WindowsDynamicDiskHelper.GetPhysicalDynamicDisks();
  21. List<DynamicVolume> volumesToLock = new List<DynamicVolume>();
  22. if (lockAllDynamicVolumes)
  23. {
  24. volumesToLock = WindowsDynamicVolumeHelper.GetLockableDynamicVolumes(disksToLock);
  25. }
  26. LockStatus status = LockHelper.LockAllOrNone(disksToLock, volumesToLock);
  27. if (status == LockStatus.Success)
  28. {
  29. m_lockedDisks.AddRange(disksToLock);
  30. m_lockedVolumes.AddRange(volumesToLock);
  31. }
  32. return status;
  33. }
  34. public static void UnlockAllDisksAndVolumes()
  35. {
  36. DiskLockHelper.ReleaseLock(m_lockedDisks);
  37. foreach (DynamicVolume volumeToUnlock in m_lockedVolumes)
  38. {
  39. WindowsVolumeManager.ReleaseLock(volumeToUnlock.VolumeGuid);
  40. }
  41. m_lockedDisks.Clear();
  42. m_lockedVolumes.Clear();
  43. }
  44. }
  45. }