/* Copyright (C) 2014 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 AreDynamicDisksOnlineAndWriteable() { List disksToLock = WindowsDynamicDiskHelper.GetPhysicalDynamicDisks(); List physicalDisks = new List(); foreach (DynamicDisk dynamicDisk in disksToLock) { if (dynamicDisk.Disk is PhysicalDisk) { physicalDisks.Add((PhysicalDisk)dynamicDisk.Disk); } } foreach (PhysicalDisk disk in physicalDisks) { bool isReadOnly; bool isOnline = disk.GetOnlineStatus(out isReadOnly); if (!isOnline || isReadOnly) { return false; } } return true; } /// /// Will not persist across reboots /// public static bool OfflineAllDynamicDisks() { List disksToLock = WindowsDynamicDiskHelper.GetPhysicalDynamicDisks(); return OfflineAllOrNone(disksToLock); } public static void OnlineAllDynamicDisks() { List disksToOnline = WindowsDynamicDiskHelper.GetPhysicalDynamicDisks(); foreach (DynamicDisk disk in disksToOnline) { ((PhysicalDisk)disk.Disk).SetOnlineStatus(true); } } /// /// Will not persist across reboots /// public static bool OfflineAllOrNone(List disksToLock) { List physicalDisks = new List(); foreach (DynamicDisk dynamicDisk in disksToLock) { if (dynamicDisk.Disk is PhysicalDisk) { physicalDisks.Add((PhysicalDisk)dynamicDisk.Disk); } } return PhysicalDiskHelper.OfflineAllOrNone(physicalDisks); } } }