VBoxManageModifyVM.cpp revision 4090390866c02d5d0ad061151cdb298b9a173e86
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync/* $Id$ */
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync/** @file
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync * VBoxManage - Implementation of modifyvm command.
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync */
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync
c7814cf6e1240a519cbec0441e033d0e2470ed00vboxsync/*
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync * Copyright (C) 2006-2009 Sun Microsystems, Inc.
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync *
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync * This file is part of VirtualBox Open Source Edition (OSE), as
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync * available from http://www.virtualbox.org. This file is free software;
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync * you can redistribute it and/or modify it under the terms of the GNU
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync * General Public License (GPL) as published by the Free Software
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync * Foundation, in version 2 as it comes in the "COPYING" file of the
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync * VirtualBox OSE distribution. VirtualBox OSE is distributed in the
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync * hope that it will be useful, but WITHOUT ANY WARRANTY of any kind.
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync *
2fa05a4e777b070ba9bf01e3dd46434c99cd06a3vboxsync * Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync * Clara, CA 95054 USA or visit http://www.sun.com if you need
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync * additional information or have any questions.
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync */
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync/*******************************************************************************
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync* Header Files *
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync*******************************************************************************/
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync#ifndef VBOX_ONLY_DOCS
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync#include <VBox/com/com.h>
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync#include <VBox/com/array.h>
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync#include <VBox/com/ErrorInfo.h>
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync#include <VBox/com/errorprint.h>
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync#include <VBox/com/EventQueue.h>
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync#include <VBox/com/VirtualBox.h>
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync#include <vector>
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync#include <list>
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync#endif /* !VBOX_ONLY_DOCS */
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync#include <iprt/cidr.h>
3581dfd579fa647c95528b7f7d24740111a36903vboxsync#include <iprt/param.h>
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync#include <iprt/path.h>
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync#include <iprt/stream.h>
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync#include <iprt/string.h>
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync#include <iprt/getopt.h>
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync#include <VBox/log.h>
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync#include "VBoxManage.h"
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync#ifndef VBOX_ONLY_DOCS
3331475701a5b12f98b3cfea07d5dca60072530fvboxsyncusing namespace com;
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync
3581dfd579fa647c95528b7f7d24740111a36903vboxsync
3581dfd579fa647c95528b7f7d24740111a36903vboxsync/** @todo refine this after HDD changes; MSC 8.0/64 has trouble with handleModifyVM. */
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync#if defined(_MSC_VER)
3581dfd579fa647c95528b7f7d24740111a36903vboxsync# pragma optimize("g", off)
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync#endif
3581dfd579fa647c95528b7f7d24740111a36903vboxsync
3331475701a5b12f98b3cfea07d5dca60072530fvboxsyncenum
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync{
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync MODIFYVM_NAME = 1000,
d97357e2036109245c83ba553d0290212e28ea40vboxsync MODIFYVM_OSTYPE,
d97357e2036109245c83ba553d0290212e28ea40vboxsync MODIFYVM_MEMORY,
d97357e2036109245c83ba553d0290212e28ea40vboxsync MODIFYVM_VRAM,
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync MODIFYVM_FIRMWARE,
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync MODIFYVM_ACPI,
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync MODIFYVM_IOAPIC,
d97357e2036109245c83ba553d0290212e28ea40vboxsync MODIFYVM_PAE,
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync MODIFYVM_SYNTHCPU,
3581dfd579fa647c95528b7f7d24740111a36903vboxsync MODIFYVM_HWVIRTEX,
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync MODIFYVM_HWVIRTEXEXCLUSIVE,
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync MODIFYVM_NESTEDPAGING,
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync MODIFYVM_LARGEPAGES,
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync MODIFYVM_VTXVPID,
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync MODIFYVM_CPUS,
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync MODIFYVM_CPUHOTPLUG,
3581dfd579fa647c95528b7f7d24740111a36903vboxsync MODIFYVM_PLUGCPU,
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync MODIFYVM_UNPLUGCPU,
d97357e2036109245c83ba553d0290212e28ea40vboxsync MODIFYVM_SETCPUID,
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync MODIFYVM_DELCPUID,
3581dfd579fa647c95528b7f7d24740111a36903vboxsync MODIFYVM_DELALLCPUID,
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync MODIFYVM_MONITORCOUNT,
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync MODIFYVM_ACCELERATE3D,
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync#ifdef VBOX_WITH_VIDEOHWACCEL
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync MODIFYVM_ACCELERATE2DVIDEO,
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync#endif
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync MODIFYVM_BIOSLOGOFADEIN,
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync MODIFYVM_BIOSLOGOFADEOUT,
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync MODIFYVM_BIOSLOGODISPLAYTIME,
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync MODIFYVM_BIOSLOGOIMAGEPATH,
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync MODIFYVM_BIOSBOOTMENU,
d97357e2036109245c83ba553d0290212e28ea40vboxsync MODIFYVM_BIOSSYSTEMTIMEOFFSET,
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync MODIFYVM_BIOSPXEDEBUG,
3581dfd579fa647c95528b7f7d24740111a36903vboxsync MODIFYVM_BOOT,
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync MODIFYVM_HDA, // deprecated
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync MODIFYVM_HDB, // deprecated
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync MODIFYVM_HDD, // deprecated
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync MODIFYVM_IDECONTROLLER, // deprecated
d97357e2036109245c83ba553d0290212e28ea40vboxsync MODIFYVM_SATAIDEEMULATION, // deprecated
3581dfd579fa647c95528b7f7d24740111a36903vboxsync MODIFYVM_SATAPORTCOUNT, // deprecated
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync MODIFYVM_SATAPORT, // deprecated
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync MODIFYVM_SATA, // deprecated
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync MODIFYVM_SCSIPORT, // deprecated
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync MODIFYVM_SCSITYPE, // deprecated
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync MODIFYVM_SCSI, // deprecated
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync MODIFYVM_DVDPASSTHROUGH, // deprecated
d97357e2036109245c83ba553d0290212e28ea40vboxsync MODIFYVM_DVD, // deprecated
d97357e2036109245c83ba553d0290212e28ea40vboxsync MODIFYVM_FLOPPY, // deprecated
d97357e2036109245c83ba553d0290212e28ea40vboxsync MODIFYVM_NICTRACEFILE,
d97357e2036109245c83ba553d0290212e28ea40vboxsync MODIFYVM_NICTRACE,
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync MODIFYVM_NICTYPE,
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync MODIFYVM_NICSPEED,
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync MODIFYVM_NIC,
d97357e2036109245c83ba553d0290212e28ea40vboxsync MODIFYVM_CABLECONNECTED,
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync MODIFYVM_BRIDGEADAPTER,
3581dfd579fa647c95528b7f7d24740111a36903vboxsync MODIFYVM_HOSTONLYADAPTER,
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync MODIFYVM_INTNET,
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync MODIFYVM_NATNET,
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync MODIFYVM_MACADDRESS,
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync MODIFYVM_HIDPTR,
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync MODIFYVM_HIDKBD,
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync MODIFYVM_UARTMODE,
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync MODIFYVM_UART,
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync MODIFYVM_GUESTSTATISTICSINTERVAL,
3581dfd579fa647c95528b7f7d24740111a36903vboxsync MODIFYVM_GUESTMEMORYBALLOON,
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync MODIFYVM_AUDIOCONTROLLER,
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync MODIFYVM_AUDIO,
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync MODIFYVM_CLIPBOARD,
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync#ifdef VBOX_WITH_VRDP
d97357e2036109245c83ba553d0290212e28ea40vboxsync MODIFYVM_VRDPPORT,
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync MODIFYVM_VRDPADDRESS,
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync MODIFYVM_VRDPAUTHTYPE,
d97357e2036109245c83ba553d0290212e28ea40vboxsync MODIFYVM_VRDPMULTICON,
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync MODIFYVM_VRDPREUSECON,
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync MODIFYVM_VRDP,
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync#endif
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync MODIFYVM_RTCUSEUTC,
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync MODIFYVM_USBEHCI,
3581dfd579fa647c95528b7f7d24740111a36903vboxsync MODIFYVM_USB,
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync MODIFYVM_SNAPSHOTFOLDER,
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync MODIFYVM_TELEPORTER_ENABLED,
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync MODIFYVM_TELEPORTER_PORT,
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync MODIFYVM_TELEPORTER_ADDRESS,
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync MODIFYVM_TELEPORTER_PASSWORD,
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync MODIFYVM_HARDWARE_UUID,
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync MODIFYVM_HPET,
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync MODIFYVM_IOMGR,
89785e233a2828c846caf26ea6e66b1641fc1c47vboxsync MODIFYVM_IOBACKEND,
4ce3d4b5c12636b70579aed52e55fa8b4f49bff2vboxsync MODIFYVM_IOCACHE,
4ce3d4b5c12636b70579aed52e55fa8b4f49bff2vboxsync MODIFYVM_IOCACHESIZE,
89785e233a2828c846caf26ea6e66b1641fc1c47vboxsync MODIFYVM_IOBANDWIDTHMAX
4ce3d4b5c12636b70579aed52e55fa8b4f49bff2vboxsync};
89785e233a2828c846caf26ea6e66b1641fc1c47vboxsync
3331475701a5b12f98b3cfea07d5dca60072530fvboxsyncstatic const RTGETOPTDEF g_aModifyVMOptions[] =
d97357e2036109245c83ba553d0290212e28ea40vboxsync{
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync { "--name", MODIFYVM_NAME, RTGETOPT_REQ_STRING },
3581dfd579fa647c95528b7f7d24740111a36903vboxsync { "--ostype", MODIFYVM_OSTYPE, RTGETOPT_REQ_STRING },
4ce3d4b5c12636b70579aed52e55fa8b4f49bff2vboxsync { "--memory", MODIFYVM_MEMORY, RTGETOPT_REQ_UINT32 },
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync { "--vram", MODIFYVM_VRAM, RTGETOPT_REQ_UINT32 },
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync { "--firmware", MODIFYVM_FIRMWARE, RTGETOPT_REQ_STRING },
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync { "--acpi", MODIFYVM_ACPI, RTGETOPT_REQ_BOOL_ONOFF },
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync { "--ioapic", MODIFYVM_IOAPIC, RTGETOPT_REQ_BOOL_ONOFF },
4ce3d4b5c12636b70579aed52e55fa8b4f49bff2vboxsync { "--pae", MODIFYVM_PAE, RTGETOPT_REQ_BOOL_ONOFF },
4ce3d4b5c12636b70579aed52e55fa8b4f49bff2vboxsync { "--synthcpu", MODIFYVM_SYNTHCPU, RTGETOPT_REQ_BOOL_ONOFF },
4ce3d4b5c12636b70579aed52e55fa8b4f49bff2vboxsync { "--hwvirtex", MODIFYVM_HWVIRTEX, RTGETOPT_REQ_BOOL_ONOFF },
4ce3d4b5c12636b70579aed52e55fa8b4f49bff2vboxsync { "--hwvirtexexcl", MODIFYVM_HWVIRTEXEXCLUSIVE, RTGETOPT_REQ_BOOL_ONOFF },
4ce3d4b5c12636b70579aed52e55fa8b4f49bff2vboxsync { "--nestedpaging", MODIFYVM_NESTEDPAGING, RTGETOPT_REQ_BOOL_ONOFF },
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync { "--largepages", MODIFYVM_LARGEPAGES, RTGETOPT_REQ_BOOL_ONOFF },
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync { "--vtxvpid", MODIFYVM_VTXVPID, RTGETOPT_REQ_BOOL_ONOFF },
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync { "--cpuidset", MODIFYVM_SETCPUID, RTGETOPT_REQ_UINT32 | RTGETOPT_FLAG_HEX},
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync { "--cpuidremove", MODIFYVM_DELCPUID, RTGETOPT_REQ_UINT32 | RTGETOPT_FLAG_HEX},
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync { "--cpuidremoveall", MODIFYVM_DELALLCPUID, RTGETOPT_REQ_NOTHING},
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync { "--cpus", MODIFYVM_CPUS, RTGETOPT_REQ_UINT32 },
d97357e2036109245c83ba553d0290212e28ea40vboxsync { "--cpuhotplug", MODIFYVM_CPUHOTPLUG, RTGETOPT_REQ_BOOL_ONOFF },
d97357e2036109245c83ba553d0290212e28ea40vboxsync { "--plugcpu", MODIFYVM_PLUGCPU, RTGETOPT_REQ_UINT32 },
d97357e2036109245c83ba553d0290212e28ea40vboxsync { "--unplugcpu", MODIFYVM_UNPLUGCPU, RTGETOPT_REQ_UINT32 },
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync { "--rtcuseutc", MODIFYVM_RTCUSEUTC, RTGETOPT_REQ_BOOL_ONOFF },
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync { "--monitorcount", MODIFYVM_MONITORCOUNT, RTGETOPT_REQ_UINT32 },
d97357e2036109245c83ba553d0290212e28ea40vboxsync { "--accelerate3d", MODIFYVM_ACCELERATE3D, RTGETOPT_REQ_BOOL_ONOFF },
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync#ifdef VBOX_WITH_VIDEOHWACCEL
3581dfd579fa647c95528b7f7d24740111a36903vboxsync { "--accelerate2dvideo", MODIFYVM_ACCELERATE2DVIDEO, RTGETOPT_REQ_BOOL_ONOFF },
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync#endif
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync { "--bioslogofadein", MODIFYVM_BIOSLOGOFADEIN, RTGETOPT_REQ_BOOL_ONOFF },
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync { "--bioslogofadeout", MODIFYVM_BIOSLOGOFADEOUT, RTGETOPT_REQ_BOOL_ONOFF },
d97357e2036109245c83ba553d0290212e28ea40vboxsync { "--bioslogodisplaytime", MODIFYVM_BIOSLOGODISPLAYTIME, RTGETOPT_REQ_UINT32 },
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync { "--bioslogoimagepath", MODIFYVM_BIOSLOGOIMAGEPATH, RTGETOPT_REQ_STRING },
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync { "--biosbootmenu", MODIFYVM_BIOSBOOTMENU, RTGETOPT_REQ_STRING },
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync { "--biossystemtimeoffset", MODIFYVM_BIOSSYSTEMTIMEOFFSET, RTGETOPT_REQ_INT64 },
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync { "--biospxedebug", MODIFYVM_BIOSPXEDEBUG, RTGETOPT_REQ_BOOL_ONOFF },
d97357e2036109245c83ba553d0290212e28ea40vboxsync { "--boot", MODIFYVM_BOOT, RTGETOPT_REQ_STRING | RTGETOPT_FLAG_INDEX },
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync { "--hda", MODIFYVM_HDA, RTGETOPT_REQ_STRING },
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync { "--hdb", MODIFYVM_HDB, RTGETOPT_REQ_STRING },
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync { "--hdd", MODIFYVM_HDD, RTGETOPT_REQ_STRING },
d97357e2036109245c83ba553d0290212e28ea40vboxsync { "--idecontroller", MODIFYVM_IDECONTROLLER, RTGETOPT_REQ_STRING },
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync { "--sataideemulation", MODIFYVM_SATAIDEEMULATION, RTGETOPT_REQ_UINT32 | RTGETOPT_FLAG_INDEX },
d97357e2036109245c83ba553d0290212e28ea40vboxsync { "--sataportcount", MODIFYVM_SATAPORTCOUNT, RTGETOPT_REQ_UINT32 },
d97357e2036109245c83ba553d0290212e28ea40vboxsync { "--sataport", MODIFYVM_SATAPORT, RTGETOPT_REQ_STRING | RTGETOPT_FLAG_INDEX },
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync { "--sata", MODIFYVM_SATA, RTGETOPT_REQ_STRING },
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync { "--scsiport", MODIFYVM_SCSIPORT, RTGETOPT_REQ_STRING | RTGETOPT_FLAG_INDEX },
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync { "--scsitype", MODIFYVM_SCSITYPE, RTGETOPT_REQ_STRING },
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync { "--scsi", MODIFYVM_SCSI, RTGETOPT_REQ_STRING },
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync { "--dvdpassthrough", MODIFYVM_DVDPASSTHROUGH, RTGETOPT_REQ_STRING },
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync { "--dvd", MODIFYVM_DVD, RTGETOPT_REQ_STRING },
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync { "--floppy", MODIFYVM_FLOPPY, RTGETOPT_REQ_STRING },
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync { "--nictracefile", MODIFYVM_NICTRACEFILE, RTGETOPT_REQ_STRING | RTGETOPT_FLAG_INDEX },
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync { "--nictrace", MODIFYVM_NICTRACE, RTGETOPT_REQ_BOOL_ONOFF | RTGETOPT_FLAG_INDEX },
3581dfd579fa647c95528b7f7d24740111a36903vboxsync { "--nictype", MODIFYVM_NICTYPE, RTGETOPT_REQ_STRING | RTGETOPT_FLAG_INDEX },
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync { "--nicspeed", MODIFYVM_NICSPEED, RTGETOPT_REQ_UINT32 | RTGETOPT_FLAG_INDEX },
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync { "--nic", MODIFYVM_NIC, RTGETOPT_REQ_STRING | RTGETOPT_FLAG_INDEX },
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync { "--cableconnected", MODIFYVM_CABLECONNECTED, RTGETOPT_REQ_BOOL_ONOFF | RTGETOPT_FLAG_INDEX },
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync { "--bridgeadapter", MODIFYVM_BRIDGEADAPTER, RTGETOPT_REQ_STRING | RTGETOPT_FLAG_INDEX },
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync { "--hostonlyadapter", MODIFYVM_HOSTONLYADAPTER, RTGETOPT_REQ_STRING | RTGETOPT_FLAG_INDEX },
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync { "--intnet", MODIFYVM_INTNET, RTGETOPT_REQ_STRING | RTGETOPT_FLAG_INDEX },
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync { "--natnet", MODIFYVM_NATNET, RTGETOPT_REQ_STRING | RTGETOPT_FLAG_INDEX },
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync { "--macaddress", MODIFYVM_MACADDRESS, RTGETOPT_REQ_STRING | RTGETOPT_FLAG_INDEX },
d97357e2036109245c83ba553d0290212e28ea40vboxsync { "--mouse", MODIFYVM_HIDPTR, RTGETOPT_REQ_STRING },
d97357e2036109245c83ba553d0290212e28ea40vboxsync { "--keyboard", MODIFYVM_HIDKBD, RTGETOPT_REQ_STRING },
d97357e2036109245c83ba553d0290212e28ea40vboxsync { "--uartmode", MODIFYVM_UARTMODE, RTGETOPT_REQ_STRING | RTGETOPT_FLAG_INDEX },
d97357e2036109245c83ba553d0290212e28ea40vboxsync { "--uart", MODIFYVM_UART, RTGETOPT_REQ_STRING | RTGETOPT_FLAG_INDEX },
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync { "--gueststatisticsinterval", MODIFYVM_GUESTSTATISTICSINTERVAL, RTGETOPT_REQ_UINT32 },
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync { "--guestmemoryballoon", MODIFYVM_GUESTMEMORYBALLOON, RTGETOPT_REQ_UINT32 },
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync { "--audiocontroller", MODIFYVM_AUDIOCONTROLLER, RTGETOPT_REQ_STRING },
d97357e2036109245c83ba553d0290212e28ea40vboxsync { "--audio", MODIFYVM_AUDIO, RTGETOPT_REQ_STRING },
d97357e2036109245c83ba553d0290212e28ea40vboxsync { "--clipboard", MODIFYVM_CLIPBOARD, RTGETOPT_REQ_STRING },
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync#ifdef VBOX_WITH_VRDP
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync { "--vrdpport", MODIFYVM_VRDPPORT, RTGETOPT_REQ_STRING },
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync { "--vrdpaddress", MODIFYVM_VRDPADDRESS, RTGETOPT_REQ_STRING },
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync { "--vrdpauthtype", MODIFYVM_VRDPAUTHTYPE, RTGETOPT_REQ_STRING },
3581dfd579fa647c95528b7f7d24740111a36903vboxsync { "--vrdpmulticon", MODIFYVM_VRDPMULTICON, RTGETOPT_REQ_BOOL_ONOFF },
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync { "--vrdpreusecon", MODIFYVM_VRDPREUSECON, RTGETOPT_REQ_BOOL_ONOFF },
d97357e2036109245c83ba553d0290212e28ea40vboxsync { "--vrdp", MODIFYVM_VRDP, RTGETOPT_REQ_BOOL_ONOFF },
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync#endif
3581dfd579fa647c95528b7f7d24740111a36903vboxsync { "--usbehci", MODIFYVM_USBEHCI, RTGETOPT_REQ_BOOL_ONOFF },
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync { "--usb", MODIFYVM_USB, RTGETOPT_REQ_BOOL_ONOFF },
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync { "--snapshotfolder", MODIFYVM_SNAPSHOTFOLDER, RTGETOPT_REQ_STRING },
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync { "--teleporter", MODIFYVM_TELEPORTER_ENABLED, RTGETOPT_REQ_BOOL_ONOFF },
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync { "--teleporterenabled", MODIFYVM_TELEPORTER_ENABLED, RTGETOPT_REQ_BOOL_ONOFF }, /* deprecated */
3581dfd579fa647c95528b7f7d24740111a36903vboxsync { "--teleporterport", MODIFYVM_TELEPORTER_PORT, RTGETOPT_REQ_UINT32 },
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync { "--teleporteraddress", MODIFYVM_TELEPORTER_ADDRESS, RTGETOPT_REQ_STRING },
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync { "--teleporterpassword", MODIFYVM_TELEPORTER_PASSWORD, RTGETOPT_REQ_STRING },
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync { "--hardwareuuid", MODIFYVM_HARDWARE_UUID, RTGETOPT_REQ_STRING },
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync { "--hpet", MODIFYVM_HPET, RTGETOPT_REQ_BOOL_ONOFF },
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync { "--iomgr", MODIFYVM_IOMGR, RTGETOPT_REQ_STRING },
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync { "--iobackend", MODIFYVM_IOBACKEND, RTGETOPT_REQ_STRING },
d97357e2036109245c83ba553d0290212e28ea40vboxsync { "--iocache", MODIFYVM_IOCACHE, RTGETOPT_REQ_BOOL_ONOFF },
3581dfd579fa647c95528b7f7d24740111a36903vboxsync { "--iocachesize", MODIFYVM_IOCACHESIZE, RTGETOPT_REQ_UINT32 },
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync { "--iobandwidthmax", MODIFYVM_IOBANDWIDTHMAX, RTGETOPT_REQ_UINT32 },
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync};
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync
3331475701a5b12f98b3cfea07d5dca60072530fvboxsyncint handleModifyVM(HandlerArg *a)
d97357e2036109245c83ba553d0290212e28ea40vboxsync{
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync int c;
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync HRESULT rc;
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync Bstr name;
d97357e2036109245c83ba553d0290212e28ea40vboxsync Bstr machineuuid (a->argv[0]);
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync RTGETOPTUNION ValueUnion;
3581dfd579fa647c95528b7f7d24740111a36903vboxsync RTGETOPTSTATE GetOptState;
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync ComPtr <IMachine> machine;
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync ComPtr <IBIOSSettings> biosSettings;
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync /* VM ID + at least one parameter. Parameter arguments are checked
d97357e2036109245c83ba553d0290212e28ea40vboxsync * individually. */
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync if (a->argc < 2)
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync return errorSyntax(USAGE_MODIFYVM, "Not enough parameters");
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync
d97357e2036109245c83ba553d0290212e28ea40vboxsync /* Get the number of network adapters */
d97357e2036109245c83ba553d0290212e28ea40vboxsync ULONG NetworkAdapterCount = 0;
d97357e2036109245c83ba553d0290212e28ea40vboxsync {
d97357e2036109245c83ba553d0290212e28ea40vboxsync ComPtr <ISystemProperties> info;
d97357e2036109245c83ba553d0290212e28ea40vboxsync CHECK_ERROR_RET(a->virtualBox, COMGETTER(SystemProperties)(info.asOutParam()), 1);
d97357e2036109245c83ba553d0290212e28ea40vboxsync CHECK_ERROR_RET(info, COMGETTER(NetworkAdapterCount)(&NetworkAdapterCount), 1);
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync }
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync ULONG SerialPortCount = 0;
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync {
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync ComPtr <ISystemProperties> info;
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync CHECK_ERROR_RET(a->virtualBox, COMGETTER(SystemProperties)(info.asOutParam()), 1);
3581dfd579fa647c95528b7f7d24740111a36903vboxsync CHECK_ERROR_RET(info, COMGETTER(SerialPortCount)(&SerialPortCount), 1);
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync }
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync
3581dfd579fa647c95528b7f7d24740111a36903vboxsync /* try to find the given machine */
d97357e2036109245c83ba553d0290212e28ea40vboxsync if (!Guid(machineuuid).isEmpty())
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync {
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync CHECK_ERROR_RET(a->virtualBox, GetMachine(machineuuid, machine.asOutParam()), 1);
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync }
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync else
93186778b7c7dbfd0b5b135f56fe8434949ad2e8vboxsync {
93186778b7c7dbfd0b5b135f56fe8434949ad2e8vboxsync CHECK_ERROR_RET(a->virtualBox, FindMachine(Bstr(a->argv[0]), machine.asOutParam()), 1);
93186778b7c7dbfd0b5b135f56fe8434949ad2e8vboxsync machine->COMGETTER(Id)(machineuuid.asOutParam());
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync }
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync
93186778b7c7dbfd0b5b135f56fe8434949ad2e8vboxsync /* open a session for the VM */
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync CHECK_ERROR_RET(a->virtualBox, OpenSession(a->session, machineuuid), 1);
3581dfd579fa647c95528b7f7d24740111a36903vboxsync
d97357e2036109245c83ba553d0290212e28ea40vboxsync /* get the mutable session machine */
93186778b7c7dbfd0b5b135f56fe8434949ad2e8vboxsync a->session->COMGETTER(Machine)(machine.asOutParam());
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync machine->COMGETTER(BIOSSettings)(biosSettings.asOutParam());
93186778b7c7dbfd0b5b135f56fe8434949ad2e8vboxsync
93186778b7c7dbfd0b5b135f56fe8434949ad2e8vboxsync RTGetOptInit(&GetOptState, a->argc, a->argv, g_aModifyVMOptions,
d97357e2036109245c83ba553d0290212e28ea40vboxsync RT_ELEMENTS(g_aModifyVMOptions), 1, RTGETOPTINIT_FLAGS_NO_STD_OPTS);
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync
3581dfd579fa647c95528b7f7d24740111a36903vboxsync while ( SUCCEEDED (rc)
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync && (c = RTGetOpt(&GetOptState, &ValueUnion)))
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync {
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync switch (c)
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync {
d97357e2036109245c83ba553d0290212e28ea40vboxsync case MODIFYVM_NAME:
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync {
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync CHECK_ERROR(machine, COMSETTER(Name)(Bstr(ValueUnion.psz)));
d97357e2036109245c83ba553d0290212e28ea40vboxsync break;
3581dfd579fa647c95528b7f7d24740111a36903vboxsync }
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync case MODIFYVM_OSTYPE:
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync {
d97357e2036109245c83ba553d0290212e28ea40vboxsync ComPtr<IGuestOSType> guestOSType;
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync CHECK_ERROR(a->virtualBox, GetGuestOSType(Bstr(ValueUnion.psz), guestOSType.asOutParam()));
93186778b7c7dbfd0b5b135f56fe8434949ad2e8vboxsync if (SUCCEEDED(rc) && guestOSType)
93186778b7c7dbfd0b5b135f56fe8434949ad2e8vboxsync {
93186778b7c7dbfd0b5b135f56fe8434949ad2e8vboxsync CHECK_ERROR(machine, COMSETTER(OSTypeId)(Bstr(ValueUnion.psz)));
93186778b7c7dbfd0b5b135f56fe8434949ad2e8vboxsync }
93186778b7c7dbfd0b5b135f56fe8434949ad2e8vboxsync else
93186778b7c7dbfd0b5b135f56fe8434949ad2e8vboxsync {
93186778b7c7dbfd0b5b135f56fe8434949ad2e8vboxsync errorArgument("Invalid guest OS type '%s'", Utf8Str(ValueUnion.psz).raw());
93186778b7c7dbfd0b5b135f56fe8434949ad2e8vboxsync rc = E_FAIL;
93186778b7c7dbfd0b5b135f56fe8434949ad2e8vboxsync }
93186778b7c7dbfd0b5b135f56fe8434949ad2e8vboxsync break;
93186778b7c7dbfd0b5b135f56fe8434949ad2e8vboxsync }
93186778b7c7dbfd0b5b135f56fe8434949ad2e8vboxsync
93186778b7c7dbfd0b5b135f56fe8434949ad2e8vboxsync case MODIFYVM_MEMORY:
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync {
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync CHECK_ERROR(machine, COMSETTER(MemorySize)(ValueUnion.u32));
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync break;
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync }
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync case MODIFYVM_VRAM:
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync {
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync CHECK_ERROR(machine, COMSETTER(VRAMSize)(ValueUnion.u32));
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync break;
d97357e2036109245c83ba553d0290212e28ea40vboxsync }
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync
3581dfd579fa647c95528b7f7d24740111a36903vboxsync case MODIFYVM_FIRMWARE:
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync {
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync if (!strcmp(ValueUnion.psz, "efi"))
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync {
d97357e2036109245c83ba553d0290212e28ea40vboxsync CHECK_ERROR(machine, COMSETTER(FirmwareType)(FirmwareType_EFI));
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync }
d97357e2036109245c83ba553d0290212e28ea40vboxsync else if (!strcmp(ValueUnion.psz, "efi32"))
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync {
3581dfd579fa647c95528b7f7d24740111a36903vboxsync CHECK_ERROR(machine, COMSETTER(FirmwareType)(FirmwareType_EFI32));
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync }
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync else if (!strcmp(ValueUnion.psz, "efi64"))
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync {
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync CHECK_ERROR(machine, COMSETTER(FirmwareType)(FirmwareType_EFI64));
d97357e2036109245c83ba553d0290212e28ea40vboxsync }
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync else if (!strcmp(ValueUnion.psz, "efidual"))
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync {
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync CHECK_ERROR(machine, COMSETTER(FirmwareType)(FirmwareType_EFIDUAL));
d97357e2036109245c83ba553d0290212e28ea40vboxsync }
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync else if (!strcmp(ValueUnion.psz, "bios"))
d97357e2036109245c83ba553d0290212e28ea40vboxsync {
d97357e2036109245c83ba553d0290212e28ea40vboxsync CHECK_ERROR(machine, COMSETTER(FirmwareType)(FirmwareType_BIOS));
3581dfd579fa647c95528b7f7d24740111a36903vboxsync }
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync else
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync {
3581dfd579fa647c95528b7f7d24740111a36903vboxsync errorArgument("Invalid --firmware argument '%s'", ValueUnion.psz);
d97357e2036109245c83ba553d0290212e28ea40vboxsync rc = E_FAIL;
d97357e2036109245c83ba553d0290212e28ea40vboxsync }
d97357e2036109245c83ba553d0290212e28ea40vboxsync break;
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync }
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync case MODIFYVM_ACPI:
d97357e2036109245c83ba553d0290212e28ea40vboxsync {
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync CHECK_ERROR(biosSettings, COMSETTER(ACPIEnabled)(ValueUnion.f));
d97357e2036109245c83ba553d0290212e28ea40vboxsync break;
d97357e2036109245c83ba553d0290212e28ea40vboxsync }
d97357e2036109245c83ba553d0290212e28ea40vboxsync
d97357e2036109245c83ba553d0290212e28ea40vboxsync case MODIFYVM_IOAPIC:
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync {
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync CHECK_ERROR(biosSettings, COMSETTER(IOAPICEnabled)(ValueUnion.f));
d97357e2036109245c83ba553d0290212e28ea40vboxsync break;
d97357e2036109245c83ba553d0290212e28ea40vboxsync }
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync
d97357e2036109245c83ba553d0290212e28ea40vboxsync case MODIFYVM_PAE:
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync {
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync CHECK_ERROR(machine, SetCpuProperty(CpuPropertyType_PAE, ValueUnion.f));
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync break;
d97357e2036109245c83ba553d0290212e28ea40vboxsync }
a2fa8d93a2e59ba1413354f35db5efa61062971cvboxsync
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync case MODIFYVM_SYNTHCPU:
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync {
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync CHECK_ERROR(machine, SetCpuProperty(CpuPropertyType_Synthetic, ValueUnion.f));
d97357e2036109245c83ba553d0290212e28ea40vboxsync break;
d97357e2036109245c83ba553d0290212e28ea40vboxsync }
d97357e2036109245c83ba553d0290212e28ea40vboxsync
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync case MODIFYVM_HWVIRTEX:
d97357e2036109245c83ba553d0290212e28ea40vboxsync {
d97357e2036109245c83ba553d0290212e28ea40vboxsync CHECK_ERROR(machine, SetHWVirtExProperty(HWVirtExPropertyType_Enabled, ValueUnion.f));
d97357e2036109245c83ba553d0290212e28ea40vboxsync break;
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync }
d97357e2036109245c83ba553d0290212e28ea40vboxsync
d97357e2036109245c83ba553d0290212e28ea40vboxsync case MODIFYVM_HWVIRTEXEXCLUSIVE:
d97357e2036109245c83ba553d0290212e28ea40vboxsync {
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync CHECK_ERROR(machine, SetHWVirtExProperty(HWVirtExPropertyType_Exclusive, ValueUnion.f));
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync break;
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync }
d97357e2036109245c83ba553d0290212e28ea40vboxsync
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync case MODIFYVM_SETCPUID:
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync {
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync uint32_t id = ValueUnion.u32;
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync uint32_t aValue[4];
3581dfd579fa647c95528b7f7d24740111a36903vboxsync
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync for (unsigned i = 0 ; i < 4 ; i++)
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync {
d97357e2036109245c83ba553d0290212e28ea40vboxsync int vrc = RTGetOptFetchValue(&GetOptState, &ValueUnion, RTGETOPT_REQ_UINT32 | RTGETOPT_FLAG_HEX);
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync if (RT_FAILURE(vrc))
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync return errorSyntax(USAGE_MODIFYVM,
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync "Missing or Invalid argument to '%s'",
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync GetOptState.pDef->pszLong);
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync aValue[i] = ValueUnion.u32;
eabf4e0a489160ac121a73dab0222571ae262dd3vboxsync }
eabf4e0a489160ac121a73dab0222571ae262dd3vboxsync CHECK_ERROR(machine, SetCpuIdLeaf(id, aValue[0], aValue[1], aValue[2], aValue[3]));
eabf4e0a489160ac121a73dab0222571ae262dd3vboxsync break;
eabf4e0a489160ac121a73dab0222571ae262dd3vboxsync }
91000cbe6d6b2158c32ffe4b4bce4890f82fd1advboxsync
eabf4e0a489160ac121a73dab0222571ae262dd3vboxsync case MODIFYVM_DELCPUID:
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync {
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync CHECK_ERROR(machine, RemoveCpuIdLeaf(ValueUnion.u32));
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync break;
91000cbe6d6b2158c32ffe4b4bce4890f82fd1advboxsync }
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync case MODIFYVM_DELALLCPUID:
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync {
d97357e2036109245c83ba553d0290212e28ea40vboxsync CHECK_ERROR(machine, RemoveAllCpuIdLeafs());
91000cbe6d6b2158c32ffe4b4bce4890f82fd1advboxsync break;
91000cbe6d6b2158c32ffe4b4bce4890f82fd1advboxsync }
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync
91000cbe6d6b2158c32ffe4b4bce4890f82fd1advboxsync case MODIFYVM_NESTEDPAGING:
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync {
91000cbe6d6b2158c32ffe4b4bce4890f82fd1advboxsync CHECK_ERROR(machine, SetHWVirtExProperty(HWVirtExPropertyType_NestedPaging, ValueUnion.f));
91000cbe6d6b2158c32ffe4b4bce4890f82fd1advboxsync break;
eabf4e0a489160ac121a73dab0222571ae262dd3vboxsync }
eabf4e0a489160ac121a73dab0222571ae262dd3vboxsync
eabf4e0a489160ac121a73dab0222571ae262dd3vboxsync case MODIFYVM_LARGEPAGES:
eabf4e0a489160ac121a73dab0222571ae262dd3vboxsync {
eabf4e0a489160ac121a73dab0222571ae262dd3vboxsync CHECK_ERROR(machine, SetHWVirtExProperty(HWVirtExPropertyType_LargePages, ValueUnion.f));
91000cbe6d6b2158c32ffe4b4bce4890f82fd1advboxsync break;
91000cbe6d6b2158c32ffe4b4bce4890f82fd1advboxsync }
91000cbe6d6b2158c32ffe4b4bce4890f82fd1advboxsync
91000cbe6d6b2158c32ffe4b4bce4890f82fd1advboxsync case MODIFYVM_VTXVPID:
91000cbe6d6b2158c32ffe4b4bce4890f82fd1advboxsync {
eabf4e0a489160ac121a73dab0222571ae262dd3vboxsync CHECK_ERROR(machine, SetHWVirtExProperty(HWVirtExPropertyType_VPID, ValueUnion.f));
eabf4e0a489160ac121a73dab0222571ae262dd3vboxsync break;
91000cbe6d6b2158c32ffe4b4bce4890f82fd1advboxsync }
91000cbe6d6b2158c32ffe4b4bce4890f82fd1advboxsync
eabf4e0a489160ac121a73dab0222571ae262dd3vboxsync case MODIFYVM_CPUS:
91000cbe6d6b2158c32ffe4b4bce4890f82fd1advboxsync {
91000cbe6d6b2158c32ffe4b4bce4890f82fd1advboxsync CHECK_ERROR(machine, COMSETTER(CPUCount)(ValueUnion.u32));
eabf4e0a489160ac121a73dab0222571ae262dd3vboxsync break;
eabf4e0a489160ac121a73dab0222571ae262dd3vboxsync }
91000cbe6d6b2158c32ffe4b4bce4890f82fd1advboxsync
91000cbe6d6b2158c32ffe4b4bce4890f82fd1advboxsync case MODIFYVM_RTCUSEUTC:
91000cbe6d6b2158c32ffe4b4bce4890f82fd1advboxsync {
91000cbe6d6b2158c32ffe4b4bce4890f82fd1advboxsync CHECK_ERROR(machine, COMSETTER(RTCUseUTC)(ValueUnion.f));
91000cbe6d6b2158c32ffe4b4bce4890f82fd1advboxsync break;
91000cbe6d6b2158c32ffe4b4bce4890f82fd1advboxsync }
91000cbe6d6b2158c32ffe4b4bce4890f82fd1advboxsync
eabf4e0a489160ac121a73dab0222571ae262dd3vboxsync case MODIFYVM_CPUHOTPLUG:
91000cbe6d6b2158c32ffe4b4bce4890f82fd1advboxsync {
91000cbe6d6b2158c32ffe4b4bce4890f82fd1advboxsync CHECK_ERROR(machine, COMSETTER(CPUHotPlugEnabled)(ValueUnion.f));
91000cbe6d6b2158c32ffe4b4bce4890f82fd1advboxsync break;
91000cbe6d6b2158c32ffe4b4bce4890f82fd1advboxsync }
91000cbe6d6b2158c32ffe4b4bce4890f82fd1advboxsync
eabf4e0a489160ac121a73dab0222571ae262dd3vboxsync case MODIFYVM_PLUGCPU:
eabf4e0a489160ac121a73dab0222571ae262dd3vboxsync {
eabf4e0a489160ac121a73dab0222571ae262dd3vboxsync CHECK_ERROR(machine, HotPlugCPU(ValueUnion.u32));
eabf4e0a489160ac121a73dab0222571ae262dd3vboxsync break;
eabf4e0a489160ac121a73dab0222571ae262dd3vboxsync }
eabf4e0a489160ac121a73dab0222571ae262dd3vboxsync
91000cbe6d6b2158c32ffe4b4bce4890f82fd1advboxsync case MODIFYVM_UNPLUGCPU:
91000cbe6d6b2158c32ffe4b4bce4890f82fd1advboxsync {
eabf4e0a489160ac121a73dab0222571ae262dd3vboxsync CHECK_ERROR(machine, HotUnplugCPU(ValueUnion.u32));
91000cbe6d6b2158c32ffe4b4bce4890f82fd1advboxsync break;
eabf4e0a489160ac121a73dab0222571ae262dd3vboxsync }
eabf4e0a489160ac121a73dab0222571ae262dd3vboxsync
eabf4e0a489160ac121a73dab0222571ae262dd3vboxsync case MODIFYVM_MONITORCOUNT:
eabf4e0a489160ac121a73dab0222571ae262dd3vboxsync {
91000cbe6d6b2158c32ffe4b4bce4890f82fd1advboxsync CHECK_ERROR(machine, COMSETTER(MonitorCount)(ValueUnion.u32));
91000cbe6d6b2158c32ffe4b4bce4890f82fd1advboxsync break;
eabf4e0a489160ac121a73dab0222571ae262dd3vboxsync }
eabf4e0a489160ac121a73dab0222571ae262dd3vboxsync
eabf4e0a489160ac121a73dab0222571ae262dd3vboxsync case MODIFYVM_ACCELERATE3D:
eabf4e0a489160ac121a73dab0222571ae262dd3vboxsync {
91000cbe6d6b2158c32ffe4b4bce4890f82fd1advboxsync CHECK_ERROR(machine, COMSETTER(Accelerate3DEnabled)(ValueUnion.f));
91000cbe6d6b2158c32ffe4b4bce4890f82fd1advboxsync break;
eabf4e0a489160ac121a73dab0222571ae262dd3vboxsync }
eabf4e0a489160ac121a73dab0222571ae262dd3vboxsync
91000cbe6d6b2158c32ffe4b4bce4890f82fd1advboxsync#ifdef VBOX_WITH_VIDEOHWACCEL
eabf4e0a489160ac121a73dab0222571ae262dd3vboxsync case MODIFYVM_ACCELERATE2DVIDEO:
eabf4e0a489160ac121a73dab0222571ae262dd3vboxsync {
91000cbe6d6b2158c32ffe4b4bce4890f82fd1advboxsync CHECK_ERROR(machine, COMSETTER(Accelerate2DVideoEnabled)(ValueUnion.f));
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync break;
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync }
91000cbe6d6b2158c32ffe4b4bce4890f82fd1advboxsync#endif
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync
91000cbe6d6b2158c32ffe4b4bce4890f82fd1advboxsync case MODIFYVM_BIOSLOGOFADEIN:
91000cbe6d6b2158c32ffe4b4bce4890f82fd1advboxsync {
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync CHECK_ERROR(biosSettings, COMSETTER(LogoFadeIn)(ValueUnion.f));
91000cbe6d6b2158c32ffe4b4bce4890f82fd1advboxsync break;
91000cbe6d6b2158c32ffe4b4bce4890f82fd1advboxsync }
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync
91000cbe6d6b2158c32ffe4b4bce4890f82fd1advboxsync case MODIFYVM_BIOSLOGOFADEOUT:
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync {
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync CHECK_ERROR(biosSettings, COMSETTER(LogoFadeOut)(ValueUnion.f));
91000cbe6d6b2158c32ffe4b4bce4890f82fd1advboxsync break;
91000cbe6d6b2158c32ffe4b4bce4890f82fd1advboxsync }
91000cbe6d6b2158c32ffe4b4bce4890f82fd1advboxsync
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync case MODIFYVM_BIOSLOGODISPLAYTIME:
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync {
91000cbe6d6b2158c32ffe4b4bce4890f82fd1advboxsync CHECK_ERROR(biosSettings, COMSETTER(LogoDisplayTime)(ValueUnion.u32));
91000cbe6d6b2158c32ffe4b4bce4890f82fd1advboxsync break;
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync }
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync
91000cbe6d6b2158c32ffe4b4bce4890f82fd1advboxsync case MODIFYVM_BIOSLOGOIMAGEPATH:
91000cbe6d6b2158c32ffe4b4bce4890f82fd1advboxsync {
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync CHECK_ERROR(biosSettings, COMSETTER(LogoImagePath)(Bstr(ValueUnion.psz)));
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync break;
91000cbe6d6b2158c32ffe4b4bce4890f82fd1advboxsync }
91000cbe6d6b2158c32ffe4b4bce4890f82fd1advboxsync
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync case MODIFYVM_BIOSBOOTMENU:
91000cbe6d6b2158c32ffe4b4bce4890f82fd1advboxsync {
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync if (!strcmp(ValueUnion.psz, "disabled"))
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync {
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync CHECK_ERROR(biosSettings, COMSETTER(BootMenuMode)(BIOSBootMenuMode_Disabled));
7c63dd76442a4896af6ce9c65d87461d3e7fe82bvboxsync }
7c63dd76442a4896af6ce9c65d87461d3e7fe82bvboxsync else if (!strcmp(ValueUnion.psz, "menuonly"))
7c63dd76442a4896af6ce9c65d87461d3e7fe82bvboxsync {
7c63dd76442a4896af6ce9c65d87461d3e7fe82bvboxsync CHECK_ERROR(biosSettings, COMSETTER(BootMenuMode)(BIOSBootMenuMode_MenuOnly));
7c63dd76442a4896af6ce9c65d87461d3e7fe82bvboxsync }
7c63dd76442a4896af6ce9c65d87461d3e7fe82bvboxsync else if (!strcmp(ValueUnion.psz, "messageandmenu"))
7c63dd76442a4896af6ce9c65d87461d3e7fe82bvboxsync {
7c63dd76442a4896af6ce9c65d87461d3e7fe82bvboxsync CHECK_ERROR(biosSettings, COMSETTER(BootMenuMode)(BIOSBootMenuMode_MessageAndMenu));
7c63dd76442a4896af6ce9c65d87461d3e7fe82bvboxsync }
91000cbe6d6b2158c32ffe4b4bce4890f82fd1advboxsync else
7c63dd76442a4896af6ce9c65d87461d3e7fe82bvboxsync {
7c63dd76442a4896af6ce9c65d87461d3e7fe82bvboxsync errorArgument("Invalid --biosbootmenu argument '%s'", ValueUnion.psz);
91000cbe6d6b2158c32ffe4b4bce4890f82fd1advboxsync rc = E_FAIL;
7c63dd76442a4896af6ce9c65d87461d3e7fe82bvboxsync }
7c63dd76442a4896af6ce9c65d87461d3e7fe82bvboxsync break;
91000cbe6d6b2158c32ffe4b4bce4890f82fd1advboxsync }
7c63dd76442a4896af6ce9c65d87461d3e7fe82bvboxsync
7c63dd76442a4896af6ce9c65d87461d3e7fe82bvboxsync case MODIFYVM_BIOSSYSTEMTIMEOFFSET:
7c63dd76442a4896af6ce9c65d87461d3e7fe82bvboxsync {
7c63dd76442a4896af6ce9c65d87461d3e7fe82bvboxsync CHECK_ERROR(biosSettings, COMSETTER(TimeOffset)(ValueUnion.i64));
8a76f0fa8609a27cdcaa2ad267eef18fb917977evboxsync break;
7c63dd76442a4896af6ce9c65d87461d3e7fe82bvboxsync }
7c63dd76442a4896af6ce9c65d87461d3e7fe82bvboxsync
7c63dd76442a4896af6ce9c65d87461d3e7fe82bvboxsync case MODIFYVM_BIOSPXEDEBUG:
8a76f0fa8609a27cdcaa2ad267eef18fb917977evboxsync {
7c63dd76442a4896af6ce9c65d87461d3e7fe82bvboxsync CHECK_ERROR(biosSettings, COMSETTER(PXEDebugEnabled)(ValueUnion.f));
7c63dd76442a4896af6ce9c65d87461d3e7fe82bvboxsync break;
91000cbe6d6b2158c32ffe4b4bce4890f82fd1advboxsync }
7c63dd76442a4896af6ce9c65d87461d3e7fe82bvboxsync
7c63dd76442a4896af6ce9c65d87461d3e7fe82bvboxsync case MODIFYVM_BOOT:
7c63dd76442a4896af6ce9c65d87461d3e7fe82bvboxsync {
7c63dd76442a4896af6ce9c65d87461d3e7fe82bvboxsync if (!strcmp(ValueUnion.psz, "none"))
91000cbe6d6b2158c32ffe4b4bce4890f82fd1advboxsync {
7c63dd76442a4896af6ce9c65d87461d3e7fe82bvboxsync CHECK_ERROR(machine, SetBootOrder(GetOptState.uIndex, DeviceType_Null));
7c63dd76442a4896af6ce9c65d87461d3e7fe82bvboxsync }
7c63dd76442a4896af6ce9c65d87461d3e7fe82bvboxsync else if (!strcmp(ValueUnion.psz, "floppy"))
7c63dd76442a4896af6ce9c65d87461d3e7fe82bvboxsync {
7c63dd76442a4896af6ce9c65d87461d3e7fe82bvboxsync CHECK_ERROR(machine, SetBootOrder(GetOptState.uIndex, DeviceType_Floppy));
7c63dd76442a4896af6ce9c65d87461d3e7fe82bvboxsync }
7c63dd76442a4896af6ce9c65d87461d3e7fe82bvboxsync else if (!strcmp(ValueUnion.psz, "dvd"))
7c63dd76442a4896af6ce9c65d87461d3e7fe82bvboxsync {
7c63dd76442a4896af6ce9c65d87461d3e7fe82bvboxsync CHECK_ERROR(machine, SetBootOrder(GetOptState.uIndex, DeviceType_DVD));
91000cbe6d6b2158c32ffe4b4bce4890f82fd1advboxsync }
91000cbe6d6b2158c32ffe4b4bce4890f82fd1advboxsync else if (!strcmp(ValueUnion.psz, "disk"))
7c63dd76442a4896af6ce9c65d87461d3e7fe82bvboxsync {
91000cbe6d6b2158c32ffe4b4bce4890f82fd1advboxsync CHECK_ERROR(machine, SetBootOrder(GetOptState.uIndex, DeviceType_HardDisk));
7c63dd76442a4896af6ce9c65d87461d3e7fe82bvboxsync }
7c63dd76442a4896af6ce9c65d87461d3e7fe82bvboxsync else if (!strcmp(ValueUnion.psz, "net"))
91000cbe6d6b2158c32ffe4b4bce4890f82fd1advboxsync {
91000cbe6d6b2158c32ffe4b4bce4890f82fd1advboxsync CHECK_ERROR(machine, SetBootOrder(GetOptState.uIndex, DeviceType_Network));
91000cbe6d6b2158c32ffe4b4bce4890f82fd1advboxsync }
7c63dd76442a4896af6ce9c65d87461d3e7fe82bvboxsync else
7c63dd76442a4896af6ce9c65d87461d3e7fe82bvboxsync return errorArgument("Invalid boot device '%s'", ValueUnion.psz);
91000cbe6d6b2158c32ffe4b4bce4890f82fd1advboxsync break;
91000cbe6d6b2158c32ffe4b4bce4890f82fd1advboxsync }
7c63dd76442a4896af6ce9c65d87461d3e7fe82bvboxsync
7c63dd76442a4896af6ce9c65d87461d3e7fe82bvboxsync case MODIFYVM_HDA: // deprecated
91000cbe6d6b2158c32ffe4b4bce4890f82fd1advboxsync {
7c63dd76442a4896af6ce9c65d87461d3e7fe82bvboxsync if (!strcmp(ValueUnion.psz, "none"))
7c63dd76442a4896af6ce9c65d87461d3e7fe82bvboxsync {
91000cbe6d6b2158c32ffe4b4bce4890f82fd1advboxsync machine->DetachDevice(Bstr("IDE Controller"), 0, 0);
7c63dd76442a4896af6ce9c65d87461d3e7fe82bvboxsync }
91000cbe6d6b2158c32ffe4b4bce4890f82fd1advboxsync else
7c63dd76442a4896af6ce9c65d87461d3e7fe82bvboxsync {
7c63dd76442a4896af6ce9c65d87461d3e7fe82bvboxsync /* first guess is that it's a UUID */
7c63dd76442a4896af6ce9c65d87461d3e7fe82bvboxsync Bstr uuid(ValueUnion.psz);
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync ComPtr<IMedium> hardDisk;
468190b22aeddd68559df8a742aef64ee8974d0bvboxsync rc = a->virtualBox->GetHardDisk(uuid, hardDisk.asOutParam());
91000cbe6d6b2158c32ffe4b4bce4890f82fd1advboxsync /* not successful? Then it must be a filename */
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync if (!hardDisk)
468190b22aeddd68559df8a742aef64ee8974d0bvboxsync {
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync rc = a->virtualBox->FindHardDisk(Bstr(ValueUnion.psz), hardDisk.asOutParam());
91000cbe6d6b2158c32ffe4b4bce4890f82fd1advboxsync if (FAILED(rc))
91000cbe6d6b2158c32ffe4b4bce4890f82fd1advboxsync {
91000cbe6d6b2158c32ffe4b4bce4890f82fd1advboxsync /* open the new hard disk object */
91000cbe6d6b2158c32ffe4b4bce4890f82fd1advboxsync CHECK_ERROR(a->virtualBox,
91000cbe6d6b2158c32ffe4b4bce4890f82fd1advboxsync OpenHardDisk(Bstr(ValueUnion.psz),
91000cbe6d6b2158c32ffe4b4bce4890f82fd1advboxsync AccessMode_ReadWrite, false, Bstr(""),
91000cbe6d6b2158c32ffe4b4bce4890f82fd1advboxsync false, Bstr(""), hardDisk.asOutParam()));
91000cbe6d6b2158c32ffe4b4bce4890f82fd1advboxsync }
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync }
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync if (hardDisk)
91000cbe6d6b2158c32ffe4b4bce4890f82fd1advboxsync {
91000cbe6d6b2158c32ffe4b4bce4890f82fd1advboxsync hardDisk->COMGETTER(Id)(uuid.asOutParam());
468190b22aeddd68559df8a742aef64ee8974d0bvboxsync CHECK_ERROR(machine, AttachDevice(Bstr("IDE Controller"), 0, 0, DeviceType_HardDisk, uuid));
468190b22aeddd68559df8a742aef64ee8974d0bvboxsync }
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync else
91000cbe6d6b2158c32ffe4b4bce4890f82fd1advboxsync rc = E_FAIL;
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync }
91000cbe6d6b2158c32ffe4b4bce4890f82fd1advboxsync break;
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync }
91000cbe6d6b2158c32ffe4b4bce4890f82fd1advboxsync
91000cbe6d6b2158c32ffe4b4bce4890f82fd1advboxsync case MODIFYVM_HDB: // deprecated
91000cbe6d6b2158c32ffe4b4bce4890f82fd1advboxsync {
91000cbe6d6b2158c32ffe4b4bce4890f82fd1advboxsync if (!strcmp(ValueUnion.psz, "none"))
468190b22aeddd68559df8a742aef64ee8974d0bvboxsync {
91000cbe6d6b2158c32ffe4b4bce4890f82fd1advboxsync machine->DetachDevice(Bstr("IDE Controller"), 0, 1);
91000cbe6d6b2158c32ffe4b4bce4890f82fd1advboxsync }
91000cbe6d6b2158c32ffe4b4bce4890f82fd1advboxsync else
91000cbe6d6b2158c32ffe4b4bce4890f82fd1advboxsync {
91000cbe6d6b2158c32ffe4b4bce4890f82fd1advboxsync /* first guess is that it's a UUID */
91000cbe6d6b2158c32ffe4b4bce4890f82fd1advboxsync Bstr uuid(ValueUnion.psz);
91000cbe6d6b2158c32ffe4b4bce4890f82fd1advboxsync ComPtr<IMedium> hardDisk;
468190b22aeddd68559df8a742aef64ee8974d0bvboxsync rc = a->virtualBox->GetHardDisk(uuid, hardDisk.asOutParam());
468190b22aeddd68559df8a742aef64ee8974d0bvboxsync /* not successful? Then it must be a filename */
91000cbe6d6b2158c32ffe4b4bce4890f82fd1advboxsync if (!hardDisk)
91000cbe6d6b2158c32ffe4b4bce4890f82fd1advboxsync {
91000cbe6d6b2158c32ffe4b4bce4890f82fd1advboxsync rc = a->virtualBox->FindHardDisk(Bstr(ValueUnion.psz), hardDisk.asOutParam());
91000cbe6d6b2158c32ffe4b4bce4890f82fd1advboxsync if (FAILED(rc))
91000cbe6d6b2158c32ffe4b4bce4890f82fd1advboxsync {
91000cbe6d6b2158c32ffe4b4bce4890f82fd1advboxsync /* open the new hard disk object */
91000cbe6d6b2158c32ffe4b4bce4890f82fd1advboxsync CHECK_ERROR(a->virtualBox,
91000cbe6d6b2158c32ffe4b4bce4890f82fd1advboxsync OpenHardDisk(Bstr(ValueUnion.psz),
91000cbe6d6b2158c32ffe4b4bce4890f82fd1advboxsync AccessMode_ReadWrite, false, Bstr(""),
91000cbe6d6b2158c32ffe4b4bce4890f82fd1advboxsync false, Bstr(""), hardDisk.asOutParam()));
91000cbe6d6b2158c32ffe4b4bce4890f82fd1advboxsync }
91000cbe6d6b2158c32ffe4b4bce4890f82fd1advboxsync }
91000cbe6d6b2158c32ffe4b4bce4890f82fd1advboxsync if (hardDisk)
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync {
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync hardDisk->COMGETTER(Id)(uuid.asOutParam());
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync CHECK_ERROR(machine, AttachDevice(Bstr("IDE Controller"), 0, 1, DeviceType_HardDisk, uuid));
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync }
91000cbe6d6b2158c32ffe4b4bce4890f82fd1advboxsync else
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync rc = E_FAIL;
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync }
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync break;
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync }
91000cbe6d6b2158c32ffe4b4bce4890f82fd1advboxsync
91000cbe6d6b2158c32ffe4b4bce4890f82fd1advboxsync case MODIFYVM_HDD: // deprecated
91000cbe6d6b2158c32ffe4b4bce4890f82fd1advboxsync {
91000cbe6d6b2158c32ffe4b4bce4890f82fd1advboxsync if (!strcmp(ValueUnion.psz, "none"))
91000cbe6d6b2158c32ffe4b4bce4890f82fd1advboxsync {
91000cbe6d6b2158c32ffe4b4bce4890f82fd1advboxsync machine->DetachDevice(Bstr("IDE Controller"), 1, 1);
91000cbe6d6b2158c32ffe4b4bce4890f82fd1advboxsync }
91000cbe6d6b2158c32ffe4b4bce4890f82fd1advboxsync else
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync {
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync /* first guess is that it's a UUID */
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync Bstr uuid(ValueUnion.psz);
91000cbe6d6b2158c32ffe4b4bce4890f82fd1advboxsync ComPtr<IMedium> hardDisk;
91000cbe6d6b2158c32ffe4b4bce4890f82fd1advboxsync rc = a->virtualBox->GetHardDisk(uuid, hardDisk.asOutParam());
91000cbe6d6b2158c32ffe4b4bce4890f82fd1advboxsync /* not successful? Then it must be a filename */
91000cbe6d6b2158c32ffe4b4bce4890f82fd1advboxsync if (!hardDisk)
91000cbe6d6b2158c32ffe4b4bce4890f82fd1advboxsync {
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync rc = a->virtualBox->FindHardDisk(Bstr(ValueUnion.psz), hardDisk.asOutParam());
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync if (FAILED(rc))
91000cbe6d6b2158c32ffe4b4bce4890f82fd1advboxsync {
91000cbe6d6b2158c32ffe4b4bce4890f82fd1advboxsync /* open the new hard disk object */
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync CHECK_ERROR(a->virtualBox,
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync OpenHardDisk(Bstr(ValueUnion.psz),
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync AccessMode_ReadWrite, false, Bstr(""),
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync false, Bstr(""), hardDisk.asOutParam()));
468190b22aeddd68559df8a742aef64ee8974d0bvboxsync }
468190b22aeddd68559df8a742aef64ee8974d0bvboxsync }
91000cbe6d6b2158c32ffe4b4bce4890f82fd1advboxsync if (hardDisk)
468190b22aeddd68559df8a742aef64ee8974d0bvboxsync {
91000cbe6d6b2158c32ffe4b4bce4890f82fd1advboxsync hardDisk->COMGETTER(Id)(uuid.asOutParam());
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync CHECK_ERROR(machine, AttachDevice(Bstr("IDE Controller"), 1, 1, DeviceType_HardDisk, uuid));
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync }
8a76f0fa8609a27cdcaa2ad267eef18fb917977evboxsync else
8a76f0fa8609a27cdcaa2ad267eef18fb917977evboxsync rc = E_FAIL;
468190b22aeddd68559df8a742aef64ee8974d0bvboxsync }
468190b22aeddd68559df8a742aef64ee8974d0bvboxsync break;
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync }
91000cbe6d6b2158c32ffe4b4bce4890f82fd1advboxsync
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync case MODIFYVM_IDECONTROLLER: // deprecated
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync {
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync ComPtr<IStorageController> storageController;
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync CHECK_ERROR(machine, GetStorageControllerByName(Bstr("IDE Controller"),
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync storageController.asOutParam()));
468190b22aeddd68559df8a742aef64ee8974d0bvboxsync
91000cbe6d6b2158c32ffe4b4bce4890f82fd1advboxsync if (!RTStrICmp(ValueUnion.psz, "PIIX3"))
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync {
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync CHECK_ERROR(storageController, COMSETTER(ControllerType)(StorageControllerType_PIIX3));
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync }
91000cbe6d6b2158c32ffe4b4bce4890f82fd1advboxsync else if (!RTStrICmp(ValueUnion.psz, "PIIX4"))
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync {
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync CHECK_ERROR(storageController, COMSETTER(ControllerType)(StorageControllerType_PIIX4));
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync }
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync else if (!RTStrICmp(ValueUnion.psz, "ICH6"))
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync {
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync CHECK_ERROR(storageController, COMSETTER(ControllerType)(StorageControllerType_ICH6));
91000cbe6d6b2158c32ffe4b4bce4890f82fd1advboxsync }
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync else
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync {
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync errorArgument("Invalid --idecontroller argument '%s'", ValueUnion.psz);
91000cbe6d6b2158c32ffe4b4bce4890f82fd1advboxsync rc = E_FAIL;
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync }
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync break;
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync }
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync case MODIFYVM_SATAIDEEMULATION: // deprecated
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync {
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync ComPtr<IStorageController> SataCtl;
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync CHECK_ERROR(machine, GetStorageControllerByName(Bstr("SATA"), SataCtl.asOutParam()));
7c63dd76442a4896af6ce9c65d87461d3e7fe82bvboxsync
7c63dd76442a4896af6ce9c65d87461d3e7fe82bvboxsync if (SUCCEEDED(rc))
7c63dd76442a4896af6ce9c65d87461d3e7fe82bvboxsync CHECK_ERROR(SataCtl, SetIDEEmulationPort(GetOptState.uIndex, ValueUnion.u32));
7c63dd76442a4896af6ce9c65d87461d3e7fe82bvboxsync break;
7c63dd76442a4896af6ce9c65d87461d3e7fe82bvboxsync }
8a76f0fa8609a27cdcaa2ad267eef18fb917977evboxsync
8a76f0fa8609a27cdcaa2ad267eef18fb917977evboxsync case MODIFYVM_SATAPORTCOUNT: // deprecated
72dd225c6e5a582baf12d8590c51d750b887fe5fvboxsync {
72dd225c6e5a582baf12d8590c51d750b887fe5fvboxsync ComPtr<IStorageController> SataCtl;
72dd225c6e5a582baf12d8590c51d750b887fe5fvboxsync CHECK_ERROR(machine, GetStorageControllerByName(Bstr("SATA"), SataCtl.asOutParam()));
72dd225c6e5a582baf12d8590c51d750b887fe5fvboxsync
72dd225c6e5a582baf12d8590c51d750b887fe5fvboxsync if (SUCCEEDED(rc) && ValueUnion.u32 > 0)
72dd225c6e5a582baf12d8590c51d750b887fe5fvboxsync CHECK_ERROR(SataCtl, COMSETTER(PortCount)(ValueUnion.u32));
72dd225c6e5a582baf12d8590c51d750b887fe5fvboxsync break;
72dd225c6e5a582baf12d8590c51d750b887fe5fvboxsync }
72dd225c6e5a582baf12d8590c51d750b887fe5fvboxsync
72dd225c6e5a582baf12d8590c51d750b887fe5fvboxsync case MODIFYVM_SATAPORT: // deprecated
72dd225c6e5a582baf12d8590c51d750b887fe5fvboxsync {
72dd225c6e5a582baf12d8590c51d750b887fe5fvboxsync if (!strcmp(ValueUnion.psz, "none"))
72dd225c6e5a582baf12d8590c51d750b887fe5fvboxsync {
72dd225c6e5a582baf12d8590c51d750b887fe5fvboxsync machine->DetachDevice(Bstr("SATA"), GetOptState.uIndex, 0);
7c63dd76442a4896af6ce9c65d87461d3e7fe82bvboxsync }
7c63dd76442a4896af6ce9c65d87461d3e7fe82bvboxsync else
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync {
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync /* first guess is that it's a UUID */
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync Bstr uuid(ValueUnion.psz);
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync ComPtr<IMedium> hardDisk;
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync rc = a->virtualBox->GetHardDisk(uuid, hardDisk.asOutParam());
f6ae8a8ac76f00fb06168fcf2e28e9f4ae8ed438vboxsync /* not successful? Then it must be a filename */
f6ae8a8ac76f00fb06168fcf2e28e9f4ae8ed438vboxsync if (!hardDisk)
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync {
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync rc = a->virtualBox->FindHardDisk(Bstr(ValueUnion.psz), hardDisk.asOutParam());
f6ae8a8ac76f00fb06168fcf2e28e9f4ae8ed438vboxsync if (FAILED(rc))
f6ae8a8ac76f00fb06168fcf2e28e9f4ae8ed438vboxsync {
f6ae8a8ac76f00fb06168fcf2e28e9f4ae8ed438vboxsync /* open the new hard disk object */
f6ae8a8ac76f00fb06168fcf2e28e9f4ae8ed438vboxsync CHECK_ERROR(a->virtualBox,
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync OpenHardDisk(Bstr(ValueUnion.psz), AccessMode_ReadWrite,
f6ae8a8ac76f00fb06168fcf2e28e9f4ae8ed438vboxsync false, Bstr(""), false,
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync Bstr(""), hardDisk.asOutParam()));
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync }
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync }
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync if (hardDisk)
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync {
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync hardDisk->COMGETTER(Id)(uuid.asOutParam());
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync CHECK_ERROR(machine,
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync AttachDevice(Bstr("SATA"), GetOptState.uIndex,
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync 0, DeviceType_HardDisk, uuid));
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync }
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync else
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync rc = E_FAIL;
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync }
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync break;
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync }
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync case MODIFYVM_SATA: // deprecated
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync {
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync if (!strcmp(ValueUnion.psz, "on") || !strcmp(ValueUnion.psz, "enable"))
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync {
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync ComPtr<IStorageController> ctl;
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync CHECK_ERROR(machine, AddStorageController(Bstr("SATA"), StorageBus_SATA, ctl.asOutParam()));
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync CHECK_ERROR(ctl, COMSETTER(ControllerType)(StorageControllerType_IntelAhci));
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync }
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync else if (!strcmp(ValueUnion.psz, "off") || !strcmp(ValueUnion.psz, "disable"))
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync CHECK_ERROR(machine, RemoveStorageController(Bstr("SATA")));
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync else
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync return errorArgument("Invalid --usb argument '%s'", ValueUnion.psz);
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync break;
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync }
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync case MODIFYVM_SCSIPORT: // deprecated
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync {
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync if (!strcmp(ValueUnion.psz, "none"))
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync {
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync rc = machine->DetachDevice(Bstr("LsiLogic"), GetOptState.uIndex, 0);
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync if (FAILED(rc))
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync CHECK_ERROR(machine, DetachDevice(Bstr("BusLogic"), GetOptState.uIndex, 0));
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync }
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync else
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync {
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync /* first guess is that it's a UUID */
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync Bstr uuid(ValueUnion.psz);
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync ComPtr<IMedium> hardDisk;
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync rc = a->virtualBox->GetHardDisk(uuid, hardDisk.asOutParam());
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync /* not successful? Then it must be a filename */
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync if (!hardDisk)
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync {
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync rc = a->virtualBox->FindHardDisk(Bstr(ValueUnion.psz), hardDisk.asOutParam());
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync if (FAILED(rc))
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync {
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync /* open the new hard disk object */
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync CHECK_ERROR(a->virtualBox,
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync OpenHardDisk(Bstr(ValueUnion.psz),
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync AccessMode_ReadWrite, false, Bstr(""),
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync false, Bstr(""), hardDisk.asOutParam()));
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync }
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync }
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync if (hardDisk)
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync {
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync hardDisk->COMGETTER(Id)(uuid.asOutParam());
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync rc = machine->AttachDevice(Bstr("LsiLogic"), GetOptState.uIndex, 0, DeviceType_HardDisk, uuid);
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync if (FAILED(rc))
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync CHECK_ERROR(machine,
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync AttachDevice(Bstr("BusLogic"),
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync GetOptState.uIndex, 0,
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync DeviceType_HardDisk, uuid));
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync }
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync else
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync rc = E_FAIL;
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync }
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync break;
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync }
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync case MODIFYVM_SCSITYPE: // deprecated
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync {
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync ComPtr<IStorageController> ctl;
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync if (!RTStrICmp(ValueUnion.psz, "LsiLogic"))
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync {
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync rc = machine->RemoveStorageController(Bstr("BusLogic"));
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync if (FAILED(rc))
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync CHECK_ERROR(machine, RemoveStorageController(Bstr("LsiLogic")));
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync CHECK_ERROR(machine,
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync AddStorageController(Bstr("LsiLogic"),
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync StorageBus_SCSI,
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync ctl.asOutParam()));
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync if (SUCCEEDED(rc))
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync CHECK_ERROR(ctl, COMSETTER(ControllerType)(StorageControllerType_LsiLogic));
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync }
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync else if (!RTStrICmp(ValueUnion.psz, "BusLogic"))
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync {
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync rc = machine->RemoveStorageController(Bstr("LsiLogic"));
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync if (FAILED(rc))
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync CHECK_ERROR(machine, RemoveStorageController(Bstr("BusLogic")));
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync CHECK_ERROR(machine,
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync AddStorageController(Bstr("BusLogic"),
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync StorageBus_SCSI,
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync ctl.asOutParam()));
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync if (SUCCEEDED(rc))
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync CHECK_ERROR(ctl, COMSETTER(ControllerType)(StorageControllerType_BusLogic));
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync }
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync else
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync return errorArgument("Invalid --scsitype argument '%s'", ValueUnion.psz);
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync break;
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync }
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync case MODIFYVM_SCSI: // deprecated
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync {
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync if (!strcmp(ValueUnion.psz, "on") || !strcmp(ValueUnion.psz, "enable"))
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync {
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync ComPtr<IStorageController> ctl;
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync CHECK_ERROR(machine, AddStorageController(Bstr("BusLogic"), StorageBus_SCSI, ctl.asOutParam()));
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync if (SUCCEEDED(rc))
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync CHECK_ERROR(ctl, COMSETTER(ControllerType)(StorageControllerType_BusLogic));
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync }
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync else if (!strcmp(ValueUnion.psz, "off") || !strcmp(ValueUnion.psz, "disable"))
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync {
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync rc = machine->RemoveStorageController(Bstr("BusLogic"));
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync if (FAILED(rc))
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync CHECK_ERROR(machine, RemoveStorageController(Bstr("LsiLogic")));
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync }
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync break;
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync }
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync case MODIFYVM_DVDPASSTHROUGH: // deprecated
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync {
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync CHECK_ERROR(machine, PassthroughDevice(Bstr("IDE Controller"), 1, 0, !strcmp(ValueUnion.psz, "on")));
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync break;
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync }
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync case MODIFYVM_DVD: // deprecated
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync {
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync ComPtr<IMedium> dvdMedium;
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync Bstr uuid(ValueUnion.psz);
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync /* unmount? */
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync if (!strcmp(ValueUnion.psz, "none"))
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync {
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync /* nothing to do, NULL object will cause unmount */
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync }
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync /* host drive? */
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync else if (!strncmp(ValueUnion.psz, "host:", 5))
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync {
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync ComPtr<IHost> host;
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync CHECK_ERROR(a->virtualBox, COMGETTER(Host)(host.asOutParam()));
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync rc = host->FindHostDVDDrive(Bstr(ValueUnion.psz + 5), dvdMedium.asOutParam());
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync if (!dvdMedium)
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync {
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync /* 2nd try: try with the real name, important on Linux+libhal */
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync char szPathReal[RTPATH_MAX];
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync if (RT_FAILURE(RTPathReal(ValueUnion.psz + 5, szPathReal, sizeof(szPathReal))))
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync {
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync errorArgument("Invalid host DVD drive name \"%s\"", ValueUnion.psz + 5);
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync rc = E_FAIL;
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync break;
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync }
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync rc = host->FindHostDVDDrive(Bstr(szPathReal), dvdMedium.asOutParam());
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync if (!dvdMedium)
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync {
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync errorArgument("Invalid host DVD drive name \"%s\"", ValueUnion.psz + 5);
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync rc = E_FAIL;
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync break;
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync }
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync }
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync }
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync else
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync {
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync /* first assume it's a UUID */
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync rc = a->virtualBox->GetDVDImage(uuid, dvdMedium.asOutParam());
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync if (FAILED(rc) || !dvdMedium)
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync {
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync /* must be a filename, check if it's in the collection */
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync rc = a->virtualBox->FindDVDImage(Bstr(ValueUnion.psz), dvdMedium.asOutParam());
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync /* not registered, do that on the fly */
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync if (!dvdMedium)
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync {
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync Bstr emptyUUID;
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync CHECK_ERROR(a->virtualBox, OpenDVDImage(Bstr(ValueUnion.psz),
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync emptyUUID, dvdMedium.asOutParam()));
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync }
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync }
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync if (!dvdMedium)
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync {
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync rc = E_FAIL;
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync break;
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync }
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync }
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync /** @todo generalize this, allow arbitrary number of DVD drives
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync * and as a consequence multiple attachments and different
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync * storage controllers. */
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync if (dvdMedium)
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync dvdMedium->COMGETTER(Id)(uuid.asOutParam());
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync CHECK_ERROR(machine, MountMedium(Bstr("IDE Controller"), 1, 0, uuid, FALSE /* aForce */));
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync break;
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync }
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync case MODIFYVM_FLOPPY: // deprecated
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync {
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync Bstr uuid(ValueUnion.psz);
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync ComPtr<IMedium> floppyMedium;
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync ComPtr<IMediumAttachment> floppyAttachment;
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync machine->GetMediumAttachment(Bstr("Floppy Controller"), 0, 0, floppyAttachment.asOutParam());
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync /* disable? */
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync if (!strcmp(ValueUnion.psz, "disabled"))
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync {
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync /* disable the controller */
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync if (floppyAttachment)
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync CHECK_ERROR(machine, DetachDevice(Bstr("Floppy Controller"), 0, 0));
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync }
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync else
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync {
f6ae8a8ac76f00fb06168fcf2e28e9f4ae8ed438vboxsync /* enable the controller */
f6ae8a8ac76f00fb06168fcf2e28e9f4ae8ed438vboxsync if (!floppyAttachment)
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync CHECK_ERROR(machine, AttachDevice(Bstr("Floppy Controller"), 0, 0, DeviceType_Floppy, NULL));
f6ae8a8ac76f00fb06168fcf2e28e9f4ae8ed438vboxsync
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync /* unmount? */
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync if ( !strcmp(ValueUnion.psz, "none")
f6ae8a8ac76f00fb06168fcf2e28e9f4ae8ed438vboxsync || !strcmp(ValueUnion.psz, "empty")) // deprecated
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync {
99a5f7beff5f7bbf1f73923087d60070ddb717d4vboxsync /* nothing to do, NULL object will cause unmount */
f6ae8a8ac76f00fb06168fcf2e28e9f4ae8ed438vboxsync }
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync /* host drive? */
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync else if (!strncmp(ValueUnion.psz, "host:", 5))
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync {
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync ComPtr<IHost> host;
f6ae8a8ac76f00fb06168fcf2e28e9f4ae8ed438vboxsync CHECK_ERROR(a->virtualBox, COMGETTER(Host)(host.asOutParam()));
f6ae8a8ac76f00fb06168fcf2e28e9f4ae8ed438vboxsync rc = host->FindHostFloppyDrive(Bstr(ValueUnion.psz + 5), floppyMedium.asOutParam());
f6ae8a8ac76f00fb06168fcf2e28e9f4ae8ed438vboxsync if (!floppyMedium)
99a5f7beff5f7bbf1f73923087d60070ddb717d4vboxsync {
f6ae8a8ac76f00fb06168fcf2e28e9f4ae8ed438vboxsync errorArgument("Invalid host floppy drive name \"%s\"", ValueUnion.psz + 5);
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync rc = E_FAIL;
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync break;
f6ae8a8ac76f00fb06168fcf2e28e9f4ae8ed438vboxsync }
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync }
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync else
f6ae8a8ac76f00fb06168fcf2e28e9f4ae8ed438vboxsync {
f6ae8a8ac76f00fb06168fcf2e28e9f4ae8ed438vboxsync /* first assume it's a UUID */
f6ae8a8ac76f00fb06168fcf2e28e9f4ae8ed438vboxsync rc = a->virtualBox->GetFloppyImage(uuid, floppyMedium.asOutParam());
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync if (FAILED(rc) || !floppyMedium)
f6ae8a8ac76f00fb06168fcf2e28e9f4ae8ed438vboxsync {
f6ae8a8ac76f00fb06168fcf2e28e9f4ae8ed438vboxsync /* must be a filename, check if it's in the collection */
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync rc = a->virtualBox->FindFloppyImage(Bstr(ValueUnion.psz), floppyMedium.asOutParam());
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync /* not registered, do that on the fly */
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync if (!floppyMedium)
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync {
f6ae8a8ac76f00fb06168fcf2e28e9f4ae8ed438vboxsync Bstr emptyUUID;
f6ae8a8ac76f00fb06168fcf2e28e9f4ae8ed438vboxsync CHECK_ERROR(a->virtualBox,
f6ae8a8ac76f00fb06168fcf2e28e9f4ae8ed438vboxsync OpenFloppyImage(Bstr(ValueUnion.psz),
f6ae8a8ac76f00fb06168fcf2e28e9f4ae8ed438vboxsync emptyUUID,
f6ae8a8ac76f00fb06168fcf2e28e9f4ae8ed438vboxsync floppyMedium.asOutParam()));
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync }
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync }
3581dfd579fa647c95528b7f7d24740111a36903vboxsync if (!floppyMedium)
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync {
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync rc = E_FAIL;
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync break;
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync }
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync }
f6ae8a8ac76f00fb06168fcf2e28e9f4ae8ed438vboxsync floppyMedium->COMGETTER(Id)(uuid.asOutParam());
f6ae8a8ac76f00fb06168fcf2e28e9f4ae8ed438vboxsync CHECK_ERROR(machine, MountMedium(Bstr("Floppy Controller"), 0, 0, uuid, FALSE /* aForce */));
f6ae8a8ac76f00fb06168fcf2e28e9f4ae8ed438vboxsync }
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync break;
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync }
f6ae8a8ac76f00fb06168fcf2e28e9f4ae8ed438vboxsync
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync case MODIFYVM_NICTRACEFILE:
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync {
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync ComPtr<INetworkAdapter> nic;
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync CHECK_ERROR_BREAK(machine, GetNetworkAdapter(GetOptState.uIndex - 1, nic.asOutParam()));
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync ASSERT(nic);
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync CHECK_ERROR(nic, COMSETTER(TraceFile)(Bstr(ValueUnion.psz)));
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync break;
f6ae8a8ac76f00fb06168fcf2e28e9f4ae8ed438vboxsync }
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync case MODIFYVM_NICTRACE:
f6ae8a8ac76f00fb06168fcf2e28e9f4ae8ed438vboxsync {
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync ComPtr<INetworkAdapter> nic;
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync CHECK_ERROR_BREAK(machine, GetNetworkAdapter(GetOptState.uIndex - 1, nic.asOutParam()));
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync ASSERT(nic);
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync CHECK_ERROR(nic, COMSETTER(TraceEnabled)(ValueUnion.f));
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync break;
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync }
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync case MODIFYVM_NICTYPE:
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync {
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync ComPtr<INetworkAdapter> nic;
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync CHECK_ERROR_BREAK(machine, GetNetworkAdapter(GetOptState.uIndex - 1, nic.asOutParam()));
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync ASSERT(nic);
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync if (!strcmp(ValueUnion.psz, "Am79C970A"))
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync {
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync CHECK_ERROR(nic, COMSETTER(AdapterType)(NetworkAdapterType_Am79C970A));
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync }
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync else if (!strcmp(ValueUnion.psz, "Am79C973"))
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync {
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync CHECK_ERROR(nic, COMSETTER(AdapterType)(NetworkAdapterType_Am79C973));
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync }
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync#ifdef VBOX_WITH_E1000
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync else if (!strcmp(ValueUnion.psz, "82540EM"))
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync {
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync CHECK_ERROR(nic, COMSETTER(AdapterType)(NetworkAdapterType_I82540EM));
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync }
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync else if (!strcmp(ValueUnion.psz, "82543GC"))
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync {
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync CHECK_ERROR(nic, COMSETTER(AdapterType)(NetworkAdapterType_I82543GC));
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync }
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync else if (!strcmp(ValueUnion.psz, "82545EM"))
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync {
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync CHECK_ERROR(nic, COMSETTER(AdapterType)(NetworkAdapterType_I82545EM));
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync }
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync#endif
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync#ifdef VBOX_WITH_VIRTIO
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync else if (!strcmp(ValueUnion.psz, "virtio"))
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync {
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync CHECK_ERROR(nic, COMSETTER(AdapterType)(NetworkAdapterType_Virtio));
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync }
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync#endif /* VBOX_WITH_VIRTIO */
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync else
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync {
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync errorArgument("Invalid NIC type '%s' specified for NIC %u", ValueUnion.psz, GetOptState.uIndex);
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync rc = E_FAIL;
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync }
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync break;
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync }
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync case MODIFYVM_NICSPEED:
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync {
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync ComPtr<INetworkAdapter> nic;
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync CHECK_ERROR_BREAK(machine, GetNetworkAdapter(GetOptState.uIndex - 1, nic.asOutParam()));
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync ASSERT(nic);
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync CHECK_ERROR(nic, COMSETTER(LineSpeed)(ValueUnion.u32));
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync break;
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync }
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync case MODIFYVM_NIC:
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync {
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync ComPtr<INetworkAdapter> nic;
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync CHECK_ERROR_BREAK(machine, GetNetworkAdapter(GetOptState.uIndex - 1, nic.asOutParam()));
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync ASSERT(nic);
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync if (!strcmp(ValueUnion.psz, "none"))
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync {
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync CHECK_ERROR(nic, COMSETTER(Enabled)(FALSE));
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync }
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync else if (!strcmp(ValueUnion.psz, "null"))
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync {
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync CHECK_ERROR(nic, COMSETTER(Enabled)(TRUE));
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync CHECK_ERROR(nic, Detach());
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync }
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync else if (!strcmp(ValueUnion.psz, "nat"))
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync {
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync CHECK_ERROR(nic, COMSETTER(Enabled)(TRUE));
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync CHECK_ERROR(nic, AttachToNAT());
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync }
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync else if ( !strcmp(ValueUnion.psz, "bridged")
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync || !strcmp(ValueUnion.psz, "hostif")) /* backward compatibility */
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync {
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync CHECK_ERROR(nic, COMSETTER(Enabled)(TRUE));
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync CHECK_ERROR(nic, AttachToBridgedInterface());
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync }
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync else if (!strcmp(ValueUnion.psz, "intnet"))
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync {
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync CHECK_ERROR(nic, COMSETTER(Enabled)(TRUE));
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync CHECK_ERROR(nic, AttachToInternalNetwork());
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync }
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync#if defined(VBOX_WITH_NETFLT)
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync else if (!strcmp(ValueUnion.psz, "hostonly"))
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync {
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync CHECK_ERROR(nic, COMSETTER(Enabled)(TRUE));
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync CHECK_ERROR(nic, AttachToHostOnlyInterface());
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync }
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync#endif
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync else
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync {
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync errorArgument("Invalid type '%s' specfied for NIC %u", ValueUnion.psz, GetOptState.uIndex);
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync rc = E_FAIL;
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync }
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync break;
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync }
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync case MODIFYVM_CABLECONNECTED:
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync {
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync ComPtr<INetworkAdapter> nic;
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync CHECK_ERROR_BREAK(machine, GetNetworkAdapter(GetOptState.uIndex - 1, nic.asOutParam()));
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync ASSERT(nic);
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync CHECK_ERROR(nic, COMSETTER(CableConnected)(ValueUnion.f));
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync break;
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync }
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync case MODIFYVM_BRIDGEADAPTER:
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync case MODIFYVM_HOSTONLYADAPTER:
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync {
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync ComPtr<INetworkAdapter> nic;
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync CHECK_ERROR_BREAK(machine, GetNetworkAdapter(GetOptState.uIndex - 1, nic.asOutParam()));
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync ASSERT(nic);
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync /* remove it? */
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync if (!strcmp(ValueUnion.psz, "none"))
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync {
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync CHECK_ERROR(nic, COMSETTER(HostInterface)(NULL));
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync }
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync else
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync {
f6ae8a8ac76f00fb06168fcf2e28e9f4ae8ed438vboxsync CHECK_ERROR(nic, COMSETTER(HostInterface)(Bstr(ValueUnion.psz)));
f6ae8a8ac76f00fb06168fcf2e28e9f4ae8ed438vboxsync }
f6ae8a8ac76f00fb06168fcf2e28e9f4ae8ed438vboxsync break;
f6ae8a8ac76f00fb06168fcf2e28e9f4ae8ed438vboxsync }
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync case MODIFYVM_INTNET:
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync {
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync ComPtr<INetworkAdapter> nic;
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync CHECK_ERROR_BREAK(machine, GetNetworkAdapter(GetOptState.uIndex - 1, nic.asOutParam()));
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync ASSERT(nic);
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync /* remove it? */
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync if (!strcmp(ValueUnion.psz, "none"))
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync {
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync CHECK_ERROR(nic, COMSETTER(InternalNetwork)(NULL));
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync }
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync else
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync {
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync CHECK_ERROR(nic, COMSETTER(InternalNetwork)(Bstr(ValueUnion.psz)));
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync }
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync break;
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync }
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync case MODIFYVM_NATNET:
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync {
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync ComPtr<INetworkAdapter> nic;
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync CHECK_ERROR_BREAK(machine, GetNetworkAdapter(GetOptState.uIndex - 1, nic.asOutParam()));
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync ASSERT(nic);
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync CHECK_ERROR(nic, COMSETTER(NATNetwork)(Bstr(ValueUnion.psz)));
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync break;
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync }
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync case MODIFYVM_MACADDRESS:
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync {
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync ComPtr<INetworkAdapter> nic;
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync CHECK_ERROR_BREAK(machine, GetNetworkAdapter(GetOptState.uIndex - 1, nic.asOutParam()));
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync ASSERT(nic);
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync /* generate one? */
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync if (!strcmp(ValueUnion.psz, "auto"))
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync {
3581dfd579fa647c95528b7f7d24740111a36903vboxsync CHECK_ERROR(nic, COMSETTER(MACAddress)(NULL));
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync }
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync else
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync {
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync CHECK_ERROR(nic, COMSETTER(MACAddress)(Bstr(ValueUnion.psz)));
3581dfd579fa647c95528b7f7d24740111a36903vboxsync }
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync break;
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync }
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync
3581dfd579fa647c95528b7f7d24740111a36903vboxsync case MODIFYVM_HIDPTR:
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync {
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync bool fEnableUsb = false;
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync if (!strcmp(ValueUnion.psz, "ps2"))
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync {
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync CHECK_ERROR(machine, COMSETTER(PointingHidType)(PointingHidType_PS2Mouse));
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync }
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync else if (!strcmp(ValueUnion.psz, "usb"))
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync {
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync CHECK_ERROR(machine, COMSETTER(PointingHidType)(PointingHidType_USBMouse));
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync if (SUCCEEDED(rc))
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync fEnableUsb = true;
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync }
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync else if (!strcmp(ValueUnion.psz, "usbtablet"))
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync {
3581dfd579fa647c95528b7f7d24740111a36903vboxsync CHECK_ERROR(machine, COMSETTER(PointingHidType)(PointingHidType_USBTablet));
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync if (SUCCEEDED(rc))
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync fEnableUsb = true;
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync }
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync else
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync {
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync errorArgument("Invalid type '%s' specfied for pointing device", ValueUnion.psz);
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync rc = E_FAIL;
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync }
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync if (fEnableUsb)
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync {
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync /* Make sure the OHCI controller is enabled. */
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync ComPtr<IUSBController> UsbCtl;
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync rc = machine->COMGETTER(USBController)(UsbCtl.asOutParam());
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync if (SUCCEEDED(rc))
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync {
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync BOOL fEnabled;
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync rc = UsbCtl->COMGETTER(Enabled)(&fEnabled);
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync if (FAILED(rc))
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync fEnabled = false;
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync if (!fEnabled)
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync CHECK_ERROR(UsbCtl, COMSETTER(Enabled)(true));
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync }
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync }
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync break;
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync }
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync case MODIFYVM_HIDKBD:
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync {
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync bool fEnableUsb = false;
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync if (!strcmp(ValueUnion.psz, "ps2"))
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync {
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync CHECK_ERROR(machine, COMSETTER(KeyboardHidType)(KeyboardHidType_PS2Keyboard));
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync }
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync else if (!strcmp(ValueUnion.psz, "usb"))
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync {
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync CHECK_ERROR(machine, COMSETTER(KeyboardHidType)(KeyboardHidType_USBKeyboard));
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync if (SUCCEEDED(rc))
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync fEnableUsb = true;
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync }
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync else
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync {
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync errorArgument("Invalid type '%s' specfied for keyboard", ValueUnion.psz);
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync rc = E_FAIL;
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync }
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync if (fEnableUsb)
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync {
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync /* Make sure the OHCI controller is enabled. */
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync ComPtr<IUSBController> UsbCtl;
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync rc = machine->COMGETTER(USBController)(UsbCtl.asOutParam());
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync if (SUCCEEDED(rc))
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync {
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync BOOL fEnabled;
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync rc = UsbCtl->COMGETTER(Enabled)(&fEnabled);
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync if (FAILED(rc))
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync fEnabled = false;
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync if (!fEnabled)
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync CHECK_ERROR(UsbCtl, COMSETTER(Enabled)(true));
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync }
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync }
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync break;
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync }
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync case MODIFYVM_UARTMODE:
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync {
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync ComPtr<ISerialPort> uart;
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync char *pszIRQ = NULL;
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync CHECK_ERROR_BREAK(machine, GetSerialPort(GetOptState.uIndex - 1, uart.asOutParam()));
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync ASSERT(uart);
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync if (!strcmp(ValueUnion.psz, "disconnected"))
d97357e2036109245c83ba553d0290212e28ea40vboxsync {
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync CHECK_ERROR(uart, COMSETTER(HostMode)(PortMode_Disconnected));
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync }
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync else if ( !strcmp(ValueUnion.psz, "server")
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync || !strcmp(ValueUnion.psz, "client")
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync || !strcmp(ValueUnion.psz, "file"))
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync {
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync const char *pszMode = ValueUnion.psz;
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync int vrc = RTGetOptFetchValue(&GetOptState, &ValueUnion, RTGETOPT_REQ_STRING);
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync if (RT_FAILURE(vrc))
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync return errorSyntax(USAGE_MODIFYVM,
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync "Missing or Invalid argument to '%s'",
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync GetOptState.pDef->pszLong);
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync CHECK_ERROR(uart, COMSETTER(Path)(Bstr(ValueUnion.psz)));
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync if (!strcmp(pszMode, "server"))
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync {
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync CHECK_ERROR(uart, COMSETTER(HostMode)(PortMode_HostPipe));
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync CHECK_ERROR(uart, COMSETTER(Server)(TRUE));
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync }
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync else if (!strcmp(pszMode, "client"))
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync {
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync CHECK_ERROR(uart, COMSETTER(HostMode)(PortMode_HostPipe));
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync CHECK_ERROR(uart, COMSETTER(Server)(FALSE));
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync }
d97357e2036109245c83ba553d0290212e28ea40vboxsync else if (!strcmp(pszMode, "file"))
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync {
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync CHECK_ERROR(uart, COMSETTER(HostMode)(PortMode_RawFile));
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync }
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync }
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync else
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync {
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync CHECK_ERROR(uart, COMSETTER(Path)(Bstr(ValueUnion.psz)));
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync CHECK_ERROR(uart, COMSETTER(HostMode)(PortMode_HostDevice));
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync }
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync break;
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync }
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync case MODIFYVM_UART:
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync {
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync ComPtr<ISerialPort> uart;
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync CHECK_ERROR_BREAK(machine, GetSerialPort(GetOptState.uIndex - 1, uart.asOutParam()));
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync ASSERT(uart);
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync if (!strcmp(ValueUnion.psz, "off") || !strcmp(ValueUnion.psz, "disable"))
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync CHECK_ERROR(uart, COMSETTER(Enabled)(FALSE));
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync else
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync {
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync const char *pszIOBase = ValueUnion.psz;
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync uint32_t uVal = 0;
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync int vrc = RTGetOptFetchValue(&GetOptState, &ValueUnion, RTGETOPT_REQ_UINT32) != MODIFYVM_UART;
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync if (RT_FAILURE(vrc))
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync return errorSyntax(USAGE_MODIFYVM,
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync "Missing or Invalid argument to '%s'",
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync GetOptState.pDef->pszLong);
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync CHECK_ERROR(uart, COMSETTER(IRQ)(ValueUnion.u32));
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync vrc = RTStrToUInt32Ex(pszIOBase, NULL, 0, &uVal);
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync if (vrc != VINF_SUCCESS || uVal == 0)
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync return errorArgument("Error parsing UART I/O base '%s'", pszIOBase);
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync CHECK_ERROR(uart, COMSETTER(IOBase)(uVal));
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync CHECK_ERROR(uart, COMSETTER(Enabled)(TRUE));
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync }
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync break;
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync }
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync case MODIFYVM_GUESTSTATISTICSINTERVAL:
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync {
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync CHECK_ERROR(machine, COMSETTER(StatisticsUpdateInterval)(ValueUnion.u32));
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync break;
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync }
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync case MODIFYVM_GUESTMEMORYBALLOON:
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync {
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync CHECK_ERROR(machine, COMSETTER(MemoryBalloonSize)(ValueUnion.u32));
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync break;
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync }
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync case MODIFYVM_AUDIOCONTROLLER:
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync {
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync ComPtr<IAudioAdapter> audioAdapter;
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync machine->COMGETTER(AudioAdapter)(audioAdapter.asOutParam());
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync ASSERT(audioAdapter);
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync if (!strcmp(ValueUnion.psz, "sb16"))
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync CHECK_ERROR(audioAdapter, COMSETTER(AudioController)(AudioControllerType_SB16));
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync else if (!strcmp(ValueUnion.psz, "ac97"))
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync CHECK_ERROR(audioAdapter, COMSETTER(AudioController)(AudioControllerType_AC97));
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync else
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync {
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync errorArgument("Invalid --audiocontroller argument '%s'", ValueUnion.psz);
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync rc = E_FAIL;
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync }
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync break;
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync }
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync case MODIFYVM_AUDIO:
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync {
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync ComPtr<IAudioAdapter> audioAdapter;
d97357e2036109245c83ba553d0290212e28ea40vboxsync machine->COMGETTER(AudioAdapter)(audioAdapter.asOutParam());
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync ASSERT(audioAdapter);
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync /* disable? */
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync if (!strcmp(ValueUnion.psz, "none"))
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync {
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync CHECK_ERROR(audioAdapter, COMSETTER(Enabled)(false));
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync }
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync else if (!strcmp(ValueUnion.psz, "null"))
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync {
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync CHECK_ERROR(audioAdapter, COMSETTER(AudioDriver)(AudioDriverType_Null));
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync CHECK_ERROR(audioAdapter, COMSETTER(Enabled)(true));
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync }
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync#ifdef RT_OS_WINDOWS
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync#ifdef VBOX_WITH_WINMM
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync else if (!strcmp(ValueUnion.psz, "winmm"))
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync {
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync CHECK_ERROR(audioAdapter, COMSETTER(AudioDriver)(AudioDriverType_WinMM));
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync CHECK_ERROR(audioAdapter, COMSETTER(Enabled)(true));
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync }
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync#endif
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync else if (!strcmp(ValueUnion.psz, "dsound"))
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync {
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync CHECK_ERROR(audioAdapter, COMSETTER(AudioDriver)(AudioDriverType_DirectSound));
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync CHECK_ERROR(audioAdapter, COMSETTER(Enabled)(true));
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync }
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync#endif /* RT_OS_WINDOWS */
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync#ifdef RT_OS_LINUX
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync# ifdef VBOX_WITH_ALSA
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync else if (!strcmp(ValueUnion.psz, "alsa"))
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync {
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync CHECK_ERROR(audioAdapter, COMSETTER(AudioDriver)(AudioDriverType_ALSA));
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync CHECK_ERROR(audioAdapter, COMSETTER(Enabled)(true));
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync }
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync# endif
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync# ifdef VBOX_WITH_PULSE
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync else if (!strcmp(ValueUnion.psz, "pulse"))
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync {
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync CHECK_ERROR(audioAdapter, COMSETTER(AudioDriver)(AudioDriverType_Pulse));
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync CHECK_ERROR(audioAdapter, COMSETTER(Enabled)(true));
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync }
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync# endif
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync#endif /* !RT_OS_LINUX */
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync#ifdef RT_OS_SOLARIS
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync else if (!strcmp(ValueUnion.psz, "solaudio"))
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync {
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync CHECK_ERROR(audioAdapter, COMSETTER(AudioDriver)(AudioDriverType_SolAudio));
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync CHECK_ERROR(audioAdapter, COMSETTER(Enabled)(true));
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync }
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync#endif /* !RT_OS_SOLARIS */
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync#ifdef RT_OS_FREEBSD
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync else if (!strcmp(ValueUnion.psz, "oss"))
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync {
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync CHECK_ERROR(audioAdapter, COMSETTER(AudioDriver)(AudioDriverType_OSS));
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync CHECK_ERROR(audioAdapter, COMSETTER(Enabled)(true));
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync }
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync# ifdef VBOX_WITH_PULSE
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync else if (!strcmp(ValueUnion.psz, "pulse"))
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync {
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync CHECK_ERROR(audioAdapter, COMSETTER(AudioDriver)(AudioDriverType_Pulse));
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync CHECK_ERROR(audioAdapter, COMSETTER(Enabled)(true));
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync }
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync# endif
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync#endif /* !RT_OS_FREEBSD */
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync#ifdef RT_OS_DARWIN
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync else if (!strcmp(ValueUnion.psz, "coreaudio"))
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync {
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync CHECK_ERROR(audioAdapter, COMSETTER(AudioDriver)(AudioDriverType_CoreAudio));
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync CHECK_ERROR(audioAdapter, COMSETTER(Enabled)(true));
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync }
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync#endif /* !RT_OS_DARWIN */
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync# if defined(RT_OS_FREEBSD) || defined(RT_OS_LINUX) || defined(VBOX_WITH_SOLARIS_OSS)
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync else if (!strcmp(ValueUnion.psz, "oss"))
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync {
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync CHECK_ERROR(audioAdapter, COMSETTER(AudioDriver)(AudioDriverType_OSS));
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync CHECK_ERROR(audioAdapter, COMSETTER(Enabled)(true));
d97357e2036109245c83ba553d0290212e28ea40vboxsync }
d97357e2036109245c83ba553d0290212e28ea40vboxsync# endif
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync else
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync {
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync errorArgument("Invalid --audio argument '%s'", ValueUnion.psz);
d97357e2036109245c83ba553d0290212e28ea40vboxsync rc = E_FAIL;
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync }
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync break;
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync }
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync case MODIFYVM_CLIPBOARD:
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync {
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync if (!strcmp(ValueUnion.psz, "disabled"))
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync {
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync CHECK_ERROR(machine, COMSETTER(ClipboardMode)(ClipboardMode_Disabled));
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync }
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync else if (!strcmp(ValueUnion.psz, "hosttoguest"))
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync {
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync CHECK_ERROR(machine, COMSETTER(ClipboardMode)(ClipboardMode_HostToGuest));
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync }
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync else if (!strcmp(ValueUnion.psz, "guesttohost"))
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync {
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync CHECK_ERROR(machine, COMSETTER(ClipboardMode)(ClipboardMode_GuestToHost));
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync }
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync else if (!strcmp(ValueUnion.psz, "bidirectional"))
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync {
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync CHECK_ERROR(machine, COMSETTER(ClipboardMode)(ClipboardMode_Bidirectional));
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync }
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync else
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync {
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync errorArgument("Invalid --clipboard argument '%s'", ValueUnion.psz);
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync rc = E_FAIL;
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync }
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync break;
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync }
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync#ifdef VBOX_WITH_VRDP
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync case MODIFYVM_VRDPPORT:
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync {
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync ComPtr<IVRDPServer> vrdpServer;
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync machine->COMGETTER(VRDPServer)(vrdpServer.asOutParam());
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync ASSERT(vrdpServer);
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync if (!strcmp(ValueUnion.psz, "default"))
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync CHECK_ERROR(vrdpServer, COMSETTER(Ports)(Bstr("0")));
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync else
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync CHECK_ERROR(vrdpServer, COMSETTER(Ports)(Bstr(ValueUnion.psz)));
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync break;
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync }
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync case MODIFYVM_VRDPADDRESS:
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync {
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync ComPtr<IVRDPServer> vrdpServer;
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync machine->COMGETTER(VRDPServer)(vrdpServer.asOutParam());
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync ASSERT(vrdpServer);
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync CHECK_ERROR(vrdpServer, COMSETTER(NetAddress)(Bstr(ValueUnion.psz)));
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync break;
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync }
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync case MODIFYVM_VRDPAUTHTYPE:
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync {
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync ComPtr<IVRDPServer> vrdpServer;
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync machine->COMGETTER(VRDPServer)(vrdpServer.asOutParam());
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync ASSERT(vrdpServer);
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync if (!strcmp(ValueUnion.psz, "null"))
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync {
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync CHECK_ERROR(vrdpServer, COMSETTER(AuthType)(VRDPAuthType_Null));
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync }
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync else if (!strcmp(ValueUnion.psz, "external"))
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync {
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync CHECK_ERROR(vrdpServer, COMSETTER(AuthType)(VRDPAuthType_External));
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync }
d97357e2036109245c83ba553d0290212e28ea40vboxsync else if (!strcmp(ValueUnion.psz, "guest"))
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync {
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync CHECK_ERROR(vrdpServer, COMSETTER(AuthType)(VRDPAuthType_Guest));
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync }
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync else
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync {
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync errorArgument("Invalid --vrdpauthtype argument '%s'", ValueUnion.psz);
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync rc = E_FAIL;
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync }
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync break;
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync }
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync case MODIFYVM_VRDPMULTICON:
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync {
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync ComPtr<IVRDPServer> vrdpServer;
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync machine->COMGETTER(VRDPServer)(vrdpServer.asOutParam());
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync ASSERT(vrdpServer);
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync CHECK_ERROR(vrdpServer, COMSETTER(AllowMultiConnection)(ValueUnion.f));
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync break;
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync }
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync case MODIFYVM_VRDPREUSECON:
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync {
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync ComPtr<IVRDPServer> vrdpServer;
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync machine->COMGETTER(VRDPServer)(vrdpServer.asOutParam());
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync ASSERT(vrdpServer);
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync CHECK_ERROR(vrdpServer, COMSETTER(ReuseSingleConnection)(ValueUnion.f));
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync break;
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync }
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync case MODIFYVM_VRDP:
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync {
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync ComPtr<IVRDPServer> vrdpServer;
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync machine->COMGETTER(VRDPServer)(vrdpServer.asOutParam());
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync ASSERT(vrdpServer);
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync CHECK_ERROR(vrdpServer, COMSETTER(Enabled)(ValueUnion.f));
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync break;
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync }
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync#endif /* VBOX_WITH_VRDP */
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync case MODIFYVM_USBEHCI:
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync {
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync ComPtr<IUSBController> UsbCtl;
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync CHECK_ERROR(machine, COMGETTER(USBController)(UsbCtl.asOutParam()));
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync if (SUCCEEDED(rc))
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync CHECK_ERROR(UsbCtl, COMSETTER(EnabledEhci)(ValueUnion.f));
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync break;
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync }
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync case MODIFYVM_USB:
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync {
d97357e2036109245c83ba553d0290212e28ea40vboxsync ComPtr<IUSBController> UsbCtl;
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync CHECK_ERROR(machine, COMGETTER(USBController)(UsbCtl.asOutParam()));
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync if (SUCCEEDED(rc))
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync CHECK_ERROR(UsbCtl, COMSETTER(Enabled)(ValueUnion.f));
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync break;
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync }
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync case MODIFYVM_SNAPSHOTFOLDER:
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync {
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync if (!strcmp(ValueUnion.psz, "default"))
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync CHECK_ERROR(machine, COMSETTER(SnapshotFolder)(NULL));
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync else
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync CHECK_ERROR(machine, COMSETTER(SnapshotFolder)(Bstr(ValueUnion.psz)));
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync break;
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync }
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync case MODIFYVM_TELEPORTER_ENABLED:
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync {
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync CHECK_ERROR(machine, COMSETTER(TeleporterEnabled)(ValueUnion.f));
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync break;
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync }
f6ae8a8ac76f00fb06168fcf2e28e9f4ae8ed438vboxsync
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync case MODIFYVM_TELEPORTER_PORT:
d97357e2036109245c83ba553d0290212e28ea40vboxsync {
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync CHECK_ERROR(machine, COMSETTER(TeleporterPort)(ValueUnion.u32));
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync break;
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync }
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync case MODIFYVM_TELEPORTER_ADDRESS:
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync {
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync CHECK_ERROR(machine, COMSETTER(TeleporterAddress)(Bstr(ValueUnion.psz)));
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync break;
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync }
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync case MODIFYVM_TELEPORTER_PASSWORD:
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync {
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync CHECK_ERROR(machine, COMSETTER(TeleporterPassword)(Bstr(ValueUnion.psz)));
f6ae8a8ac76f00fb06168fcf2e28e9f4ae8ed438vboxsync break;
f6ae8a8ac76f00fb06168fcf2e28e9f4ae8ed438vboxsync }
f6ae8a8ac76f00fb06168fcf2e28e9f4ae8ed438vboxsync
f6ae8a8ac76f00fb06168fcf2e28e9f4ae8ed438vboxsync case MODIFYVM_HARDWARE_UUID:
f6ae8a8ac76f00fb06168fcf2e28e9f4ae8ed438vboxsync {
f6ae8a8ac76f00fb06168fcf2e28e9f4ae8ed438vboxsync CHECK_ERROR(machine, COMSETTER(HardwareUUID)(Bstr(ValueUnion.psz)));
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync break;
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync }
f6ae8a8ac76f00fb06168fcf2e28e9f4ae8ed438vboxsync
f6ae8a8ac76f00fb06168fcf2e28e9f4ae8ed438vboxsync case MODIFYVM_HPET:
d97357e2036109245c83ba553d0290212e28ea40vboxsync {
f6ae8a8ac76f00fb06168fcf2e28e9f4ae8ed438vboxsync CHECK_ERROR(machine, COMSETTER(HpetEnabled)(ValueUnion.f));
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync break;
f6ae8a8ac76f00fb06168fcf2e28e9f4ae8ed438vboxsync }
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync case MODIFYVM_IOMGR:
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync {
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync if (!strcmp(ValueUnion.psz, "simple"))
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync CHECK_ERROR(machine, COMSETTER(IoMgr)(IoMgrType_Simple));
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync else if (!strcmp(ValueUnion.psz, "async"))
f6ae8a8ac76f00fb06168fcf2e28e9f4ae8ed438vboxsync CHECK_ERROR(machine, COMSETTER(IoMgr)(IoMgrType_Async));
f6ae8a8ac76f00fb06168fcf2e28e9f4ae8ed438vboxsync else
f6ae8a8ac76f00fb06168fcf2e28e9f4ae8ed438vboxsync {
f6ae8a8ac76f00fb06168fcf2e28e9f4ae8ed438vboxsync errorArgument("Invalid --iomgr argument '%s'", ValueUnion.psz);
f6ae8a8ac76f00fb06168fcf2e28e9f4ae8ed438vboxsync rc = E_FAIL;
f6ae8a8ac76f00fb06168fcf2e28e9f4ae8ed438vboxsync }
f6ae8a8ac76f00fb06168fcf2e28e9f4ae8ed438vboxsync break;
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync }
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync
f6ae8a8ac76f00fb06168fcf2e28e9f4ae8ed438vboxsync case MODIFYVM_IOBACKEND:
f6ae8a8ac76f00fb06168fcf2e28e9f4ae8ed438vboxsync {
d97357e2036109245c83ba553d0290212e28ea40vboxsync if (!strcmp(ValueUnion.psz, "buffered"))
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync CHECK_ERROR(machine, COMSETTER(IoBackend)(IoBackendType_Buffered));
f6ae8a8ac76f00fb06168fcf2e28e9f4ae8ed438vboxsync else if (!strcmp(ValueUnion.psz, "async"))
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync CHECK_ERROR(machine, COMSETTER(IoBackend)(IoBackendType_Unbuffered));
f6ae8a8ac76f00fb06168fcf2e28e9f4ae8ed438vboxsync else
f6ae8a8ac76f00fb06168fcf2e28e9f4ae8ed438vboxsync {
f6ae8a8ac76f00fb06168fcf2e28e9f4ae8ed438vboxsync errorArgument("Invalid --iobackend argument '%s'", ValueUnion.psz);
f6ae8a8ac76f00fb06168fcf2e28e9f4ae8ed438vboxsync rc = E_FAIL;
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync }
f6ae8a8ac76f00fb06168fcf2e28e9f4ae8ed438vboxsync break;
f6ae8a8ac76f00fb06168fcf2e28e9f4ae8ed438vboxsync }
f6ae8a8ac76f00fb06168fcf2e28e9f4ae8ed438vboxsync
f6ae8a8ac76f00fb06168fcf2e28e9f4ae8ed438vboxsync case MODIFYVM_IOCACHE:
f6ae8a8ac76f00fb06168fcf2e28e9f4ae8ed438vboxsync {
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync CHECK_ERROR(machine, COMSETTER(IoCacheEnabled)(ValueUnion.f));
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync break;
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync }
f6ae8a8ac76f00fb06168fcf2e28e9f4ae8ed438vboxsync
f6ae8a8ac76f00fb06168fcf2e28e9f4ae8ed438vboxsync case MODIFYVM_IOCACHESIZE:
f6ae8a8ac76f00fb06168fcf2e28e9f4ae8ed438vboxsync {
f6ae8a8ac76f00fb06168fcf2e28e9f4ae8ed438vboxsync CHECK_ERROR(machine, COMSETTER(IoCacheSize)(ValueUnion.u32));
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync break;
f6ae8a8ac76f00fb06168fcf2e28e9f4ae8ed438vboxsync }
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync case MODIFYVM_IOBANDWIDTHMAX:
f6ae8a8ac76f00fb06168fcf2e28e9f4ae8ed438vboxsync {
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync CHECK_ERROR(machine, COMSETTER(IoBandwidthMax)(ValueUnion.u32));
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync break;
f6ae8a8ac76f00fb06168fcf2e28e9f4ae8ed438vboxsync }
f6ae8a8ac76f00fb06168fcf2e28e9f4ae8ed438vboxsync
f6ae8a8ac76f00fb06168fcf2e28e9f4ae8ed438vboxsync default:
f6ae8a8ac76f00fb06168fcf2e28e9f4ae8ed438vboxsync {
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync errorGetOpt(USAGE_MODIFYVM, c, &ValueUnion);
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync rc = E_FAIL;
f6ae8a8ac76f00fb06168fcf2e28e9f4ae8ed438vboxsync break;
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync }
f6ae8a8ac76f00fb06168fcf2e28e9f4ae8ed438vboxsync }
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync }
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync /* commit changes */
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync if (SUCCEEDED(rc))
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync CHECK_ERROR(machine, SaveSettings());
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync /* it's important to always close sessions */
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync a->session->Close();
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync return SUCCEEDED(rc) ? 0 : 1;
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync}
f6ae8a8ac76f00fb06168fcf2e28e9f4ae8ed438vboxsync
3331475701a5b12f98b3cfea07d5dca60072530fvboxsync#endif /* !VBOX_ONLY_DOCS */
d97357e2036109245c83ba553d0290212e28ea40vboxsync