private void EmptyHardDisk(Session vmSession) { IProgress progress; IStorageController controller = null; uint inst; IMedium rosHdd = null; int dev = 0, port; Boolean HddFound = false; /* Go through storage controllers to find IDE/SATA one */ for (inst = 0; inst < 4; inst++) { try { controller = rosVM.GetStorageControllerByInstance(inst); if (controller.Bus == StorageBus.StorageBus_IDE || controller.Bus == StorageBus.StorageBus_SATA) { break; } } catch (Exception exc) { /* Just skip it */ } } /* Now check what HDD we have connected to this controller */ for (port = 0; port < controller.MaxPortCount; port++) { for (dev = 0; dev < controller.MaxDevicesPerPortCount; dev++) { try { rosHdd = rosVM.GetMedium(controller.Name, port, dev); if (rosHdd.DeviceType == DeviceType.DeviceType_HardDisk) { /* We found the one and only harddisk */ HddFound = true; break; } rosHdd.Close(); } catch (Exception exc) { /* Just skip it */ } } if (HddFound) { break; } } /* Delete the existing hdd */ if (HddFound) { try { controller = rosVM.GetStorageControllerByInstance(inst); vmSession.Machine.DetachDevice(controller.Name, port, dev); vmSession.Machine.SaveSettings(); progress = rosHdd.DeleteStorage(); progress.WaitForCompletion(-1); rosHdd.Close(); } catch (Exception exc) { Console.WriteLine("Could not delete existing HDD:" + exc); } } else { /* Connect to port 0, device 0 if there was no hdd found */ port = 0; dev = 0; } /* Create a new one */ CreateHardDisk(vmSession, controller, port, dev); }