LockManager.cs 2.1 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556
  1. /* Copyright (C) 2014-2016 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 LockDynamicDiskGroup(Guid diskGroupGuid, bool lockAllDynamicVolumes)
  19. {
  20. List<DynamicDisk> disksToLock = WindowsDynamicDiskHelper.GetPhysicalDynamicDisks(diskGroupGuid);
  21. return LockDynamicDiskGroup(disksToLock, lockAllDynamicVolumes);
  22. }
  23. public static LockStatus LockDynamicDiskGroup(List<DynamicDisk> disksToLock, bool lockAllDynamicVolumes)
  24. {
  25. List<DynamicVolume> volumesToLock = new List<DynamicVolume>();
  26. if (lockAllDynamicVolumes)
  27. {
  28. volumesToLock = WindowsDynamicVolumeHelper.GetLockableDynamicVolumes(disksToLock);
  29. }
  30. LockStatus status = LockHelper.LockAllOrNone(disksToLock, volumesToLock);
  31. if (status == LockStatus.Success)
  32. {
  33. m_lockedDisks.AddRange(disksToLock);
  34. m_lockedVolumes.AddRange(volumesToLock);
  35. }
  36. return status;
  37. }
  38. public static void UnlockAllDisksAndVolumes()
  39. {
  40. DiskLockHelper.ReleaseLock(m_lockedDisks);
  41. foreach (DynamicVolume volumeToUnlock in m_lockedVolumes)
  42. {
  43. WindowsVolumeManager.ReleaseLock(volumeToUnlock.VolumeGuid);
  44. }
  45. m_lockedDisks.Clear();
  46. m_lockedVolumes.Clear();
  47. }
  48. }
  49. }