/* Copyright (C) 2014-2016 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; namespace DiskAccessLibrary.LogicalDiskManager { public class DiskOfflineHelper { public static bool IsDiskGroupOnlineAndWritable(Guid diskGroupGuid) { List diskGroup = WindowsDynamicDiskHelper.GetPhysicalDynamicDisks(diskGroupGuid); return IsDiskGroupOnlineAndWritable(diskGroup); } public static bool IsDiskGroupOnlineAndWritable(List diskGroup) { List physicalDisks = new List(); foreach (DynamicDisk dynamicDisk in diskGroup) { if (dynamicDisk.Disk is PhysicalDisk) { physicalDisks.Add((PhysicalDisk)dynamicDisk.Disk); } } foreach (PhysicalDisk disk in physicalDisks) { bool isReadOnly; bool isOnline = disk.GetOnlineStatus(out isReadOnly,out _)?? false; if (!isOnline || isReadOnly) { return false; } } return true; } /// /// Will not persist across reboots /// public static bool OfflineDiskGroup(Guid diskGroupGuid) { List disksToOffline = WindowsDynamicDiskHelper.GetPhysicalDynamicDisks(diskGroupGuid); return OfflineAllOrNone(disksToOffline); } public static void OnlineDiskGroup(Guid diskGroupGuid) { List disksToOnline = WindowsDynamicDiskHelper.GetPhysicalDynamicDisks(diskGroupGuid); OnlineAll(disksToOnline); } /// /// Will not persist across reboots /// public static bool OfflineAllOrNone(List disksToOffline) { List physicalDisks = new List(); foreach (DynamicDisk dynamicDisk in disksToOffline) { if (dynamicDisk.Disk is PhysicalDisk) { physicalDisks.Add((PhysicalDisk)dynamicDisk.Disk); } } return PhysicalDiskHelper.OfflineAllOrNone(physicalDisks); } public static void OnlineAll(List disksToOnline) { foreach (DynamicDisk disk in disksToOnline) { ((PhysicalDisk)disk.Disk).SetOnlineStatus(true); } } } }