VBoxManageModifyVM.cpp revision 9e4ea89b1085fdaa5861e45a729d9c978db1a8f1
9ad572a3ac0fd3845a9abecfbf41e8db9b3a5cf0vboxsync/* $Id$ */
71c8a528203c289a8585ce10ac6bafc4274058c6vboxsync/** @file
adf2bcd2e5d07d5a11553b88e147c1f4b2249bffvboxsync * VBoxManage - Implementation of modifyvm command.
71c8a528203c289a8585ce10ac6bafc4274058c6vboxsync */
71c8a528203c289a8585ce10ac6bafc4274058c6vboxsync
71c8a528203c289a8585ce10ac6bafc4274058c6vboxsync/*
71c8a528203c289a8585ce10ac6bafc4274058c6vboxsync * Copyright (C) 2006-2009 Sun Microsystems, Inc.
71c8a528203c289a8585ce10ac6bafc4274058c6vboxsync *
71c8a528203c289a8585ce10ac6bafc4274058c6vboxsync * This file is part of VirtualBox Open Source Edition (OSE), as
71c8a528203c289a8585ce10ac6bafc4274058c6vboxsync * available from http://www.virtualbox.org. This file is free software;
71c8a528203c289a8585ce10ac6bafc4274058c6vboxsync * you can redistribute it and/or modify it under the terms of the GNU
71c8a528203c289a8585ce10ac6bafc4274058c6vboxsync * General Public License (GPL) as published by the Free Software
71c8a528203c289a8585ce10ac6bafc4274058c6vboxsync * Foundation, in version 2 as it comes in the "COPYING" file of the
71c8a528203c289a8585ce10ac6bafc4274058c6vboxsync * VirtualBox OSE distribution. VirtualBox OSE is distributed in the
71c8a528203c289a8585ce10ac6bafc4274058c6vboxsync * hope that it will be useful, but WITHOUT ANY WARRANTY of any kind.
71c8a528203c289a8585ce10ac6bafc4274058c6vboxsync *
71c8a528203c289a8585ce10ac6bafc4274058c6vboxsync * Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa
71c8a528203c289a8585ce10ac6bafc4274058c6vboxsync * Clara, CA 95054 USA or visit http://www.sun.com if you need
71c8a528203c289a8585ce10ac6bafc4274058c6vboxsync * additional information or have any questions.
71c8a528203c289a8585ce10ac6bafc4274058c6vboxsync */
71c8a528203c289a8585ce10ac6bafc4274058c6vboxsync
71c8a528203c289a8585ce10ac6bafc4274058c6vboxsync/*******************************************************************************
71c8a528203c289a8585ce10ac6bafc4274058c6vboxsync* Header Files *
71c8a528203c289a8585ce10ac6bafc4274058c6vboxsync*******************************************************************************/
71c8a528203c289a8585ce10ac6bafc4274058c6vboxsync#ifndef VBOX_ONLY_DOCS
71c8a528203c289a8585ce10ac6bafc4274058c6vboxsync#include <VBox/com/com.h>
70bb61ea2f96e80150e807529ce5df435607706bvboxsync#include <VBox/com/array.h>
71c8a528203c289a8585ce10ac6bafc4274058c6vboxsync#include <VBox/com/ErrorInfo.h>
23179f1443b03947d85eccc81cbc6b5153a4abf3vboxsync#include <VBox/com/errorprint.h>
71c8a528203c289a8585ce10ac6bafc4274058c6vboxsync#include <VBox/com/EventQueue.h>
71c8a528203c289a8585ce10ac6bafc4274058c6vboxsync
71c8a528203c289a8585ce10ac6bafc4274058c6vboxsync#include <VBox/com/VirtualBox.h>
71c8a528203c289a8585ce10ac6bafc4274058c6vboxsync
71c8a528203c289a8585ce10ac6bafc4274058c6vboxsync#include <vector>
71c8a528203c289a8585ce10ac6bafc4274058c6vboxsync#include <list>
71c8a528203c289a8585ce10ac6bafc4274058c6vboxsync#endif /* !VBOX_ONLY_DOCS */
71c8a528203c289a8585ce10ac6bafc4274058c6vboxsync
71c8a528203c289a8585ce10ac6bafc4274058c6vboxsync#include <iprt/cidr.h>
71c8a528203c289a8585ce10ac6bafc4274058c6vboxsync#include <iprt/param.h>
71c8a528203c289a8585ce10ac6bafc4274058c6vboxsync#include <iprt/path.h>
71c8a528203c289a8585ce10ac6bafc4274058c6vboxsync#include <iprt/stream.h>
71c8a528203c289a8585ce10ac6bafc4274058c6vboxsync#include <iprt/string.h>
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync#include <iprt/getopt.h>
71c8a528203c289a8585ce10ac6bafc4274058c6vboxsync#include <VBox/log.h>
71c8a528203c289a8585ce10ac6bafc4274058c6vboxsync
71c8a528203c289a8585ce10ac6bafc4274058c6vboxsync#include "VBoxManage.h"
71c8a528203c289a8585ce10ac6bafc4274058c6vboxsync
71c8a528203c289a8585ce10ac6bafc4274058c6vboxsync#ifndef VBOX_ONLY_DOCS
71c8a528203c289a8585ce10ac6bafc4274058c6vboxsyncusing namespace com;
71c8a528203c289a8585ce10ac6bafc4274058c6vboxsync
71c8a528203c289a8585ce10ac6bafc4274058c6vboxsync
71c8a528203c289a8585ce10ac6bafc4274058c6vboxsync/** @todo refine this after HDD changes; MSC 8.0/64 has trouble with handleModifyVM. */
71c8a528203c289a8585ce10ac6bafc4274058c6vboxsync#if defined(_MSC_VER)
71c8a528203c289a8585ce10ac6bafc4274058c6vboxsync# pragma optimize("g", off)
71c8a528203c289a8585ce10ac6bafc4274058c6vboxsync#endif
71c8a528203c289a8585ce10ac6bafc4274058c6vboxsync
9e4ea89b1085fdaa5861e45a729d9c978db1a8f1vboxsyncenum
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync{
9e4ea89b1085fdaa5861e45a729d9c978db1a8f1vboxsync MODIFYVM_NAME = 1000,
9e4ea89b1085fdaa5861e45a729d9c978db1a8f1vboxsync MODIFYVM_OSTYPE,
9e4ea89b1085fdaa5861e45a729d9c978db1a8f1vboxsync MODIFYVM_MEMORY,
9e4ea89b1085fdaa5861e45a729d9c978db1a8f1vboxsync MODIFYVM_VRAM,
9e4ea89b1085fdaa5861e45a729d9c978db1a8f1vboxsync MODIFYVM_FIRMWARE,
9e4ea89b1085fdaa5861e45a729d9c978db1a8f1vboxsync MODIFYVM_ACPI,
9e4ea89b1085fdaa5861e45a729d9c978db1a8f1vboxsync MODIFYVM_IOAPIC,
9e4ea89b1085fdaa5861e45a729d9c978db1a8f1vboxsync MODIFYVM_PAE,
9e4ea89b1085fdaa5861e45a729d9c978db1a8f1vboxsync MODIFYVM_SYNTHCPU,
9e4ea89b1085fdaa5861e45a729d9c978db1a8f1vboxsync MODIFYVM_HWVIRTEX,
9e4ea89b1085fdaa5861e45a729d9c978db1a8f1vboxsync MODIFYVM_HWVIRTEXEXCLUSIVE,
9e4ea89b1085fdaa5861e45a729d9c978db1a8f1vboxsync MODIFYVM_NESTEDPAGING,
9e4ea89b1085fdaa5861e45a729d9c978db1a8f1vboxsync MODIFYVM_VTXVPID,
9e4ea89b1085fdaa5861e45a729d9c978db1a8f1vboxsync MODIFYVM_CPUS,
9e4ea89b1085fdaa5861e45a729d9c978db1a8f1vboxsync MODIFYVM_MONITORCOUNT,
9e4ea89b1085fdaa5861e45a729d9c978db1a8f1vboxsync MODIFYVM_ACCELERATE3D,
9e4ea89b1085fdaa5861e45a729d9c978db1a8f1vboxsync MODIFYVM_ACCELERATE2DVIDEO,
9e4ea89b1085fdaa5861e45a729d9c978db1a8f1vboxsync MODIFYVM_BIOSLOGOFADEIN,
9e4ea89b1085fdaa5861e45a729d9c978db1a8f1vboxsync MODIFYVM_BIOSLOGOFADEOUT,
9e4ea89b1085fdaa5861e45a729d9c978db1a8f1vboxsync MODIFYVM_BIOSLOGODISPLAYTIME,
9e4ea89b1085fdaa5861e45a729d9c978db1a8f1vboxsync MODIFYVM_BIOSLOGOIMAGEPATH,
9e4ea89b1085fdaa5861e45a729d9c978db1a8f1vboxsync MODIFYVM_BIOSBOOTMENU,
9e4ea89b1085fdaa5861e45a729d9c978db1a8f1vboxsync MODIFYVM_BIOSSYSTEMTIMEOFFSET,
9e4ea89b1085fdaa5861e45a729d9c978db1a8f1vboxsync MODIFYVM_BIOSPXEDEBUG,
9e4ea89b1085fdaa5861e45a729d9c978db1a8f1vboxsync MODIFYVM_BOOT,
9e4ea89b1085fdaa5861e45a729d9c978db1a8f1vboxsync MODIFYVM_HDA,
9e4ea89b1085fdaa5861e45a729d9c978db1a8f1vboxsync MODIFYVM_HDB,
9e4ea89b1085fdaa5861e45a729d9c978db1a8f1vboxsync MODIFYVM_HDD,
9e4ea89b1085fdaa5861e45a729d9c978db1a8f1vboxsync MODIFYVM_IDECONTROLLER,
9e4ea89b1085fdaa5861e45a729d9c978db1a8f1vboxsync MODIFYVM_SATAIDEEMULATION,
9e4ea89b1085fdaa5861e45a729d9c978db1a8f1vboxsync MODIFYVM_SATAPORTCOUNT,
9e4ea89b1085fdaa5861e45a729d9c978db1a8f1vboxsync MODIFYVM_SATAPORT,
9e4ea89b1085fdaa5861e45a729d9c978db1a8f1vboxsync MODIFYVM_SATA,
9e4ea89b1085fdaa5861e45a729d9c978db1a8f1vboxsync MODIFYVM_SCSIPORT,
9e4ea89b1085fdaa5861e45a729d9c978db1a8f1vboxsync MODIFYVM_SCSITYPE,
9e4ea89b1085fdaa5861e45a729d9c978db1a8f1vboxsync MODIFYVM_SCSI,
9e4ea89b1085fdaa5861e45a729d9c978db1a8f1vboxsync MODIFYVM_DVDPASSTHROUGH,
9e4ea89b1085fdaa5861e45a729d9c978db1a8f1vboxsync MODIFYVM_DVD,
9e4ea89b1085fdaa5861e45a729d9c978db1a8f1vboxsync MODIFYVM_FLOPPY,
9e4ea89b1085fdaa5861e45a729d9c978db1a8f1vboxsync MODIFYVM_NICTRACEFILE,
9e4ea89b1085fdaa5861e45a729d9c978db1a8f1vboxsync MODIFYVM_NICTRACE,
9e4ea89b1085fdaa5861e45a729d9c978db1a8f1vboxsync MODIFYVM_NICTYPE,
9e4ea89b1085fdaa5861e45a729d9c978db1a8f1vboxsync MODIFYVM_NICSPEED,
9e4ea89b1085fdaa5861e45a729d9c978db1a8f1vboxsync MODIFYVM_NIC,
9e4ea89b1085fdaa5861e45a729d9c978db1a8f1vboxsync MODIFYVM_CABLECONNECTED,
9e4ea89b1085fdaa5861e45a729d9c978db1a8f1vboxsync MODIFYVM_BRIDGEADAPTER,
9e4ea89b1085fdaa5861e45a729d9c978db1a8f1vboxsync MODIFYVM_HOSTONLYADAPTER,
9e4ea89b1085fdaa5861e45a729d9c978db1a8f1vboxsync MODIFYVM_INTNET,
9e4ea89b1085fdaa5861e45a729d9c978db1a8f1vboxsync MODIFYVM_NATNET,
9e4ea89b1085fdaa5861e45a729d9c978db1a8f1vboxsync MODIFYVM_MACADDRESS,
9e4ea89b1085fdaa5861e45a729d9c978db1a8f1vboxsync MODIFYVM_UARTMODE,
9e4ea89b1085fdaa5861e45a729d9c978db1a8f1vboxsync MODIFYVM_UART,
9e4ea89b1085fdaa5861e45a729d9c978db1a8f1vboxsync MODIFYVM_GUESTSTATISTICSINTERVAL,
9e4ea89b1085fdaa5861e45a729d9c978db1a8f1vboxsync MODIFYVM_GUESTMEMORYBALLOON,
9e4ea89b1085fdaa5861e45a729d9c978db1a8f1vboxsync MODIFYVM_AUDIOCONTROLLER,
9e4ea89b1085fdaa5861e45a729d9c978db1a8f1vboxsync MODIFYVM_AUDIO,
9e4ea89b1085fdaa5861e45a729d9c978db1a8f1vboxsync MODIFYVM_CLIPBOARD,
9e4ea89b1085fdaa5861e45a729d9c978db1a8f1vboxsync MODIFYVM_VRDPPORT,
9e4ea89b1085fdaa5861e45a729d9c978db1a8f1vboxsync MODIFYVM_VRDPADDRESS,
9e4ea89b1085fdaa5861e45a729d9c978db1a8f1vboxsync MODIFYVM_VRDPAUTHTYPE,
9e4ea89b1085fdaa5861e45a729d9c978db1a8f1vboxsync MODIFYVM_VRDPMULTICON,
9e4ea89b1085fdaa5861e45a729d9c978db1a8f1vboxsync MODIFYVM_VRDPREUSECON,
9e4ea89b1085fdaa5861e45a729d9c978db1a8f1vboxsync MODIFYVM_VRDP,
9e4ea89b1085fdaa5861e45a729d9c978db1a8f1vboxsync MODIFYVM_USBEHCI,
9e4ea89b1085fdaa5861e45a729d9c978db1a8f1vboxsync MODIFYVM_USB,
9e4ea89b1085fdaa5861e45a729d9c978db1a8f1vboxsync MODIFYVM_SNAPSHOTFOLDER,
9e4ea89b1085fdaa5861e45a729d9c978db1a8f1vboxsync MODIFYVM_TELEPORTER_ENABLED,
9e4ea89b1085fdaa5861e45a729d9c978db1a8f1vboxsync MODIFYVM_TELEPORTER_PORT,
9e4ea89b1085fdaa5861e45a729d9c978db1a8f1vboxsync MODIFYVM_TELEPORTER_ADDRESS,
9e4ea89b1085fdaa5861e45a729d9c978db1a8f1vboxsync MODIFYVM_TELEPORTER_PASSWORD
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync};
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsyncstatic const RTGETOPTDEF g_aModifyVMOptions[] =
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync{
9e4ea89b1085fdaa5861e45a729d9c978db1a8f1vboxsync { "--name", MODIFYVM_NAME, RTGETOPT_REQ_STRING },
9e4ea89b1085fdaa5861e45a729d9c978db1a8f1vboxsync { "--ostype", MODIFYVM_OSTYPE, RTGETOPT_REQ_STRING },
9e4ea89b1085fdaa5861e45a729d9c978db1a8f1vboxsync { "--memory", MODIFYVM_MEMORY, RTGETOPT_REQ_UINT32 },
9e4ea89b1085fdaa5861e45a729d9c978db1a8f1vboxsync { "--vram", MODIFYVM_VRAM, RTGETOPT_REQ_UINT32 },
9e4ea89b1085fdaa5861e45a729d9c978db1a8f1vboxsync { "--firmware", MODIFYVM_FIRMWARE, RTGETOPT_REQ_STRING },
9e4ea89b1085fdaa5861e45a729d9c978db1a8f1vboxsync { "--acpi", MODIFYVM_ACPI, RTGETOPT_REQ_STRING },
9e4ea89b1085fdaa5861e45a729d9c978db1a8f1vboxsync { "--ioapic", MODIFYVM_IOAPIC, RTGETOPT_REQ_STRING },
9e4ea89b1085fdaa5861e45a729d9c978db1a8f1vboxsync { "--pae", MODIFYVM_PAE, RTGETOPT_REQ_STRING },
9e4ea89b1085fdaa5861e45a729d9c978db1a8f1vboxsync { "--synthcpu", MODIFYVM_SYNTHCPU, RTGETOPT_REQ_STRING },
9e4ea89b1085fdaa5861e45a729d9c978db1a8f1vboxsync { "--hwvirtex", MODIFYVM_HWVIRTEX, RTGETOPT_REQ_STRING },
9e4ea89b1085fdaa5861e45a729d9c978db1a8f1vboxsync { "--hwvirtexexcl", MODIFYVM_HWVIRTEXEXCLUSIVE, RTGETOPT_REQ_STRING },
9e4ea89b1085fdaa5861e45a729d9c978db1a8f1vboxsync { "--nestedpaging", MODIFYVM_NESTEDPAGING, RTGETOPT_REQ_STRING },
9e4ea89b1085fdaa5861e45a729d9c978db1a8f1vboxsync { "--vtxvpid", MODIFYVM_VTXVPID, RTGETOPT_REQ_STRING },
9e4ea89b1085fdaa5861e45a729d9c978db1a8f1vboxsync { "--cpus", MODIFYVM_CPUS, RTGETOPT_REQ_UINT32 },
9e4ea89b1085fdaa5861e45a729d9c978db1a8f1vboxsync { "--monitorcount", MODIFYVM_MONITORCOUNT, RTGETOPT_REQ_UINT32 },
9e4ea89b1085fdaa5861e45a729d9c978db1a8f1vboxsync { "--accelerate3d", MODIFYVM_ACCELERATE3D, RTGETOPT_REQ_STRING },
9e4ea89b1085fdaa5861e45a729d9c978db1a8f1vboxsync { "--accelerate2dvideo", MODIFYVM_ACCELERATE2DVIDEO, RTGETOPT_REQ_STRING },
9e4ea89b1085fdaa5861e45a729d9c978db1a8f1vboxsync { "--bioslogofadein", MODIFYVM_BIOSLOGOFADEIN, RTGETOPT_REQ_STRING },
9e4ea89b1085fdaa5861e45a729d9c978db1a8f1vboxsync { "--bioslogofadeout", MODIFYVM_BIOSLOGOFADEOUT, RTGETOPT_REQ_STRING },
9e4ea89b1085fdaa5861e45a729d9c978db1a8f1vboxsync { "--bioslogodisplaytime", MODIFYVM_BIOSLOGODISPLAYTIME, RTGETOPT_REQ_UINT64 },
9e4ea89b1085fdaa5861e45a729d9c978db1a8f1vboxsync { "--bioslogoimagepath", MODIFYVM_BIOSLOGOIMAGEPATH, RTGETOPT_REQ_STRING },
9e4ea89b1085fdaa5861e45a729d9c978db1a8f1vboxsync { "--biosbootmenu", MODIFYVM_BIOSBOOTMENU, RTGETOPT_REQ_STRING },
9e4ea89b1085fdaa5861e45a729d9c978db1a8f1vboxsync { "--biossystemtimeoffset", MODIFYVM_BIOSSYSTEMTIMEOFFSET, RTGETOPT_REQ_UINT64 },
9e4ea89b1085fdaa5861e45a729d9c978db1a8f1vboxsync { "--biospxedebug", MODIFYVM_BIOSPXEDEBUG, RTGETOPT_REQ_STRING },
9e4ea89b1085fdaa5861e45a729d9c978db1a8f1vboxsync { "--boot", MODIFYVM_BOOT, RTGETOPT_REQ_STRING | RTGETOPT_FLAG_INDEX },
9e4ea89b1085fdaa5861e45a729d9c978db1a8f1vboxsync { "--hda", MODIFYVM_HDA, RTGETOPT_REQ_STRING },
9e4ea89b1085fdaa5861e45a729d9c978db1a8f1vboxsync { "--hdb", MODIFYVM_HDB, RTGETOPT_REQ_STRING },
9e4ea89b1085fdaa5861e45a729d9c978db1a8f1vboxsync { "--hdd", MODIFYVM_HDD, RTGETOPT_REQ_STRING },
9e4ea89b1085fdaa5861e45a729d9c978db1a8f1vboxsync { "--idecontroller", MODIFYVM_IDECONTROLLER, RTGETOPT_REQ_STRING },
9e4ea89b1085fdaa5861e45a729d9c978db1a8f1vboxsync { "--sataideemulation", MODIFYVM_SATAIDEEMULATION, RTGETOPT_REQ_UINT32 | RTGETOPT_FLAG_INDEX },
9e4ea89b1085fdaa5861e45a729d9c978db1a8f1vboxsync { "--sataportcount", MODIFYVM_SATAPORTCOUNT, RTGETOPT_REQ_UINT32 },
9e4ea89b1085fdaa5861e45a729d9c978db1a8f1vboxsync { "--sataport", MODIFYVM_SATAPORT, RTGETOPT_REQ_STRING | RTGETOPT_FLAG_INDEX },
9e4ea89b1085fdaa5861e45a729d9c978db1a8f1vboxsync { "--sata", MODIFYVM_SATA, RTGETOPT_REQ_STRING },
9e4ea89b1085fdaa5861e45a729d9c978db1a8f1vboxsync { "--scsiport", MODIFYVM_SCSIPORT, RTGETOPT_REQ_STRING | RTGETOPT_FLAG_INDEX },
9e4ea89b1085fdaa5861e45a729d9c978db1a8f1vboxsync { "--scsitype", MODIFYVM_SCSITYPE, RTGETOPT_REQ_STRING },
9e4ea89b1085fdaa5861e45a729d9c978db1a8f1vboxsync { "--scsi", MODIFYVM_SCSI, RTGETOPT_REQ_STRING },
9e4ea89b1085fdaa5861e45a729d9c978db1a8f1vboxsync { "--dvdpassthrough", MODIFYVM_DVDPASSTHROUGH, RTGETOPT_REQ_STRING },
9e4ea89b1085fdaa5861e45a729d9c978db1a8f1vboxsync { "--dvd", MODIFYVM_DVD, RTGETOPT_REQ_STRING },
9e4ea89b1085fdaa5861e45a729d9c978db1a8f1vboxsync { "--floppy", MODIFYVM_FLOPPY, RTGETOPT_REQ_STRING },
9e4ea89b1085fdaa5861e45a729d9c978db1a8f1vboxsync { "--nictracefile", MODIFYVM_NICTRACEFILE, RTGETOPT_REQ_STRING | RTGETOPT_FLAG_INDEX },
9e4ea89b1085fdaa5861e45a729d9c978db1a8f1vboxsync { "--nictrace", MODIFYVM_NICTRACE, RTGETOPT_REQ_STRING | RTGETOPT_FLAG_INDEX },
9e4ea89b1085fdaa5861e45a729d9c978db1a8f1vboxsync { "--nictype", MODIFYVM_NICTYPE, RTGETOPT_REQ_STRING | RTGETOPT_FLAG_INDEX },
9e4ea89b1085fdaa5861e45a729d9c978db1a8f1vboxsync { "--nicspeed", MODIFYVM_NICSPEED, RTGETOPT_REQ_UINT32 | RTGETOPT_FLAG_INDEX },
9e4ea89b1085fdaa5861e45a729d9c978db1a8f1vboxsync { "--nic", MODIFYVM_NIC, RTGETOPT_REQ_STRING | RTGETOPT_FLAG_INDEX },
9e4ea89b1085fdaa5861e45a729d9c978db1a8f1vboxsync { "--cableconnected", MODIFYVM_CABLECONNECTED, RTGETOPT_REQ_STRING | RTGETOPT_FLAG_INDEX },
9e4ea89b1085fdaa5861e45a729d9c978db1a8f1vboxsync { "--bridgeadapter", MODIFYVM_BRIDGEADAPTER, RTGETOPT_REQ_STRING | RTGETOPT_FLAG_INDEX },
9e4ea89b1085fdaa5861e45a729d9c978db1a8f1vboxsync { "--hostonlyadapter", MODIFYVM_HOSTONLYADAPTER, RTGETOPT_REQ_STRING | RTGETOPT_FLAG_INDEX },
9e4ea89b1085fdaa5861e45a729d9c978db1a8f1vboxsync { "--intnet", MODIFYVM_INTNET, RTGETOPT_REQ_STRING | RTGETOPT_FLAG_INDEX },
9e4ea89b1085fdaa5861e45a729d9c978db1a8f1vboxsync { "--natnet", MODIFYVM_NATNET, RTGETOPT_REQ_STRING | RTGETOPT_FLAG_INDEX },
9e4ea89b1085fdaa5861e45a729d9c978db1a8f1vboxsync { "--macaddress", MODIFYVM_MACADDRESS, RTGETOPT_REQ_STRING | RTGETOPT_FLAG_INDEX },
9e4ea89b1085fdaa5861e45a729d9c978db1a8f1vboxsync { "--uartmode", MODIFYVM_UARTMODE, RTGETOPT_REQ_STRING | RTGETOPT_FLAG_INDEX },
9e4ea89b1085fdaa5861e45a729d9c978db1a8f1vboxsync { "--uart", MODIFYVM_UART, RTGETOPT_REQ_STRING | RTGETOPT_FLAG_INDEX },
9e4ea89b1085fdaa5861e45a729d9c978db1a8f1vboxsync { "--gueststatisticsinterval", MODIFYVM_GUESTSTATISTICSINTERVAL, RTGETOPT_REQ_UINT32 },
9e4ea89b1085fdaa5861e45a729d9c978db1a8f1vboxsync { "--guestmemoryballoon", MODIFYVM_GUESTMEMORYBALLOON, RTGETOPT_REQ_UINT32 },
9e4ea89b1085fdaa5861e45a729d9c978db1a8f1vboxsync { "--audiocontroller", MODIFYVM_AUDIOCONTROLLER, RTGETOPT_REQ_STRING },
9e4ea89b1085fdaa5861e45a729d9c978db1a8f1vboxsync { "--audio", MODIFYVM_AUDIO, RTGETOPT_REQ_STRING },
9e4ea89b1085fdaa5861e45a729d9c978db1a8f1vboxsync { "--clipboard", MODIFYVM_CLIPBOARD, RTGETOPT_REQ_STRING },
9e4ea89b1085fdaa5861e45a729d9c978db1a8f1vboxsync { "--vrdpport", MODIFYVM_VRDPPORT, RTGETOPT_REQ_STRING },
9e4ea89b1085fdaa5861e45a729d9c978db1a8f1vboxsync { "--vrdpaddress", MODIFYVM_VRDPADDRESS, RTGETOPT_REQ_STRING },
9e4ea89b1085fdaa5861e45a729d9c978db1a8f1vboxsync { "--vrdpauthtype", MODIFYVM_VRDPAUTHTYPE, RTGETOPT_REQ_STRING },
9e4ea89b1085fdaa5861e45a729d9c978db1a8f1vboxsync { "--vrdpmulticon", MODIFYVM_VRDPMULTICON, RTGETOPT_REQ_STRING },
9e4ea89b1085fdaa5861e45a729d9c978db1a8f1vboxsync { "--vrdpreusecon", MODIFYVM_VRDPREUSECON, RTGETOPT_REQ_STRING },
9e4ea89b1085fdaa5861e45a729d9c978db1a8f1vboxsync { "--vrdp", MODIFYVM_VRDP, RTGETOPT_REQ_STRING },
9e4ea89b1085fdaa5861e45a729d9c978db1a8f1vboxsync { "--usbehci", MODIFYVM_USBEHCI, RTGETOPT_REQ_STRING },
9e4ea89b1085fdaa5861e45a729d9c978db1a8f1vboxsync { "--usb", MODIFYVM_USB, RTGETOPT_REQ_STRING },
9e4ea89b1085fdaa5861e45a729d9c978db1a8f1vboxsync { "--snapshotfolder", MODIFYVM_SNAPSHOTFOLDER, RTGETOPT_REQ_STRING },
9e4ea89b1085fdaa5861e45a729d9c978db1a8f1vboxsync { "--teleporterenabled", MODIFYVM_TELEPORTER_ENABLED, RTGETOPT_REQ_STRING },
9e4ea89b1085fdaa5861e45a729d9c978db1a8f1vboxsync { "--teleporterport", MODIFYVM_TELEPORTER_PORT, RTGETOPT_REQ_UINT32 },
9e4ea89b1085fdaa5861e45a729d9c978db1a8f1vboxsync { "--teleporteraddress", MODIFYVM_TELEPORTER_ADDRESS, RTGETOPT_REQ_STRING },
9e4ea89b1085fdaa5861e45a729d9c978db1a8f1vboxsync { "--teleporterpassword", MODIFYVM_TELEPORTER_PASSWORD, RTGETOPT_REQ_STRING },
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync};
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync
71c8a528203c289a8585ce10ac6bafc4274058c6vboxsyncint handleModifyVM(HandlerArg *a)
71c8a528203c289a8585ce10ac6bafc4274058c6vboxsync{
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync int c;
71c8a528203c289a8585ce10ac6bafc4274058c6vboxsync HRESULT rc;
71c8a528203c289a8585ce10ac6bafc4274058c6vboxsync Bstr name;
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync Bstr machineuuid (a->argv[0]);
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync RTGETOPTUNION pValueUnion;
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync RTGETOPTSTATE pGetState;
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync ComPtr <IMachine> machine;
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync ComPtr <IBIOSSettings> biosSettings;
71c8a528203c289a8585ce10ac6bafc4274058c6vboxsync
71c8a528203c289a8585ce10ac6bafc4274058c6vboxsync /* VM ID + at least one parameter. Parameter arguments are checked
71c8a528203c289a8585ce10ac6bafc4274058c6vboxsync * individually. */
71c8a528203c289a8585ce10ac6bafc4274058c6vboxsync if (a->argc < 2)
71c8a528203c289a8585ce10ac6bafc4274058c6vboxsync return errorSyntax(USAGE_MODIFYVM, "Not enough parameters");
71c8a528203c289a8585ce10ac6bafc4274058c6vboxsync
71c8a528203c289a8585ce10ac6bafc4274058c6vboxsync /* Get the number of network adapters */
71c8a528203c289a8585ce10ac6bafc4274058c6vboxsync ULONG NetworkAdapterCount = 0;
71c8a528203c289a8585ce10ac6bafc4274058c6vboxsync {
71c8a528203c289a8585ce10ac6bafc4274058c6vboxsync ComPtr <ISystemProperties> info;
71c8a528203c289a8585ce10ac6bafc4274058c6vboxsync CHECK_ERROR_RET (a->virtualBox, COMGETTER(SystemProperties) (info.asOutParam()), 1);
71c8a528203c289a8585ce10ac6bafc4274058c6vboxsync CHECK_ERROR_RET (info, COMGETTER(NetworkAdapterCount) (&NetworkAdapterCount), 1);
71c8a528203c289a8585ce10ac6bafc4274058c6vboxsync }
71c8a528203c289a8585ce10ac6bafc4274058c6vboxsync ULONG SerialPortCount = 0;
71c8a528203c289a8585ce10ac6bafc4274058c6vboxsync {
71c8a528203c289a8585ce10ac6bafc4274058c6vboxsync ComPtr <ISystemProperties> info;
71c8a528203c289a8585ce10ac6bafc4274058c6vboxsync CHECK_ERROR_RET (a->virtualBox, COMGETTER(SystemProperties) (info.asOutParam()), 1);
71c8a528203c289a8585ce10ac6bafc4274058c6vboxsync CHECK_ERROR_RET (info, COMGETTER(SerialPortCount) (&SerialPortCount), 1);
71c8a528203c289a8585ce10ac6bafc4274058c6vboxsync }
71c8a528203c289a8585ce10ac6bafc4274058c6vboxsync
71c8a528203c289a8585ce10ac6bafc4274058c6vboxsync /* try to find the given machine */
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync if (!Guid(machineuuid).isEmpty())
71c8a528203c289a8585ce10ac6bafc4274058c6vboxsync {
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync CHECK_ERROR_RET (a->virtualBox, GetMachine (machineuuid, machine.asOutParam()), 1);
71c8a528203c289a8585ce10ac6bafc4274058c6vboxsync }
71c8a528203c289a8585ce10ac6bafc4274058c6vboxsync else
71c8a528203c289a8585ce10ac6bafc4274058c6vboxsync {
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync CHECK_ERROR_RET (a->virtualBox, FindMachine(Bstr(a->argv[0]), machine.asOutParam()), 1);
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync machine->COMGETTER(Id)(machineuuid.asOutParam());
71c8a528203c289a8585ce10ac6bafc4274058c6vboxsync }
71c8a528203c289a8585ce10ac6bafc4274058c6vboxsync
71c8a528203c289a8585ce10ac6bafc4274058c6vboxsync /* open a session for the VM */
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync CHECK_ERROR_RET (a->virtualBox, OpenSession(a->session, machineuuid), 1);
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync /* get the mutable session machine */
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync a->session->COMGETTER(Machine)(machine.asOutParam());
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync machine->COMGETTER(BIOSSettings)(biosSettings.asOutParam());
71c8a528203c289a8585ce10ac6bafc4274058c6vboxsync
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync RTGetOptInit (&pGetState, a->argc, a->argv, g_aModifyVMOptions,
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync RT_ELEMENTS(g_aModifyVMOptions), 1, 0 /* fFlags */);
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync while ( SUCCEEDED (rc)
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync && (c = RTGetOpt(&pGetState, &pValueUnion)))
71c8a528203c289a8585ce10ac6bafc4274058c6vboxsync {
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync switch (c)
71c8a528203c289a8585ce10ac6bafc4274058c6vboxsync {
9e4ea89b1085fdaa5861e45a729d9c978db1a8f1vboxsync case MODIFYVM_NAME:
71c8a528203c289a8585ce10ac6bafc4274058c6vboxsync {
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync if (pValueUnion.psz)
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync CHECK_ERROR (machine, COMSETTER(Name)(Bstr(pValueUnion.psz)));
71c8a528203c289a8585ce10ac6bafc4274058c6vboxsync break;
71c8a528203c289a8585ce10ac6bafc4274058c6vboxsync }
9e4ea89b1085fdaa5861e45a729d9c978db1a8f1vboxsync case MODIFYVM_OSTYPE:
71c8a528203c289a8585ce10ac6bafc4274058c6vboxsync {
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync if (pValueUnion.psz)
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync {
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync ComPtr<IGuestOSType> guestOSType;
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync CHECK_ERROR (a->virtualBox, GetGuestOSType(Bstr(pValueUnion.psz), guestOSType.asOutParam()));
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync if (SUCCEEDED(rc) && guestOSType)
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync {
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync CHECK_ERROR (machine, COMSETTER(OSTypeId)(Bstr(pValueUnion.psz)));
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync }
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync else
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync {
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync errorArgument("Invalid guest OS type '%s'", Utf8Str(pValueUnion.psz).raw());
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync rc = E_FAIL;
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync }
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync }
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync break;
71c8a528203c289a8585ce10ac6bafc4274058c6vboxsync }
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync
9e4ea89b1085fdaa5861e45a729d9c978db1a8f1vboxsync case MODIFYVM_MEMORY:
71c8a528203c289a8585ce10ac6bafc4274058c6vboxsync {
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync if (pValueUnion.u32 > 0)
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync CHECK_ERROR (machine, COMSETTER(MemorySize)(pValueUnion.u32));
71c8a528203c289a8585ce10ac6bafc4274058c6vboxsync break;
71c8a528203c289a8585ce10ac6bafc4274058c6vboxsync }
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync
9e4ea89b1085fdaa5861e45a729d9c978db1a8f1vboxsync case MODIFYVM_VRAM:
71c8a528203c289a8585ce10ac6bafc4274058c6vboxsync {
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync if (pValueUnion.u32 > 0)
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync CHECK_ERROR (machine, COMSETTER(VRAMSize)(pValueUnion.u32));
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync break;
71c8a528203c289a8585ce10ac6bafc4274058c6vboxsync }
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync
9e4ea89b1085fdaa5861e45a729d9c978db1a8f1vboxsync case MODIFYVM_FIRMWARE:
71c8a528203c289a8585ce10ac6bafc4274058c6vboxsync {
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync if (pValueUnion.psz)
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync {
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync if (!strcmp(pValueUnion.psz, "efi"))
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync {
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync CHECK_ERROR (machine, COMSETTER(FirmwareType)(FirmwareType_EFI));
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync }
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync else if (!strcmp(pValueUnion.psz, "bios"))
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync {
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync CHECK_ERROR (machine, COMSETTER(FirmwareType)(FirmwareType_BIOS));
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync }
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync else
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync {
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync errorArgument("Invalid --firmware argument '%s'", pValueUnion.psz);
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync rc = E_FAIL;
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync }
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync }
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync break;
71c8a528203c289a8585ce10ac6bafc4274058c6vboxsync }
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync
9e4ea89b1085fdaa5861e45a729d9c978db1a8f1vboxsync case MODIFYVM_ACPI:
71c8a528203c289a8585ce10ac6bafc4274058c6vboxsync {
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync if (pValueUnion.psz)
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync {
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync if (!strcmp(pValueUnion.psz, "on"))
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync {
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync CHECK_ERROR (biosSettings, COMSETTER(ACPIEnabled)(true));
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync }
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync else if (!strcmp(pValueUnion.psz, "off"))
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync {
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync CHECK_ERROR (biosSettings, COMSETTER(ACPIEnabled)(false));
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync }
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync else
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync {
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync errorArgument("Invalid --acpi argument '%s'", pValueUnion.psz);
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync rc = E_FAIL;
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync }
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync }
71c8a528203c289a8585ce10ac6bafc4274058c6vboxsync break;
71c8a528203c289a8585ce10ac6bafc4274058c6vboxsync }
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync
9e4ea89b1085fdaa5861e45a729d9c978db1a8f1vboxsync case MODIFYVM_IOAPIC:
71c8a528203c289a8585ce10ac6bafc4274058c6vboxsync {
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync if (pValueUnion.psz)
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync {
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync if (!strcmp(pValueUnion.psz, "on"))
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync {
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync CHECK_ERROR (biosSettings, COMSETTER(IOAPICEnabled)(true));
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync }
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync else if (!strcmp(pValueUnion.psz, "off"))
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync {
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync CHECK_ERROR (biosSettings, COMSETTER(IOAPICEnabled)(false));
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync }
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync else
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync {
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync errorArgument("Invalid --ioapic argument '%s'", pValueUnion.psz);
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync rc = E_FAIL;
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync }
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync }
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync break;
71c8a528203c289a8585ce10ac6bafc4274058c6vboxsync }
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync
9e4ea89b1085fdaa5861e45a729d9c978db1a8f1vboxsync case MODIFYVM_PAE:
71c8a528203c289a8585ce10ac6bafc4274058c6vboxsync {
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync if (pValueUnion.psz)
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync {
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync if (!strcmp(pValueUnion.psz, "on"))
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync {
36929067a9d3cba77fd78f1e8fa042ed3a8ae2d6vboxsync CHECK_ERROR (machine, SetCpuProperty(CpuPropertyType_PAE, true));
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync }
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync else if (!strcmp(pValueUnion.psz, "off"))
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync {
36929067a9d3cba77fd78f1e8fa042ed3a8ae2d6vboxsync CHECK_ERROR (machine, SetCpuProperty(CpuPropertyType_PAE, false));
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync }
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync else
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync {
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync errorArgument("Invalid --pae argument '%s'", pValueUnion.psz);
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync rc = E_FAIL;
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync }
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync }
71c8a528203c289a8585ce10ac6bafc4274058c6vboxsync break;
71c8a528203c289a8585ce10ac6bafc4274058c6vboxsync }
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync
9e4ea89b1085fdaa5861e45a729d9c978db1a8f1vboxsync case MODIFYVM_SYNTHCPU:
36929067a9d3cba77fd78f1e8fa042ed3a8ae2d6vboxsync {
36929067a9d3cba77fd78f1e8fa042ed3a8ae2d6vboxsync if (pValueUnion.psz)
36929067a9d3cba77fd78f1e8fa042ed3a8ae2d6vboxsync {
36929067a9d3cba77fd78f1e8fa042ed3a8ae2d6vboxsync if (!strcmp(pValueUnion.psz, "on"))
36929067a9d3cba77fd78f1e8fa042ed3a8ae2d6vboxsync {
36929067a9d3cba77fd78f1e8fa042ed3a8ae2d6vboxsync CHECK_ERROR (machine, SetCpuProperty(CpuPropertyType_Synthetic, true));
36929067a9d3cba77fd78f1e8fa042ed3a8ae2d6vboxsync }
36929067a9d3cba77fd78f1e8fa042ed3a8ae2d6vboxsync else if (!strcmp(pValueUnion.psz, "off"))
36929067a9d3cba77fd78f1e8fa042ed3a8ae2d6vboxsync {
36929067a9d3cba77fd78f1e8fa042ed3a8ae2d6vboxsync CHECK_ERROR (machine, SetCpuProperty(CpuPropertyType_Synthetic, false));
36929067a9d3cba77fd78f1e8fa042ed3a8ae2d6vboxsync }
36929067a9d3cba77fd78f1e8fa042ed3a8ae2d6vboxsync else
36929067a9d3cba77fd78f1e8fa042ed3a8ae2d6vboxsync {
36929067a9d3cba77fd78f1e8fa042ed3a8ae2d6vboxsync errorArgument("Invalid --synthcpu argument '%s'", pValueUnion.psz);
36929067a9d3cba77fd78f1e8fa042ed3a8ae2d6vboxsync rc = E_FAIL;
36929067a9d3cba77fd78f1e8fa042ed3a8ae2d6vboxsync }
36929067a9d3cba77fd78f1e8fa042ed3a8ae2d6vboxsync }
36929067a9d3cba77fd78f1e8fa042ed3a8ae2d6vboxsync break;
36929067a9d3cba77fd78f1e8fa042ed3a8ae2d6vboxsync }
36929067a9d3cba77fd78f1e8fa042ed3a8ae2d6vboxsync
9e4ea89b1085fdaa5861e45a729d9c978db1a8f1vboxsync case MODIFYVM_HWVIRTEX:
71c8a528203c289a8585ce10ac6bafc4274058c6vboxsync {
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync if (pValueUnion.psz)
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync {
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync if (!strcmp(pValueUnion.psz, "on"))
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync {
ab2292e9c32bd271ec91123ef38699a0284b72cbvboxsync CHECK_ERROR (machine, SetHWVirtExProperty(HWVirtExPropertyType_Enabled, TRUE));
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync }
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync else if (!strcmp(pValueUnion.psz, "off"))
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync {
ab2292e9c32bd271ec91123ef38699a0284b72cbvboxsync CHECK_ERROR (machine, SetHWVirtExProperty(HWVirtExPropertyType_Enabled, FALSE));
ab2292e9c32bd271ec91123ef38699a0284b72cbvboxsync }
ab2292e9c32bd271ec91123ef38699a0284b72cbvboxsync else
ab2292e9c32bd271ec91123ef38699a0284b72cbvboxsync {
ab2292e9c32bd271ec91123ef38699a0284b72cbvboxsync errorArgument("Invalid --hwvirtex argument '%s'", pValueUnion.psz);
ab2292e9c32bd271ec91123ef38699a0284b72cbvboxsync rc = E_FAIL;
ab2292e9c32bd271ec91123ef38699a0284b72cbvboxsync }
ab2292e9c32bd271ec91123ef38699a0284b72cbvboxsync }
ab2292e9c32bd271ec91123ef38699a0284b72cbvboxsync break;
ab2292e9c32bd271ec91123ef38699a0284b72cbvboxsync }
ab2292e9c32bd271ec91123ef38699a0284b72cbvboxsync
9e4ea89b1085fdaa5861e45a729d9c978db1a8f1vboxsync case MODIFYVM_HWVIRTEXEXCLUSIVE:
ab2292e9c32bd271ec91123ef38699a0284b72cbvboxsync {
ab2292e9c32bd271ec91123ef38699a0284b72cbvboxsync if (pValueUnion.psz)
ab2292e9c32bd271ec91123ef38699a0284b72cbvboxsync {
ab2292e9c32bd271ec91123ef38699a0284b72cbvboxsync if (!strcmp(pValueUnion.psz, "on"))
ab2292e9c32bd271ec91123ef38699a0284b72cbvboxsync {
ab2292e9c32bd271ec91123ef38699a0284b72cbvboxsync CHECK_ERROR (machine, SetHWVirtExProperty(HWVirtExPropertyType_Exclusive, TRUE));
ab2292e9c32bd271ec91123ef38699a0284b72cbvboxsync }
ab2292e9c32bd271ec91123ef38699a0284b72cbvboxsync else if (!strcmp(pValueUnion.psz, "off"))
ab2292e9c32bd271ec91123ef38699a0284b72cbvboxsync {
ab2292e9c32bd271ec91123ef38699a0284b72cbvboxsync CHECK_ERROR (machine, SetHWVirtExProperty(HWVirtExPropertyType_Exclusive, FALSE));
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync }
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync else
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync {
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync errorArgument("Invalid --hwvirtex argument '%s'", pValueUnion.psz);
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync rc = E_FAIL;
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync }
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync }
71c8a528203c289a8585ce10ac6bafc4274058c6vboxsync break;
71c8a528203c289a8585ce10ac6bafc4274058c6vboxsync }
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync
9e4ea89b1085fdaa5861e45a729d9c978db1a8f1vboxsync case MODIFYVM_NESTEDPAGING:
71c8a528203c289a8585ce10ac6bafc4274058c6vboxsync {
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync if (pValueUnion.psz)
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync {
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync if (!strcmp(pValueUnion.psz, "on"))
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync {
36929067a9d3cba77fd78f1e8fa042ed3a8ae2d6vboxsync CHECK_ERROR (machine, SetHWVirtExProperty(HWVirtExPropertyType_NestedPaging, TRUE));
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync }
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync else if (!strcmp(pValueUnion.psz, "off"))
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync {
36929067a9d3cba77fd78f1e8fa042ed3a8ae2d6vboxsync CHECK_ERROR (machine, SetHWVirtExProperty(HWVirtExPropertyType_NestedPaging, FALSE));
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync }
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync else
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync {
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync errorArgument("Invalid --nestedpaging argument '%s'", pValueUnion.psz);
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync rc = E_FAIL;
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync }
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync }
71c8a528203c289a8585ce10ac6bafc4274058c6vboxsync break;
71c8a528203c289a8585ce10ac6bafc4274058c6vboxsync }
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync
9e4ea89b1085fdaa5861e45a729d9c978db1a8f1vboxsync case MODIFYVM_VTXVPID:
71c8a528203c289a8585ce10ac6bafc4274058c6vboxsync {
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync if (pValueUnion.psz)
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync {
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync if (!strcmp(pValueUnion.psz, "on"))
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync {
36929067a9d3cba77fd78f1e8fa042ed3a8ae2d6vboxsync CHECK_ERROR (machine, SetHWVirtExProperty(HWVirtExPropertyType_VPID, TRUE));
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync }
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync else if (!strcmp(pValueUnion.psz, "off"))
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync {
36929067a9d3cba77fd78f1e8fa042ed3a8ae2d6vboxsync CHECK_ERROR (machine, SetHWVirtExProperty(HWVirtExPropertyType_VPID, FALSE));
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync }
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync else
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync {
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync errorArgument("Invalid --vtxvpid argument '%s'", pValueUnion.psz);
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync rc = E_FAIL;
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync }
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync }
71c8a528203c289a8585ce10ac6bafc4274058c6vboxsync break;
71c8a528203c289a8585ce10ac6bafc4274058c6vboxsync }
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync
9e4ea89b1085fdaa5861e45a729d9c978db1a8f1vboxsync case MODIFYVM_CPUS:
71c8a528203c289a8585ce10ac6bafc4274058c6vboxsync {
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync if (pValueUnion.u32 > 0)
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync CHECK_ERROR (machine, COMSETTER(CPUCount)(pValueUnion.u32));
71c8a528203c289a8585ce10ac6bafc4274058c6vboxsync break;
71c8a528203c289a8585ce10ac6bafc4274058c6vboxsync }
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync
9e4ea89b1085fdaa5861e45a729d9c978db1a8f1vboxsync case MODIFYVM_MONITORCOUNT:
49e54e2ffe0c10864d06e9d1ebe24a8eb1327a6bvboxsync {
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync if (pValueUnion.u32 > 0)
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync CHECK_ERROR (machine, COMSETTER(MonitorCount)(pValueUnion.u32));
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync break;
49e54e2ffe0c10864d06e9d1ebe24a8eb1327a6bvboxsync }
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync
9e4ea89b1085fdaa5861e45a729d9c978db1a8f1vboxsync case MODIFYVM_ACCELERATE3D:
49e54e2ffe0c10864d06e9d1ebe24a8eb1327a6bvboxsync {
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync if (pValueUnion.psz)
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync {
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync if (!strcmp(pValueUnion.psz, "on"))
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync {
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync CHECK_ERROR (machine, COMSETTER(Accelerate3DEnabled)(true));
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync }
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync else if (!strcmp(pValueUnion.psz, "off"))
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync {
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync CHECK_ERROR (machine, COMSETTER(Accelerate3DEnabled)(false));
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync }
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync else
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync {
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync errorArgument("Invalid --accelerate3d argument '%s'", pValueUnion.psz);
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync rc = E_FAIL;
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync }
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync }
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync break;
49e54e2ffe0c10864d06e9d1ebe24a8eb1327a6bvboxsync }
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync
9e4ea89b1085fdaa5861e45a729d9c978db1a8f1vboxsync case MODIFYVM_ACCELERATE2DVIDEO:
49e54e2ffe0c10864d06e9d1ebe24a8eb1327a6bvboxsync {
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync#ifdef VBOX_WITH_VIDEOHWACCEL
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync if (pValueUnion.psz)
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync {
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync if (!strcmp(pValueUnion.psz, "on"))
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync {
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync CHECK_ERROR (machine, COMSETTER(Accelerate2DVideoEnabled)(true));
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync }
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync else if (!strcmp(pValueUnion.psz, "off"))
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync {
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync CHECK_ERROR (machine, COMSETTER(Accelerate2DVideoEnabled)(false));
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync }
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync else
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync {
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync errorArgument("Invalid --accelerate2dvideo argument '%s'", pValueUnion.psz);
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync rc = E_FAIL;
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync }
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync }
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync#endif
49e54e2ffe0c10864d06e9d1ebe24a8eb1327a6bvboxsync break;
49e54e2ffe0c10864d06e9d1ebe24a8eb1327a6bvboxsync }
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync
9e4ea89b1085fdaa5861e45a729d9c978db1a8f1vboxsync case MODIFYVM_BIOSLOGOFADEIN:
91f8453d16b48876deddaba298c211071d0ca3a5vboxsync {
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync if (pValueUnion.psz)
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync {
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync if (!strcmp(pValueUnion.psz, "on"))
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync {
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync CHECK_ERROR (biosSettings, COMSETTER(LogoFadeIn)(true));
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync }
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync else if (!strcmp(pValueUnion.psz, "off"))
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync {
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync CHECK_ERROR (biosSettings, COMSETTER(LogoFadeIn)(false));
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync }
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync else
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync {
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync errorArgument("Invalid --bioslogofadein argument '%s'", pValueUnion.psz);
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync rc = E_FAIL;
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync }
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync }
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync break;
91f8453d16b48876deddaba298c211071d0ca3a5vboxsync }
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync
9e4ea89b1085fdaa5861e45a729d9c978db1a8f1vboxsync case MODIFYVM_BIOSLOGOFADEOUT:
91f8453d16b48876deddaba298c211071d0ca3a5vboxsync {
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync if (pValueUnion.psz)
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync {
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync if (!strcmp(pValueUnion.psz, "on"))
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync {
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync CHECK_ERROR (biosSettings, COMSETTER(LogoFadeOut)(true));
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync }
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync else if (!strcmp(pValueUnion.psz, "off"))
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync {
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync CHECK_ERROR (biosSettings, COMSETTER(LogoFadeOut)(false));
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync }
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync else
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync {
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync errorArgument("Invalid --bioslogofadeout argument '%s'", pValueUnion.psz);
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync rc = E_FAIL;
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync break;
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync }
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync }
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync break;
91f8453d16b48876deddaba298c211071d0ca3a5vboxsync }
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync
9e4ea89b1085fdaa5861e45a729d9c978db1a8f1vboxsync case MODIFYVM_BIOSLOGODISPLAYTIME:
91f8453d16b48876deddaba298c211071d0ca3a5vboxsync {
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync if (pValueUnion.u64 > 0)
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync CHECK_ERROR (biosSettings, COMSETTER(LogoDisplayTime)(pValueUnion.u64));
91f8453d16b48876deddaba298c211071d0ca3a5vboxsync break;
91f8453d16b48876deddaba298c211071d0ca3a5vboxsync }
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync
9e4ea89b1085fdaa5861e45a729d9c978db1a8f1vboxsync case MODIFYVM_BIOSLOGOIMAGEPATH:
71c8a528203c289a8585ce10ac6bafc4274058c6vboxsync {
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync if (pValueUnion.psz)
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync CHECK_ERROR (biosSettings, COMSETTER(LogoImagePath)(Bstr(pValueUnion.psz)));
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync break;
71c8a528203c289a8585ce10ac6bafc4274058c6vboxsync }
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync
9e4ea89b1085fdaa5861e45a729d9c978db1a8f1vboxsync case MODIFYVM_BIOSBOOTMENU:
71c8a528203c289a8585ce10ac6bafc4274058c6vboxsync {
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync if (pValueUnion.psz)
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync {
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync if (!strcmp(pValueUnion.psz, "disabled"))
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync CHECK_ERROR (biosSettings, COMSETTER(BootMenuMode)(BIOSBootMenuMode_Disabled));
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync else if (!strcmp(pValueUnion.psz, "menuonly"))
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync CHECK_ERROR (biosSettings, COMSETTER(BootMenuMode)(BIOSBootMenuMode_MenuOnly));
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync else if (!strcmp(pValueUnion.psz, "messageandmenu"))
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync CHECK_ERROR (biosSettings, COMSETTER(BootMenuMode)(BIOSBootMenuMode_MessageAndMenu));
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync else
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync {
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync errorArgument("Invalid --biosbootmenu argument '%s'", pValueUnion.psz);
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync rc = E_FAIL;
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync }
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync }
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync break;
71c8a528203c289a8585ce10ac6bafc4274058c6vboxsync }
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync
9e4ea89b1085fdaa5861e45a729d9c978db1a8f1vboxsync case MODIFYVM_BIOSSYSTEMTIMEOFFSET:
71c8a528203c289a8585ce10ac6bafc4274058c6vboxsync {
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync if (pValueUnion.u64 > 0)
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync CHECK_ERROR (biosSettings, COMSETTER(TimeOffset)(pValueUnion.u64));
71c8a528203c289a8585ce10ac6bafc4274058c6vboxsync break;
71c8a528203c289a8585ce10ac6bafc4274058c6vboxsync }
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync
9e4ea89b1085fdaa5861e45a729d9c978db1a8f1vboxsync case MODIFYVM_BIOSPXEDEBUG:
71c8a528203c289a8585ce10ac6bafc4274058c6vboxsync {
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync if (pValueUnion.psz)
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync {
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync if (!strcmp(pValueUnion.psz, "on"))
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync {
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync CHECK_ERROR (biosSettings, COMSETTER(PXEDebugEnabled)(true));
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync }
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync else if (!strcmp(pValueUnion.psz, "off"))
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync {
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync CHECK_ERROR (biosSettings, COMSETTER(PXEDebugEnabled)(false));
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync }
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync else
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync {
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync errorArgument("Invalid --biospxedebug argument '%s'", pValueUnion.psz);
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync rc = E_FAIL;
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync }
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync }
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync break;
71c8a528203c289a8585ce10ac6bafc4274058c6vboxsync }
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync
9e4ea89b1085fdaa5861e45a729d9c978db1a8f1vboxsync case MODIFYVM_BOOT:
71c8a528203c289a8585ce10ac6bafc4274058c6vboxsync {
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync if ((pGetState.uIndex < 1) && (pGetState.uIndex > 4))
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync return errorSyntax(USAGE_MODIFYVM,
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync "Missing or Invalid boot slot number in '%s'",
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync pGetState.pDef->pszLong);
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync if (!strcmp(pValueUnion.psz, "none"))
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync {
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync CHECK_ERROR (machine, SetBootOrder (pGetState.uIndex, DeviceType_Null));
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync }
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync else if (!strcmp(pValueUnion.psz, "floppy"))
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync {
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync CHECK_ERROR (machine, SetBootOrder (pGetState.uIndex, DeviceType_Floppy));
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync }
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync else if (!strcmp(pValueUnion.psz, "dvd"))
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync {
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync CHECK_ERROR (machine, SetBootOrder (pGetState.uIndex, DeviceType_DVD));
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync }
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync else if (!strcmp(pValueUnion.psz, "disk"))
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync {
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync CHECK_ERROR (machine, SetBootOrder (pGetState.uIndex, DeviceType_HardDisk));
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync }
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync else if (!strcmp(pValueUnion.psz, "net"))
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync {
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync CHECK_ERROR (machine, SetBootOrder (pGetState.uIndex, DeviceType_Network));
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync }
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync else
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync return errorArgument("Invalid boot device '%s'", pValueUnion.psz);
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync break;
71c8a528203c289a8585ce10ac6bafc4274058c6vboxsync }
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync
9e4ea89b1085fdaa5861e45a729d9c978db1a8f1vboxsync case MODIFYVM_HDA:
71c8a528203c289a8585ce10ac6bafc4274058c6vboxsync {
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync if (!strcmp(pValueUnion.psz, "none"))
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync {
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync machine->DetachDevice(Bstr("IDE Controller"), 0, 0);
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync }
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync else
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync {
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync /* first guess is that it's a UUID */
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync Bstr uuid(pValueUnion.psz);
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync ComPtr<IMedium> hardDisk;
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync rc = a->virtualBox->GetHardDisk(uuid, hardDisk.asOutParam());
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync /* not successful? Then it must be a filename */
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync if (!hardDisk)
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync {
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync rc = a->virtualBox->FindHardDisk(Bstr(pValueUnion.psz), hardDisk.asOutParam());
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync if (FAILED(rc))
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync {
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync /* open the new hard disk object */
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync CHECK_ERROR (a->virtualBox,
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync OpenHardDisk(Bstr(pValueUnion.psz),
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync AccessMode_ReadWrite, false, Bstr(""),
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync false, Bstr(""), hardDisk.asOutParam()));
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync }
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync }
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync if (hardDisk)
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync {
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync hardDisk->COMGETTER(Id)(uuid.asOutParam());
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync CHECK_ERROR (machine, AttachDevice(Bstr("IDE Controller"), 0, 0, DeviceType_HardDisk, uuid));
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync }
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync else
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync rc = E_FAIL;
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync }
71c8a528203c289a8585ce10ac6bafc4274058c6vboxsync break;
71c8a528203c289a8585ce10ac6bafc4274058c6vboxsync }
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync
9e4ea89b1085fdaa5861e45a729d9c978db1a8f1vboxsync case MODIFYVM_HDB:
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync {
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync if (!strcmp(pValueUnion.psz, "none"))
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync {
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync machine->DetachDevice(Bstr("IDE Controller"), 0, 1);
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync }
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync else
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync {
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync /* first guess is that it's a UUID */
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync Bstr uuid(pValueUnion.psz);
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync ComPtr<IMedium> hardDisk;
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync rc = a->virtualBox->GetHardDisk(uuid, hardDisk.asOutParam());
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync /* not successful? Then it must be a filename */
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync if (!hardDisk)
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync {
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync rc = a->virtualBox->FindHardDisk(Bstr(pValueUnion.psz), hardDisk.asOutParam());
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync if (FAILED(rc))
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync {
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync /* open the new hard disk object */
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync CHECK_ERROR (a->virtualBox,
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync OpenHardDisk(Bstr(pValueUnion.psz),
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync AccessMode_ReadWrite, false, Bstr(""),
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync false, Bstr(""), hardDisk.asOutParam()));
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync }
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync }
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync if (hardDisk)
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync {
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync hardDisk->COMGETTER(Id)(uuid.asOutParam());
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync CHECK_ERROR (machine, AttachDevice(Bstr("IDE Controller"), 0, 1, DeviceType_HardDisk, uuid));
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync }
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync else
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync rc = E_FAIL;
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync }
71c8a528203c289a8585ce10ac6bafc4274058c6vboxsync break;
71c8a528203c289a8585ce10ac6bafc4274058c6vboxsync }
71c8a528203c289a8585ce10ac6bafc4274058c6vboxsync
9e4ea89b1085fdaa5861e45a729d9c978db1a8f1vboxsync case MODIFYVM_HDD:
71c8a528203c289a8585ce10ac6bafc4274058c6vboxsync {
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync if (!strcmp(pValueUnion.psz, "none"))
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync {
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync machine->DetachDevice(Bstr("IDE Controller"), 1, 1);
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync }
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync else
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync {
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync /* first guess is that it's a UUID */
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync Bstr uuid(pValueUnion.psz);
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync ComPtr<IMedium> hardDisk;
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync rc = a->virtualBox->GetHardDisk(uuid, hardDisk.asOutParam());
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync /* not successful? Then it must be a filename */
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync if (!hardDisk)
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync {
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync rc = a->virtualBox->FindHardDisk(Bstr(pValueUnion.psz), hardDisk.asOutParam());
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync if (FAILED(rc))
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync {
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync /* open the new hard disk object */
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync CHECK_ERROR (a->virtualBox,
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync OpenHardDisk(Bstr(pValueUnion.psz),
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync AccessMode_ReadWrite, false, Bstr(""),
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync false, Bstr(""), hardDisk.asOutParam()));
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync }
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync }
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync if (hardDisk)
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync {
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync hardDisk->COMGETTER(Id)(uuid.asOutParam());
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync CHECK_ERROR (machine, AttachDevice(Bstr("IDE Controller"), 1, 1, DeviceType_HardDisk, uuid));
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync }
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync else
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync rc = E_FAIL;
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync }
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync break;
71c8a528203c289a8585ce10ac6bafc4274058c6vboxsync }
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync
9e4ea89b1085fdaa5861e45a729d9c978db1a8f1vboxsync case MODIFYVM_IDECONTROLLER:
71c8a528203c289a8585ce10ac6bafc4274058c6vboxsync {
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync ComPtr<IStorageController> storageController;
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync CHECK_ERROR (machine, GetStorageControllerByName(Bstr("IDE Controller"),
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync storageController.asOutParam()));
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync if (!RTStrICmp(pValueUnion.psz, "PIIX3"))
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync {
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync CHECK_ERROR(storageController, COMSETTER(ControllerType)(StorageControllerType_PIIX3));
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync }
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync else if (!RTStrICmp(pValueUnion.psz, "PIIX4"))
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync {
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync CHECK_ERROR(storageController, COMSETTER(ControllerType)(StorageControllerType_PIIX4));
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync }
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync else if (!RTStrICmp(pValueUnion.psz, "ICH6"))
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync {
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync CHECK_ERROR(storageController, COMSETTER(ControllerType)(StorageControllerType_ICH6));
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync }
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync else
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync {
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync errorArgument("Invalid --idecontroller argument '%s'", pValueUnion.psz);
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync rc = E_FAIL;
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync }
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync break;
71c8a528203c289a8585ce10ac6bafc4274058c6vboxsync }
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync
9e4ea89b1085fdaa5861e45a729d9c978db1a8f1vboxsync case MODIFYVM_SATAIDEEMULATION:
71c8a528203c289a8585ce10ac6bafc4274058c6vboxsync {
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync ComPtr<IStorageController> SataCtl;
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync CHECK_ERROR (machine, GetStorageControllerByName(Bstr("SATA"), SataCtl.asOutParam()));
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync if ((pGetState.uIndex < 1) && (pGetState.uIndex > 4))
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync return errorSyntax(USAGE_MODIFYVM,
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync "Missing or Invalid SATA boot slot number in '%s'",
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync pGetState.pDef->pszLong);
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync if ((pValueUnion.u32 < 1) && (pValueUnion.u32 > 30))
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync return errorSyntax(USAGE_MODIFYVM,
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync "Missing or Invalid SATA port number in '%s'",
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync pGetState.pDef->pszLong);
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync if (SUCCEEDED(rc))
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync CHECK_ERROR(SataCtl, SetIDEEmulationPort(pGetState.uIndex, pValueUnion.u32));
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync
71c8a528203c289a8585ce10ac6bafc4274058c6vboxsync break;
71c8a528203c289a8585ce10ac6bafc4274058c6vboxsync }
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync
9e4ea89b1085fdaa5861e45a729d9c978db1a8f1vboxsync case MODIFYVM_SATAPORTCOUNT:
71c8a528203c289a8585ce10ac6bafc4274058c6vboxsync {
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync ComPtr<IStorageController> SataCtl;
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync CHECK_ERROR (machine, GetStorageControllerByName(Bstr("SATA"), SataCtl.asOutParam()));
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync if (SUCCEEDED(rc) && pValueUnion.u32 > 0)
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync CHECK_ERROR(SataCtl, COMSETTER(PortCount)(pValueUnion.u32));
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync break;
71c8a528203c289a8585ce10ac6bafc4274058c6vboxsync }
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync
9e4ea89b1085fdaa5861e45a729d9c978db1a8f1vboxsync case MODIFYVM_SATAPORT:
71c8a528203c289a8585ce10ac6bafc4274058c6vboxsync {
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync if ((pGetState.uIndex < 1) && (pGetState.uIndex > 30))
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync return errorSyntax(USAGE_MODIFYVM,
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync "Missing or Invalid SATA port number in '%s'",
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync pGetState.pDef->pszLong);
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync if (!strcmp(pValueUnion.psz, "none"))
71c8a528203c289a8585ce10ac6bafc4274058c6vboxsync {
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync machine->DetachDevice(Bstr("SATA"), pGetState.uIndex, 0);
71c8a528203c289a8585ce10ac6bafc4274058c6vboxsync }
71c8a528203c289a8585ce10ac6bafc4274058c6vboxsync else
71c8a528203c289a8585ce10ac6bafc4274058c6vboxsync {
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync /* first guess is that it's a UUID */
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync Bstr uuid(pValueUnion.psz);
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync ComPtr<IMedium> hardDisk;
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync rc = a->virtualBox->GetHardDisk(uuid, hardDisk.asOutParam());
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync /* not successful? Then it must be a filename */
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync if (!hardDisk)
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync {
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync rc = a->virtualBox->FindHardDisk(Bstr(pValueUnion.psz), hardDisk.asOutParam());
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync if (FAILED(rc))
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync {
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync /* open the new hard disk object */
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync CHECK_ERROR (a->virtualBox,
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync OpenHardDisk(Bstr(pValueUnion.psz), AccessMode_ReadWrite,
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync false, Bstr(""), false,
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync Bstr(""), hardDisk.asOutParam()));
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync }
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync }
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync if (hardDisk)
71c8a528203c289a8585ce10ac6bafc4274058c6vboxsync {
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync hardDisk->COMGETTER(Id)(uuid.asOutParam());
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync CHECK_ERROR (machine,
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync AttachDevice(Bstr("SATA"), pGetState.uIndex,
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync 0, DeviceType_HardDisk, uuid));
71c8a528203c289a8585ce10ac6bafc4274058c6vboxsync }
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync else
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync rc = E_FAIL;
71c8a528203c289a8585ce10ac6bafc4274058c6vboxsync }
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync break;
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync }
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync
9e4ea89b1085fdaa5861e45a729d9c978db1a8f1vboxsync case MODIFYVM_SATA:
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync {
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync if (!strcmp(pValueUnion.psz, "on") || !strcmp(pValueUnion.psz, "enable"))
71c8a528203c289a8585ce10ac6bafc4274058c6vboxsync {
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync ComPtr<IStorageController> ctl;
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync CHECK_ERROR (machine, AddStorageController(Bstr("SATA"), StorageBus_SATA, ctl.asOutParam()));
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync CHECK_ERROR (ctl, COMSETTER(ControllerType)(StorageControllerType_IntelAhci));
71c8a528203c289a8585ce10ac6bafc4274058c6vboxsync }
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync else if (!strcmp(pValueUnion.psz, "off") || !strcmp(pValueUnion.psz, "disable"))
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync CHECK_ERROR (machine, RemoveStorageController(Bstr("SATA")));
71c8a528203c289a8585ce10ac6bafc4274058c6vboxsync else
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync return errorArgument("Invalid --usb argument '%s'", pValueUnion.psz);
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync break;
71c8a528203c289a8585ce10ac6bafc4274058c6vboxsync }
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync
9e4ea89b1085fdaa5861e45a729d9c978db1a8f1vboxsync case MODIFYVM_SCSIPORT:
71c8a528203c289a8585ce10ac6bafc4274058c6vboxsync {
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync if ((pGetState.uIndex < 1) && (pGetState.uIndex > 16))
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync return errorSyntax(USAGE_MODIFYVM,
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync "Missing or Invalid SCSI port number in '%s'",
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync pGetState.pDef->pszLong);
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync if (!strcmp(pValueUnion.psz, "none"))
71c8a528203c289a8585ce10ac6bafc4274058c6vboxsync {
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync rc = machine->DetachDevice(Bstr("LsiLogic"), pGetState.uIndex, 0);
71c8a528203c289a8585ce10ac6bafc4274058c6vboxsync if (FAILED(rc))
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync CHECK_ERROR(machine, DetachDevice(Bstr("BusLogic"), pGetState.uIndex, 0));
71c8a528203c289a8585ce10ac6bafc4274058c6vboxsync }
71c8a528203c289a8585ce10ac6bafc4274058c6vboxsync else
71c8a528203c289a8585ce10ac6bafc4274058c6vboxsync {
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync /* first guess is that it's a UUID */
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync Bstr uuid(pValueUnion.psz);
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync ComPtr<IMedium> hardDisk;
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync rc = a->virtualBox->GetHardDisk(uuid, hardDisk.asOutParam());
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync /* not successful? Then it must be a filename */
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync if (!hardDisk)
71c8a528203c289a8585ce10ac6bafc4274058c6vboxsync {
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync rc = a->virtualBox->FindHardDisk(Bstr(pValueUnion.psz), hardDisk.asOutParam());
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync if (FAILED(rc))
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync {
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync /* open the new hard disk object */
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync CHECK_ERROR (a->virtualBox,
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync OpenHardDisk(Bstr(pValueUnion.psz),
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync AccessMode_ReadWrite, false, Bstr(""),
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync false, Bstr(""), hardDisk.asOutParam()));
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync }
71c8a528203c289a8585ce10ac6bafc4274058c6vboxsync }
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync if (hardDisk)
71c8a528203c289a8585ce10ac6bafc4274058c6vboxsync {
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync hardDisk->COMGETTER(Id)(uuid.asOutParam());
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync rc = machine->AttachDevice(Bstr("LsiLogic"), pGetState.uIndex, 0, DeviceType_HardDisk, uuid);
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync if (FAILED(rc))
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync CHECK_ERROR (machine,
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync AttachDevice(Bstr("BusLogic"),
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync pGetState.uIndex, 0,
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync DeviceType_HardDisk, uuid));
71c8a528203c289a8585ce10ac6bafc4274058c6vboxsync }
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync else
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync rc = E_FAIL;
71c8a528203c289a8585ce10ac6bafc4274058c6vboxsync }
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync break;
71c8a528203c289a8585ce10ac6bafc4274058c6vboxsync }
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync
9e4ea89b1085fdaa5861e45a729d9c978db1a8f1vboxsync case MODIFYVM_SCSITYPE:
71c8a528203c289a8585ce10ac6bafc4274058c6vboxsync {
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync ComPtr<IStorageController> ctl;
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync if (!RTStrICmp(pValueUnion.psz, "LsiLogic"))
71c8a528203c289a8585ce10ac6bafc4274058c6vboxsync {
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync rc = machine->RemoveStorageController(Bstr("BusLogic"));
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync if (FAILED(rc))
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync CHECK_ERROR (machine, RemoveStorageController(Bstr("LsiLogic")));
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync CHECK_ERROR (machine,
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync AddStorageController(Bstr("LsiLogic"),
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync StorageBus_SCSI,
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync ctl.asOutParam()));
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync if (SUCCEEDED(rc))
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync CHECK_ERROR (ctl, COMSETTER(ControllerType)(StorageControllerType_LsiLogic));
71c8a528203c289a8585ce10ac6bafc4274058c6vboxsync }
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync else if (!RTStrICmp(pValueUnion.psz, "BusLogic"))
71c8a528203c289a8585ce10ac6bafc4274058c6vboxsync {
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync rc = machine->RemoveStorageController(Bstr("LsiLogic"));
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync if (FAILED(rc))
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync CHECK_ERROR (machine, RemoveStorageController(Bstr("BusLogic")));
71c8a528203c289a8585ce10ac6bafc4274058c6vboxsync
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync CHECK_ERROR (machine,
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync AddStorageController(Bstr("BusLogic"),
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync StorageBus_SCSI,
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync ctl.asOutParam()));
e214bb78026c1d64078b34ca9504d3f5abbc52efvboxsync
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync if (SUCCEEDED(rc))
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync CHECK_ERROR (ctl, COMSETTER(ControllerType)(StorageControllerType_BusLogic));
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync }
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync else
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync return errorArgument("Invalid --scsitype argument '%s'", pValueUnion.psz);
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync break;
71c8a528203c289a8585ce10ac6bafc4274058c6vboxsync }
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync
9e4ea89b1085fdaa5861e45a729d9c978db1a8f1vboxsync case MODIFYVM_SCSI:
71c8a528203c289a8585ce10ac6bafc4274058c6vboxsync {
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync if (!strcmp(pValueUnion.psz, "on") || !strcmp(pValueUnion.psz, "enable"))
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync {
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync ComPtr<IStorageController> ctl;
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync CHECK_ERROR (machine, AddStorageController(Bstr("BusLogic"), StorageBus_SCSI, ctl.asOutParam()));
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync if (SUCCEEDED(rc))
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync CHECK_ERROR (ctl, COMSETTER(ControllerType)(StorageControllerType_BusLogic));
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync }
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync else if (!strcmp(pValueUnion.psz, "off") || !strcmp(pValueUnion.psz, "disable"))
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync {
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync rc = machine->RemoveStorageController(Bstr("BusLogic"));
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync if (FAILED(rc))
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync CHECK_ERROR (machine, RemoveStorageController(Bstr("LsiLogic")));
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync }
71c8a528203c289a8585ce10ac6bafc4274058c6vboxsync break;
71c8a528203c289a8585ce10ac6bafc4274058c6vboxsync }
71c8a528203c289a8585ce10ac6bafc4274058c6vboxsync
9e4ea89b1085fdaa5861e45a729d9c978db1a8f1vboxsync case MODIFYVM_DVDPASSTHROUGH:
71c8a528203c289a8585ce10ac6bafc4274058c6vboxsync {
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync ComPtr<IMediumAttachment> dvdAttachment;
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync machine->GetMediumAttachment(Bstr("IDE Controller"), 1, 0, dvdAttachment.asOutParam());
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync ASSERT(dvdAttachment);
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync CHECK_ERROR (dvdAttachment, COMSETTER(Passthrough)(!strcmp(pValueUnion.psz, "on")));
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync break;
71c8a528203c289a8585ce10ac6bafc4274058c6vboxsync }
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync
9e4ea89b1085fdaa5861e45a729d9c978db1a8f1vboxsync case MODIFYVM_DVD:
71c8a528203c289a8585ce10ac6bafc4274058c6vboxsync {
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync ComPtr<IMedium> dvdMedium;
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync Bstr uuid(pValueUnion.psz);
71c8a528203c289a8585ce10ac6bafc4274058c6vboxsync
71c8a528203c289a8585ce10ac6bafc4274058c6vboxsync /* unmount? */
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync if (!strcmp(pValueUnion.psz, "none"))
71c8a528203c289a8585ce10ac6bafc4274058c6vboxsync {
fc148a6b23d25a87561beaffe0ba06c3ba93bf5avboxsync /* nothing to do, NULL object will cause unmount */
71c8a528203c289a8585ce10ac6bafc4274058c6vboxsync }
71c8a528203c289a8585ce10ac6bafc4274058c6vboxsync /* host drive? */
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync else if (!strncmp(pValueUnion.psz, "host:", 5))
71c8a528203c289a8585ce10ac6bafc4274058c6vboxsync {
71c8a528203c289a8585ce10ac6bafc4274058c6vboxsync ComPtr<IHost> host;
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync CHECK_ERROR (a->virtualBox, COMGETTER(Host)(host.asOutParam()));
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync rc = host->FindHostDVDDrive(Bstr(pValueUnion.psz + 5), dvdMedium.asOutParam());
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync if (!dvdMedium)
71c8a528203c289a8585ce10ac6bafc4274058c6vboxsync {
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync /* 2nd try: try with the real name, important on Linux+libhal */
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync char szPathReal[RTPATH_MAX];
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync if (RT_FAILURE(RTPathReal(pValueUnion.psz + 5, szPathReal, sizeof(szPathReal))))
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync {
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync errorArgument("Invalid host DVD drive name \"%s\"", pValueUnion.psz + 5);
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync rc = E_FAIL;
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync break;
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync }
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync rc = host->FindHostDVDDrive(Bstr(szPathReal), dvdMedium.asOutParam());
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync if (!dvdMedium)
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync {
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync errorArgument("Invalid host DVD drive name \"%s\"", pValueUnion.psz + 5);
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync rc = E_FAIL;
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync break;
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync }
71c8a528203c289a8585ce10ac6bafc4274058c6vboxsync }
71c8a528203c289a8585ce10ac6bafc4274058c6vboxsync }
71c8a528203c289a8585ce10ac6bafc4274058c6vboxsync else
71c8a528203c289a8585ce10ac6bafc4274058c6vboxsync {
71c8a528203c289a8585ce10ac6bafc4274058c6vboxsync /* first assume it's a UUID */
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync rc = a->virtualBox->GetDVDImage(uuid, dvdMedium.asOutParam());
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync if (FAILED(rc) || !dvdMedium)
71c8a528203c289a8585ce10ac6bafc4274058c6vboxsync {
71c8a528203c289a8585ce10ac6bafc4274058c6vboxsync /* must be a filename, check if it's in the collection */
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync rc = a->virtualBox->FindDVDImage(Bstr(pValueUnion.psz), dvdMedium.asOutParam());
71c8a528203c289a8585ce10ac6bafc4274058c6vboxsync /* not registered, do that on the fly */
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync if (!dvdMedium)
71c8a528203c289a8585ce10ac6bafc4274058c6vboxsync {
57b49c1557a310ee615bc0ee79dd2a2e92319a1bvboxsync Bstr emptyUUID;
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync CHECK_ERROR (a->virtualBox, OpenDVDImage(Bstr(pValueUnion.psz),
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync emptyUUID, dvdMedium.asOutParam()));
71c8a528203c289a8585ce10ac6bafc4274058c6vboxsync }
71c8a528203c289a8585ce10ac6bafc4274058c6vboxsync }
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync if (!dvdMedium)
71c8a528203c289a8585ce10ac6bafc4274058c6vboxsync {
71c8a528203c289a8585ce10ac6bafc4274058c6vboxsync rc = E_FAIL;
71c8a528203c289a8585ce10ac6bafc4274058c6vboxsync break;
71c8a528203c289a8585ce10ac6bafc4274058c6vboxsync }
71c8a528203c289a8585ce10ac6bafc4274058c6vboxsync }
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync /** @todo generalize this, allow arbitrary number of DVD drives
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync * and as a consequence multiple attachments and different
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync * storage controllers. */
32750ad95d5e2fe4bb368e751875b33094cfa973vboxsync if (dvdMedium)
32750ad95d5e2fe4bb368e751875b33094cfa973vboxsync dvdMedium->COMGETTER(Id)(uuid.asOutParam());
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync CHECK_ERROR (machine, MountMedium(Bstr("IDE Controller"), 1, 0, uuid));
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync break;
71c8a528203c289a8585ce10ac6bafc4274058c6vboxsync }
71c8a528203c289a8585ce10ac6bafc4274058c6vboxsync
9e4ea89b1085fdaa5861e45a729d9c978db1a8f1vboxsync case MODIFYVM_FLOPPY:
71c8a528203c289a8585ce10ac6bafc4274058c6vboxsync {
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync Bstr uuid(pValueUnion.psz);
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync ComPtr<IMedium> floppyMedium;
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync ComPtr<IMediumAttachment> floppyAttachment;
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync machine->GetMediumAttachment(Bstr("Floppy Controller"), 0, 0, floppyAttachment.asOutParam());
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync
71c8a528203c289a8585ce10ac6bafc4274058c6vboxsync /* disable? */
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync if (!strcmp(pValueUnion.psz, "disabled"))
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync {
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync /* disable the controller */
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync if (floppyAttachment)
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync CHECK_ERROR(machine, DetachDevice(Bstr("Floppy Controller"), 0, 0));
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync }
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync else
71c8a528203c289a8585ce10ac6bafc4274058c6vboxsync {
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync /* enable the controller */
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync if (!floppyAttachment)
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync CHECK_ERROR(machine, AttachDevice(Bstr("Floppy Controller"), 0, 0, DeviceType_Floppy, NULL));
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync /* unmount? */
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync if ( !strcmp(pValueUnion.psz, "none")
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync || !strcmp(pValueUnion.psz, "empty")) // deprecated
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync {
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync /* nothing to do, NULL object will cause unmount */
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync }
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync /* host drive? */
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync else if (!strncmp(pValueUnion.psz, "host:", 5))
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync {
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync ComPtr<IHost> host;
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync CHECK_ERROR(a->virtualBox, COMGETTER(Host)(host.asOutParam()));
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync rc = host->FindHostFloppyDrive(Bstr(pValueUnion.psz + 5), floppyMedium.asOutParam());
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync if (!floppyMedium)
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync {
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync errorArgument("Invalid host floppy drive name \"%s\"", pValueUnion.psz + 5);
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync rc = E_FAIL;
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync break;
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync }
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync }
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync else
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync {
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync /* first assume it's a UUID */
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync rc = a->virtualBox->GetFloppyImage(uuid, floppyMedium.asOutParam());
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync if (FAILED(rc) || !floppyMedium)
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync {
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync /* must be a filename, check if it's in the collection */
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync rc = a->virtualBox->FindFloppyImage(Bstr(pValueUnion.psz), floppyMedium.asOutParam());
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync /* not registered, do that on the fly */
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync if (!floppyMedium)
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync {
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync Bstr emptyUUID;
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync CHECK_ERROR (a->virtualBox,
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync OpenFloppyImage(Bstr(pValueUnion.psz),
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync emptyUUID,
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync floppyMedium.asOutParam()));
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync }
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync }
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync if (!floppyMedium)
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync {
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync rc = E_FAIL;
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync break;
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync }
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync }
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync floppyMedium->COMGETTER(Id)(uuid.asOutParam());
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync CHECK_ERROR (machine, MountMedium(Bstr("Floppy Controller"), 0, 0, uuid));
71c8a528203c289a8585ce10ac6bafc4274058c6vboxsync }
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync break;
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync }
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync
9e4ea89b1085fdaa5861e45a729d9c978db1a8f1vboxsync case MODIFYVM_NICTRACEFILE:
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync {
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync ComPtr<INetworkAdapter> nic;
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync if ((pGetState.uIndex < 1) && (pGetState.uIndex > NetworkAdapterCount))
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync return errorSyntax(USAGE_MODIFYVM,
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync "Missing or Invalid NIC slot number in '%s'",
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync pGetState.pDef->pszLong);
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync CHECK_ERROR_BREAK (machine, GetNetworkAdapter (pGetState.uIndex - 1, nic.asOutParam()));
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync ASSERT(nic);
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync CHECK_ERROR (nic, COMSETTER(TraceFile)(Bstr(pValueUnion.psz)));
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync break;
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync }
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync
9e4ea89b1085fdaa5861e45a729d9c978db1a8f1vboxsync case MODIFYVM_NICTRACE:
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync {
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync ComPtr<INetworkAdapter> nic;
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync if ((pGetState.uIndex < 1) && (pGetState.uIndex > NetworkAdapterCount))
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync return errorSyntax(USAGE_MODIFYVM,
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync "Missing or Invalid NIC slot number in '%s'",
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync pGetState.pDef->pszLong);
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync CHECK_ERROR_BREAK (machine, GetNetworkAdapter (pGetState.uIndex - 1, nic.asOutParam()));
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync ASSERT(nic);
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync if (!strcmp(pValueUnion.psz, "on"))
71c8a528203c289a8585ce10ac6bafc4274058c6vboxsync {
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync CHECK_ERROR (nic, COMSETTER(TraceEnabled)(TRUE));
71c8a528203c289a8585ce10ac6bafc4274058c6vboxsync }
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync else if (!strcmp(pValueUnion.psz, "off"))
71c8a528203c289a8585ce10ac6bafc4274058c6vboxsync {
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync CHECK_ERROR (nic, COMSETTER(TraceEnabled)(FALSE));
71c8a528203c289a8585ce10ac6bafc4274058c6vboxsync }
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync else
71c8a528203c289a8585ce10ac6bafc4274058c6vboxsync {
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync errorArgument("Invalid --nictrace%lu argument '%s'", pGetState.uIndex, pValueUnion.psz);
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync rc = E_FAIL;
71c8a528203c289a8585ce10ac6bafc4274058c6vboxsync }
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync break;
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync }
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync
9e4ea89b1085fdaa5861e45a729d9c978db1a8f1vboxsync case MODIFYVM_NICTYPE:
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync {
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync ComPtr<INetworkAdapter> nic;
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync if ((pGetState.uIndex < 1) && (pGetState.uIndex > NetworkAdapterCount))
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync return errorSyntax(USAGE_MODIFYVM,
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync "Missing or Invalid NIC slot number in '%s'",
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync pGetState.pDef->pszLong);
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync CHECK_ERROR_BREAK (machine, GetNetworkAdapter (pGetState.uIndex - 1, nic.asOutParam()));
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync ASSERT(nic);
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync if (!strcmp(pValueUnion.psz, "Am79C970A"))
71c8a528203c289a8585ce10ac6bafc4274058c6vboxsync {
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync CHECK_ERROR (nic, COMSETTER(AdapterType)(NetworkAdapterType_Am79C970A));
71c8a528203c289a8585ce10ac6bafc4274058c6vboxsync }
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync else if (!strcmp(pValueUnion.psz, "Am79C973"))
71c8a528203c289a8585ce10ac6bafc4274058c6vboxsync {
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync CHECK_ERROR (nic, COMSETTER(AdapterType)(NetworkAdapterType_Am79C973));
71c8a528203c289a8585ce10ac6bafc4274058c6vboxsync }
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync#ifdef VBOX_WITH_E1000
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync else if (!strcmp(pValueUnion.psz, "82540EM"))
71c8a528203c289a8585ce10ac6bafc4274058c6vboxsync {
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync CHECK_ERROR (nic, COMSETTER(AdapterType)(NetworkAdapterType_I82540EM));
71c8a528203c289a8585ce10ac6bafc4274058c6vboxsync }
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync else if (!strcmp(pValueUnion.psz, "82543GC"))
71c8a528203c289a8585ce10ac6bafc4274058c6vboxsync {
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync CHECK_ERROR (nic, COMSETTER(AdapterType)(NetworkAdapterType_I82543GC));
71c8a528203c289a8585ce10ac6bafc4274058c6vboxsync }
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync else if (!strcmp(pValueUnion.psz, "82545EM"))
5704a317c3b6bdf4b59f6a6ebe45d443296b1995vboxsync {
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync CHECK_ERROR (nic, COMSETTER(AdapterType)(NetworkAdapterType_I82545EM));
5704a317c3b6bdf4b59f6a6ebe45d443296b1995vboxsync }
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync#endif
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync#ifdef VBOX_WITH_VIRTIO
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync else if (!strcmp(pValueUnion.psz, "virtio"))
71c8a528203c289a8585ce10ac6bafc4274058c6vboxsync {
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync CHECK_ERROR (nic, COMSETTER(AdapterType)(NetworkAdapterType_Virtio));
71c8a528203c289a8585ce10ac6bafc4274058c6vboxsync }
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync#endif /* VBOX_WITH_VIRTIO */
71c8a528203c289a8585ce10ac6bafc4274058c6vboxsync else
71c8a528203c289a8585ce10ac6bafc4274058c6vboxsync {
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync errorArgument("Invalid NIC type '%s' specified for NIC %lu", pValueUnion.psz, pGetState.uIndex);
71c8a528203c289a8585ce10ac6bafc4274058c6vboxsync rc = E_FAIL;
71c8a528203c289a8585ce10ac6bafc4274058c6vboxsync }
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync break;
71c8a528203c289a8585ce10ac6bafc4274058c6vboxsync }
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync
9e4ea89b1085fdaa5861e45a729d9c978db1a8f1vboxsync case MODIFYVM_NICSPEED:
71c8a528203c289a8585ce10ac6bafc4274058c6vboxsync {
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync ComPtr<INetworkAdapter> nic;
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync if ((pGetState.uIndex < 1) && (pGetState.uIndex > NetworkAdapterCount))
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync return errorSyntax(USAGE_MODIFYVM,
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync "Missing or Invalid NIC slot number in '%s'",
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync pGetState.pDef->pszLong);
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync if ((pValueUnion.u32 < 1000) && (pValueUnion.u32 > 4000000))
71c8a528203c289a8585ce10ac6bafc4274058c6vboxsync {
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync errorArgument("Invalid --nicspeed%lu argument '%u'", pGetState.uIndex, pValueUnion.u32);
71c8a528203c289a8585ce10ac6bafc4274058c6vboxsync rc = E_FAIL;
71c8a528203c289a8585ce10ac6bafc4274058c6vboxsync break;
71c8a528203c289a8585ce10ac6bafc4274058c6vboxsync }
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync CHECK_ERROR_BREAK (machine, GetNetworkAdapter (pGetState.uIndex - 1, nic.asOutParam()));
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync ASSERT(nic);
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync CHECK_ERROR (nic, COMSETTER(LineSpeed)(pValueUnion.u32));
71c8a528203c289a8585ce10ac6bafc4274058c6vboxsync break;
71c8a528203c289a8585ce10ac6bafc4274058c6vboxsync }
71c8a528203c289a8585ce10ac6bafc4274058c6vboxsync
9e4ea89b1085fdaa5861e45a729d9c978db1a8f1vboxsync case MODIFYVM_NIC:
71c8a528203c289a8585ce10ac6bafc4274058c6vboxsync {
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync ComPtr<INetworkAdapter> nic;
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync if ((pGetState.uIndex < 1) && (pGetState.uIndex > NetworkAdapterCount))
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync return errorSyntax(USAGE_MODIFYVM,
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync "Missing or Invalid NIC slot number in '%s'",
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync pGetState.pDef->pszLong);
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync CHECK_ERROR_BREAK (machine, GetNetworkAdapter (pGetState.uIndex - 1, nic.asOutParam()));
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync ASSERT(nic);
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync if (!strcmp(pValueUnion.psz, "none"))
71c8a528203c289a8585ce10ac6bafc4274058c6vboxsync {
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync CHECK_ERROR (nic, COMSETTER(Enabled) (FALSE));
71c8a528203c289a8585ce10ac6bafc4274058c6vboxsync }
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync else if (!strcmp(pValueUnion.psz, "null"))
71c8a528203c289a8585ce10ac6bafc4274058c6vboxsync {
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync CHECK_ERROR (nic, COMSETTER(Enabled) (TRUE));
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync CHECK_ERROR (nic, Detach());
71c8a528203c289a8585ce10ac6bafc4274058c6vboxsync }
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync else if (!strcmp(pValueUnion.psz, "nat"))
71c8a528203c289a8585ce10ac6bafc4274058c6vboxsync {
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync CHECK_ERROR (nic, COMSETTER(Enabled) (TRUE));
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync CHECK_ERROR (nic, AttachToNAT());
71c8a528203c289a8585ce10ac6bafc4274058c6vboxsync }
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync else if ( !strcmp(pValueUnion.psz, "bridged")
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync || !strcmp(pValueUnion.psz, "hostif")) /* backward compatibility */
71c8a528203c289a8585ce10ac6bafc4274058c6vboxsync {
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync CHECK_ERROR (nic, COMSETTER(Enabled) (TRUE));
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync CHECK_ERROR (nic, AttachToBridgedInterface());
71c8a528203c289a8585ce10ac6bafc4274058c6vboxsync }
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync else if (!strcmp(pValueUnion.psz, "intnet"))
71c8a528203c289a8585ce10ac6bafc4274058c6vboxsync {
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync CHECK_ERROR (nic, COMSETTER(Enabled) (TRUE));
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync CHECK_ERROR (nic, AttachToInternalNetwork());
71c8a528203c289a8585ce10ac6bafc4274058c6vboxsync }
7bf07b1592dfaab1a4fb6d497fd0ff1302fb7585vboxsync#if defined(VBOX_WITH_NETFLT)
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync else if (!strcmp(pValueUnion.psz, "hostonly"))
14650dbf3041b8fcb092b55cf673bd6f392390c2vboxsync {
04c6e2bf4c47aa33be5ee50ac468b1b86b7125b4vboxsync
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync CHECK_ERROR (nic, COMSETTER(Enabled) (TRUE));
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync CHECK_ERROR (nic, AttachToHostOnlyInterface());
14650dbf3041b8fcb092b55cf673bd6f392390c2vboxsync }
7bf07b1592dfaab1a4fb6d497fd0ff1302fb7585vboxsync#endif
71c8a528203c289a8585ce10ac6bafc4274058c6vboxsync else
71c8a528203c289a8585ce10ac6bafc4274058c6vboxsync {
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync errorArgument("Invalid type '%s' specfied for NIC %lu", pValueUnion.psz, pGetState.uIndex);
71c8a528203c289a8585ce10ac6bafc4274058c6vboxsync rc = E_FAIL;
71c8a528203c289a8585ce10ac6bafc4274058c6vboxsync }
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync break;
71c8a528203c289a8585ce10ac6bafc4274058c6vboxsync }
71c8a528203c289a8585ce10ac6bafc4274058c6vboxsync
9e4ea89b1085fdaa5861e45a729d9c978db1a8f1vboxsync case MODIFYVM_CABLECONNECTED:
71c8a528203c289a8585ce10ac6bafc4274058c6vboxsync {
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync ComPtr<INetworkAdapter> nic;
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync if ((pGetState.uIndex < 1) && (pGetState.uIndex > NetworkAdapterCount))
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync return errorSyntax(USAGE_MODIFYVM,
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync "Missing or Invalid NIC slot number in '%s'",
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync pGetState.pDef->pszLong);
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync CHECK_ERROR_BREAK (machine, GetNetworkAdapter (pGetState.uIndex - 1, nic.asOutParam()));
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync ASSERT(nic);
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync if (!strcmp(pValueUnion.psz, "on"))
71c8a528203c289a8585ce10ac6bafc4274058c6vboxsync {
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync CHECK_ERROR (nic, COMSETTER(CableConnected)(TRUE));
71c8a528203c289a8585ce10ac6bafc4274058c6vboxsync }
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync else if (!strcmp(pValueUnion.psz, "off"))
71c8a528203c289a8585ce10ac6bafc4274058c6vboxsync {
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync CHECK_ERROR (nic, COMSETTER(CableConnected)(FALSE));
71c8a528203c289a8585ce10ac6bafc4274058c6vboxsync }
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync else
eecd0c10bb4e8ce1734d8b25a90e6ea61b9f862bvboxsync {
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync errorArgument("Invalid --cableconnected%lu argument '%s'", pGetState.uIndex, pValueUnion.psz);
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync rc = E_FAIL;
eecd0c10bb4e8ce1734d8b25a90e6ea61b9f862bvboxsync }
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync break;
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync }
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync
9e4ea89b1085fdaa5861e45a729d9c978db1a8f1vboxsync case MODIFYVM_BRIDGEADAPTER:
9e4ea89b1085fdaa5861e45a729d9c978db1a8f1vboxsync case MODIFYVM_HOSTONLYADAPTER:
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync {
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync ComPtr<INetworkAdapter> nic;
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync if ((pGetState.uIndex < 1) && (pGetState.uIndex > NetworkAdapterCount))
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync return errorSyntax(USAGE_MODIFYVM,
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync "Missing or Invalid NIC slot number in '%s'",
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync pGetState.pDef->pszLong);
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync CHECK_ERROR_BREAK (machine, GetNetworkAdapter (pGetState.uIndex - 1, nic.asOutParam()));
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync ASSERT(nic);
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync /* remove it? */
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync if (!strcmp(pValueUnion.psz, "none"))
9bb98d54790a98dad0ad6d9bdc5d319b6fdf0bffvboxsync {
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync CHECK_ERROR (nic, COMSETTER(HostInterface)(NULL));
9bb98d54790a98dad0ad6d9bdc5d319b6fdf0bffvboxsync }
71c8a528203c289a8585ce10ac6bafc4274058c6vboxsync else
71c8a528203c289a8585ce10ac6bafc4274058c6vboxsync {
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync CHECK_ERROR (nic, COMSETTER(HostInterface)(Bstr(pValueUnion.psz)));
71c8a528203c289a8585ce10ac6bafc4274058c6vboxsync }
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync break;
71c8a528203c289a8585ce10ac6bafc4274058c6vboxsync }
71c8a528203c289a8585ce10ac6bafc4274058c6vboxsync
9e4ea89b1085fdaa5861e45a729d9c978db1a8f1vboxsync case MODIFYVM_INTNET:
71c8a528203c289a8585ce10ac6bafc4274058c6vboxsync {
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync ComPtr<INetworkAdapter> nic;
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync if ((pGetState.uIndex < 1) && (pGetState.uIndex > NetworkAdapterCount))
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync return errorSyntax(USAGE_MODIFYVM,
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync "Missing or Invalid NIC slot number in '%s'",
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync pGetState.pDef->pszLong);
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync CHECK_ERROR_BREAK (machine, GetNetworkAdapter (pGetState.uIndex - 1, nic.asOutParam()));
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync ASSERT(nic);
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync /* remove it? */
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync if (!strcmp(pValueUnion.psz, "none"))
71c8a528203c289a8585ce10ac6bafc4274058c6vboxsync {
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync CHECK_ERROR (nic, COMSETTER(InternalNetwork)(NULL));
71c8a528203c289a8585ce10ac6bafc4274058c6vboxsync }
71c8a528203c289a8585ce10ac6bafc4274058c6vboxsync else
71c8a528203c289a8585ce10ac6bafc4274058c6vboxsync {
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync CHECK_ERROR (nic, COMSETTER(InternalNetwork)(Bstr(pValueUnion.psz)));
71c8a528203c289a8585ce10ac6bafc4274058c6vboxsync }
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync break;
71c8a528203c289a8585ce10ac6bafc4274058c6vboxsync }
71c8a528203c289a8585ce10ac6bafc4274058c6vboxsync
9e4ea89b1085fdaa5861e45a729d9c978db1a8f1vboxsync case MODIFYVM_NATNET:
71c8a528203c289a8585ce10ac6bafc4274058c6vboxsync {
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync ComPtr<INetworkAdapter> nic;
71c8a528203c289a8585ce10ac6bafc4274058c6vboxsync
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync if ((pGetState.uIndex < 1) && (pGetState.uIndex > NetworkAdapterCount))
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync return errorSyntax(USAGE_MODIFYVM,
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync "Missing or Invalid NIC slot number in '%s'",
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync pGetState.pDef->pszLong);
71c8a528203c289a8585ce10ac6bafc4274058c6vboxsync
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync CHECK_ERROR_BREAK (machine, GetNetworkAdapter (pGetState.uIndex - 1, nic.asOutParam()));
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync ASSERT(nic);
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync CHECK_ERROR (nic, COMSETTER(NATNetwork)(Bstr(pValueUnion.psz)));
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync break;
71c8a528203c289a8585ce10ac6bafc4274058c6vboxsync }
71c8a528203c289a8585ce10ac6bafc4274058c6vboxsync
9e4ea89b1085fdaa5861e45a729d9c978db1a8f1vboxsync case MODIFYVM_MACADDRESS:
71c8a528203c289a8585ce10ac6bafc4274058c6vboxsync {
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync ComPtr<INetworkAdapter> nic;
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync if ((pGetState.uIndex < 1) && (pGetState.uIndex > NetworkAdapterCount))
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync return errorSyntax(USAGE_MODIFYVM,
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync "Missing or Invalid NIC slot number in '%s'",
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync pGetState.pDef->pszLong);
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync CHECK_ERROR_BREAK (machine, GetNetworkAdapter (pGetState.uIndex - 1, nic.asOutParam()));
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync ASSERT(nic);
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync /* generate one? */
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync if (!strcmp(pValueUnion.psz, "auto"))
71c8a528203c289a8585ce10ac6bafc4274058c6vboxsync {
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync CHECK_ERROR (nic, COMSETTER(MACAddress)(NULL));
71c8a528203c289a8585ce10ac6bafc4274058c6vboxsync }
71c8a528203c289a8585ce10ac6bafc4274058c6vboxsync else
71c8a528203c289a8585ce10ac6bafc4274058c6vboxsync {
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync CHECK_ERROR (nic, COMSETTER(MACAddress)(Bstr(pValueUnion.psz)));
71c8a528203c289a8585ce10ac6bafc4274058c6vboxsync }
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync break;
71c8a528203c289a8585ce10ac6bafc4274058c6vboxsync }
71c8a528203c289a8585ce10ac6bafc4274058c6vboxsync
9e4ea89b1085fdaa5861e45a729d9c978db1a8f1vboxsync case MODIFYVM_UARTMODE:
71c8a528203c289a8585ce10ac6bafc4274058c6vboxsync {
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync ComPtr<ISerialPort> uart;
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync char *pszIRQ = NULL;
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync if ((pGetState.uIndex < 1) && (pGetState.uIndex > SerialPortCount))
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync return errorSyntax(USAGE_MODIFYVM,
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync "Missing or Invalid Serial Port number in '%s'",
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync pGetState.pDef->pszLong);
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync CHECK_ERROR_BREAK (machine, GetSerialPort (pGetState.uIndex - 1, uart.asOutParam()));
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync ASSERT(uart);
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync if (!strcmp(pValueUnion.psz, "disconnected"))
71c8a528203c289a8585ce10ac6bafc4274058c6vboxsync {
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync CHECK_ERROR (uart, COMSETTER(HostMode) (PortMode_Disconnected));
71c8a528203c289a8585ce10ac6bafc4274058c6vboxsync }
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync else if ( !strcmp(pValueUnion.psz, "server")
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync || !strcmp(pValueUnion.psz, "client")
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync || !strcmp(pValueUnion.psz, "file"))
71c8a528203c289a8585ce10ac6bafc4274058c6vboxsync {
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync char *pszIRQ = NULL;
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync /**
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync * @todo: not the right way to get the second value for
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync * the argument, change this when RTGetOpt can return
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync * multiple values
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync */
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync pszIRQ = pGetState.argv[pGetState.iNext];
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync pGetState.iNext++;
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync if (!pszIRQ)
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync return errorSyntax(USAGE_MODIFYVM,
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync "Missing or Invalid argument to '%s'",
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync pGetState.pDef->pszLong);
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync CHECK_ERROR (uart, COMSETTER(Path) (Bstr(pszIRQ)));
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync if (!strcmp(pValueUnion.psz, "server"))
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync {
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync CHECK_ERROR (uart, COMSETTER(HostMode) (PortMode_HostPipe));
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync CHECK_ERROR (uart, COMSETTER(Server) (TRUE));
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync }
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync else if (!strcmp(pValueUnion.psz, "client"))
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync {
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync CHECK_ERROR (uart, COMSETTER(HostMode) (PortMode_HostPipe));
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync CHECK_ERROR (uart, COMSETTER(Server) (FALSE));
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync }
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync else if (!strcmp(pValueUnion.psz, "file"))
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync {
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync CHECK_ERROR (uart, COMSETTER(HostMode) (PortMode_RawFile));
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync }
71c8a528203c289a8585ce10ac6bafc4274058c6vboxsync }
71c8a528203c289a8585ce10ac6bafc4274058c6vboxsync else
71c8a528203c289a8585ce10ac6bafc4274058c6vboxsync {
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync CHECK_ERROR (uart, COMSETTER(Path) (Bstr(pValueUnion.psz)));
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync CHECK_ERROR (uart, COMSETTER(HostMode) (PortMode_HostDevice));
71c8a528203c289a8585ce10ac6bafc4274058c6vboxsync }
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync break;
71c8a528203c289a8585ce10ac6bafc4274058c6vboxsync }
71c8a528203c289a8585ce10ac6bafc4274058c6vboxsync
9e4ea89b1085fdaa5861e45a729d9c978db1a8f1vboxsync case MODIFYVM_UART:
71c8a528203c289a8585ce10ac6bafc4274058c6vboxsync {
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync ComPtr<ISerialPort> uart;
71c8a528203c289a8585ce10ac6bafc4274058c6vboxsync
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync if ((pGetState.uIndex < 1) && (pGetState.uIndex > SerialPortCount))
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync return errorSyntax(USAGE_MODIFYVM,
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync "Missing or Invalid Serial Port number in '%s'",
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync pGetState.pDef->pszLong);
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync CHECK_ERROR_BREAK (machine, GetSerialPort (pGetState.uIndex - 1, uart.asOutParam()));
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync ASSERT(uart);
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync if (!strcmp(pValueUnion.psz, "off") || !strcmp(pValueUnion.psz, "disable"))
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync CHECK_ERROR (uart, COMSETTER(Enabled) (FALSE));
71c8a528203c289a8585ce10ac6bafc4274058c6vboxsync else
71c8a528203c289a8585ce10ac6bafc4274058c6vboxsync {
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync char *pszIRQ = NULL;
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync uint32_t uVal = 0;
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync int vrc;
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync /**
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync * @todo: not the right way to get the second value for
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync * the argument, change this when RTGetOpt can return
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync * multiple values
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync */
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync pszIRQ = pGetState.argv[pGetState.iNext];
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync pGetState.iNext++;
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync if (!pszIRQ)
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync return errorSyntax(USAGE_MODIFYVM,
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync "Missing or Invalid argument to '%s'",
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync pGetState.pDef->pszLong);
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync vrc = RTStrToUInt32Ex(pszIRQ, NULL, 0, &uVal);
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync if (vrc != VINF_SUCCESS || uVal == 0)
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync return errorArgument("Error parsing UART I/O base '%s'", pszIRQ);
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync CHECK_ERROR (uart, COMSETTER(IRQ) (uVal));
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync vrc = RTStrToUInt32Ex(pValueUnion.psz, NULL, 0, &uVal);
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync if (vrc != VINF_SUCCESS || uVal == 0)
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync return errorArgument("Error parsing UART I/O base '%s'", pszIRQ);
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync CHECK_ERROR (uart, COMSETTER(IOBase) (uVal));
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync CHECK_ERROR (uart, COMSETTER(Enabled) (TRUE));
71c8a528203c289a8585ce10ac6bafc4274058c6vboxsync }
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync break;
71c8a528203c289a8585ce10ac6bafc4274058c6vboxsync }
71c8a528203c289a8585ce10ac6bafc4274058c6vboxsync
9e4ea89b1085fdaa5861e45a729d9c978db1a8f1vboxsync case MODIFYVM_GUESTSTATISTICSINTERVAL:
71c8a528203c289a8585ce10ac6bafc4274058c6vboxsync {
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync if (pValueUnion.u32 > 0)
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync CHECK_ERROR (machine, COMSETTER(StatisticsUpdateInterval)(pValueUnion.u32));
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync break;
71c8a528203c289a8585ce10ac6bafc4274058c6vboxsync }
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync#ifdef VBOX_WITH_MEM_BALLOONING
9e4ea89b1085fdaa5861e45a729d9c978db1a8f1vboxsync case MODIFYVM_GUESTMEMORYBALLOON:
71c8a528203c289a8585ce10ac6bafc4274058c6vboxsync {
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync if (pValueUnion.u32 > 0)
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync CHECK_ERROR (machine, COMSETTER(MemoryBalloonSize)(pValueUnion.u32));
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync break;
71c8a528203c289a8585ce10ac6bafc4274058c6vboxsync }
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync#endif
71c8a528203c289a8585ce10ac6bafc4274058c6vboxsync
9e4ea89b1085fdaa5861e45a729d9c978db1a8f1vboxsync case MODIFYVM_AUDIOCONTROLLER:
71c8a528203c289a8585ce10ac6bafc4274058c6vboxsync {
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync if (pValueUnion.psz)
71c8a528203c289a8585ce10ac6bafc4274058c6vboxsync {
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync ComPtr<IAudioAdapter> audioAdapter;
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync machine->COMGETTER(AudioAdapter)(audioAdapter.asOutParam());
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync ASSERT(audioAdapter);
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync if (!strcmp(pValueUnion.psz, "sb16"))
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync CHECK_ERROR (audioAdapter, COMSETTER(AudioController)(AudioControllerType_SB16));
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync else if (!strcmp(pValueUnion.psz, "ac97"))
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync CHECK_ERROR (audioAdapter, COMSETTER(AudioController)(AudioControllerType_AC97));
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync else
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync {
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync errorArgument("Invalid --audiocontroller argument '%s'", pValueUnion.psz);
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync rc = E_FAIL;
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync }
71c8a528203c289a8585ce10ac6bafc4274058c6vboxsync }
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync break;
71c8a528203c289a8585ce10ac6bafc4274058c6vboxsync }
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync
9e4ea89b1085fdaa5861e45a729d9c978db1a8f1vboxsync case MODIFYVM_AUDIO:
71c8a528203c289a8585ce10ac6bafc4274058c6vboxsync {
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync if (pValueUnion.psz)
71c8a528203c289a8585ce10ac6bafc4274058c6vboxsync {
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync ComPtr<IAudioAdapter> audioAdapter;
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync machine->COMGETTER(AudioAdapter)(audioAdapter.asOutParam());
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync ASSERT(audioAdapter);
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync /* disable? */
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync if (!strcmp(pValueUnion.psz, "none"))
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync {
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync CHECK_ERROR (audioAdapter, COMSETTER(Enabled)(false));
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync }
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync else if (!strcmp(pValueUnion.psz, "null"))
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync {
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync CHECK_ERROR (audioAdapter, COMSETTER(AudioDriver)(AudioDriverType_Null));
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync CHECK_ERROR (audioAdapter, COMSETTER(Enabled)(true));
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync }
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync#ifdef RT_OS_WINDOWS
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync#ifdef VBOX_WITH_WINMM
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync else if (!strcmp(pValueUnion.psz, "winmm"))
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync {
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync CHECK_ERROR (audioAdapter, COMSETTER(AudioDriver)(AudioDriverType_WinMM));
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync CHECK_ERROR (audioAdapter, COMSETTER(Enabled)(true));
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync }
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync#endif
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync else if (!strcmp(pValueUnion.psz, "dsound"))
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync {
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync CHECK_ERROR (audioAdapter, COMSETTER(AudioDriver)(AudioDriverType_DirectSound));
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync CHECK_ERROR (audioAdapter, COMSETTER(Enabled)(true));
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync }
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync#endif /* RT_OS_WINDOWS */
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync#ifdef RT_OS_LINUX
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync else if (!strcmp(pValueUnion.psz, "oss"))
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync {
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync CHECK_ERROR (audioAdapter, COMSETTER(AudioDriver)(AudioDriverType_OSS));
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync CHECK_ERROR (audioAdapter, COMSETTER(Enabled)(true));
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync }
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync# ifdef VBOX_WITH_ALSA
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync else if (!strcmp(pValueUnion.psz, "alsa"))
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync {
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync CHECK_ERROR (audioAdapter, COMSETTER(AudioDriver)(AudioDriverType_ALSA));
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync CHECK_ERROR (audioAdapter, COMSETTER(Enabled)(true));
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync }
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync# endif
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync# ifdef VBOX_WITH_PULSE
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync else if (!strcmp(pValueUnion.psz, "pulse"))
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync {
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync CHECK_ERROR (audioAdapter, COMSETTER(AudioDriver)(AudioDriverType_Pulse));
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync CHECK_ERROR (audioAdapter, COMSETTER(Enabled)(true));
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync }
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync# endif
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync#endif /* !RT_OS_LINUX */
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync#ifdef RT_OS_SOLARIS
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync else if (!strcmp(pValueUnion.psz, "solaudio"))
71c8a528203c289a8585ce10ac6bafc4274058c6vboxsync {
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync CHECK_ERROR (audioAdapter, COMSETTER(AudioDriver)(AudioDriverType_SolAudio));
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync CHECK_ERROR (audioAdapter, COMSETTER(Enabled)(true));
71c8a528203c289a8585ce10ac6bafc4274058c6vboxsync }
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync# ifdef VBOX_WITH_SOLARIS_OSS
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync else if (!strcmp(pValueUnion.psz, "oss"))
71c8a528203c289a8585ce10ac6bafc4274058c6vboxsync {
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync CHECK_ERROR (audioAdapter, COMSETTER(AudioDriver)(AudioDriverType_OSS));
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync CHECK_ERROR (audioAdapter, COMSETTER(Enabled)(true));
71c8a528203c289a8585ce10ac6bafc4274058c6vboxsync }
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync# endif
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync#endif /* !RT_OS_SOLARIS */
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync#ifdef RT_OS_DARWIN
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync else if (!strcmp(pValueUnion.psz, "coreaudio"))
801238b286a80a5dd67ba56a1f26c0bc98a2a1eavboxsync {
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync CHECK_ERROR (audioAdapter, COMSETTER(AudioDriver)(AudioDriverType_CoreAudio));
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync CHECK_ERROR (audioAdapter, COMSETTER(Enabled)(true));
801238b286a80a5dd67ba56a1f26c0bc98a2a1eavboxsync }
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync#endif /* !RT_OS_DARWIN */
71c8a528203c289a8585ce10ac6bafc4274058c6vboxsync else
71c8a528203c289a8585ce10ac6bafc4274058c6vboxsync {
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync errorArgument("Invalid --audio argument '%s'", pValueUnion.psz);
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync rc = E_FAIL;
71c8a528203c289a8585ce10ac6bafc4274058c6vboxsync }
71c8a528203c289a8585ce10ac6bafc4274058c6vboxsync }
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync break;
71c8a528203c289a8585ce10ac6bafc4274058c6vboxsync }
71c8a528203c289a8585ce10ac6bafc4274058c6vboxsync
9e4ea89b1085fdaa5861e45a729d9c978db1a8f1vboxsync case MODIFYVM_CLIPBOARD:
71c8a528203c289a8585ce10ac6bafc4274058c6vboxsync {
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync if (pValueUnion.psz)
71c8a528203c289a8585ce10ac6bafc4274058c6vboxsync {
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync if (!strcmp(pValueUnion.psz, "disabled"))
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync {
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync CHECK_ERROR (machine, COMSETTER(ClipboardMode)(ClipboardMode_Disabled));
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync }
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync else if (!strcmp(pValueUnion.psz, "hosttoguest"))
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync {
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync CHECK_ERROR (machine, COMSETTER(ClipboardMode)(ClipboardMode_HostToGuest));
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync }
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync else if (!strcmp(pValueUnion.psz, "guesttohost"))
71c8a528203c289a8585ce10ac6bafc4274058c6vboxsync {
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync CHECK_ERROR (machine, COMSETTER(ClipboardMode)(ClipboardMode_GuestToHost));
71c8a528203c289a8585ce10ac6bafc4274058c6vboxsync }
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync else if (!strcmp(pValueUnion.psz, "bidirectional"))
71c8a528203c289a8585ce10ac6bafc4274058c6vboxsync {
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync CHECK_ERROR (machine, COMSETTER(ClipboardMode)(ClipboardMode_Bidirectional));
71c8a528203c289a8585ce10ac6bafc4274058c6vboxsync }
71c8a528203c289a8585ce10ac6bafc4274058c6vboxsync else
71c8a528203c289a8585ce10ac6bafc4274058c6vboxsync {
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync errorArgument("Invalid --clipboard argument '%s'", pValueUnion.psz);
71c8a528203c289a8585ce10ac6bafc4274058c6vboxsync rc = E_FAIL;
71c8a528203c289a8585ce10ac6bafc4274058c6vboxsync }
71c8a528203c289a8585ce10ac6bafc4274058c6vboxsync }
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync break;
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync }
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync#ifdef VBOX_WITH_VRDP
9e4ea89b1085fdaa5861e45a729d9c978db1a8f1vboxsync case MODIFYVM_VRDPPORT:
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync {
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync if (pValueUnion.psz)
71c8a528203c289a8585ce10ac6bafc4274058c6vboxsync {
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync ComPtr<IVRDPServer> vrdpServer;
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync machine->COMGETTER(VRDPServer)(vrdpServer.asOutParam());
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync ASSERT(vrdpServer);
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync if (!strcmp(pValueUnion.psz, "default"))
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync CHECK_ERROR (vrdpServer, COMSETTER(Ports)(Bstr("0")));
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync else
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync CHECK_ERROR (vrdpServer, COMSETTER(Ports)(Bstr(pValueUnion.psz)));
71c8a528203c289a8585ce10ac6bafc4274058c6vboxsync }
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync break;
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync }
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync
9e4ea89b1085fdaa5861e45a729d9c978db1a8f1vboxsync case MODIFYVM_VRDPADDRESS:
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync {
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync if (pValueUnion.psz)
71c8a528203c289a8585ce10ac6bafc4274058c6vboxsync {
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync ComPtr<IVRDPServer> vrdpServer;
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync machine->COMGETTER(VRDPServer)(vrdpServer.asOutParam());
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync ASSERT(vrdpServer);
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync CHECK_ERROR (vrdpServer, COMSETTER(NetAddress)(Bstr(pValueUnion.psz)));
71c8a528203c289a8585ce10ac6bafc4274058c6vboxsync }
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync break;
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync }
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync
9e4ea89b1085fdaa5861e45a729d9c978db1a8f1vboxsync case MODIFYVM_VRDPAUTHTYPE:
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync {
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync if (pValueUnion.psz)
71c8a528203c289a8585ce10ac6bafc4274058c6vboxsync {
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync ComPtr<IVRDPServer> vrdpServer;
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync machine->COMGETTER(VRDPServer)(vrdpServer.asOutParam());
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync ASSERT(vrdpServer);
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync if (!strcmp(pValueUnion.psz, "null"))
71c8a528203c289a8585ce10ac6bafc4274058c6vboxsync {
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync CHECK_ERROR (vrdpServer, COMSETTER(AuthType)(VRDPAuthType_Null));
71c8a528203c289a8585ce10ac6bafc4274058c6vboxsync }
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync else if (!strcmp(pValueUnion.psz, "external"))
71c8a528203c289a8585ce10ac6bafc4274058c6vboxsync {
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync CHECK_ERROR (vrdpServer, COMSETTER(AuthType)(VRDPAuthType_External));
71c8a528203c289a8585ce10ac6bafc4274058c6vboxsync }
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync else if (!strcmp(pValueUnion.psz, "guest"))
71c8a528203c289a8585ce10ac6bafc4274058c6vboxsync {
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync CHECK_ERROR (vrdpServer, COMSETTER(AuthType)(VRDPAuthType_Guest));
71c8a528203c289a8585ce10ac6bafc4274058c6vboxsync }
71c8a528203c289a8585ce10ac6bafc4274058c6vboxsync else
71c8a528203c289a8585ce10ac6bafc4274058c6vboxsync {
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync errorArgument("Invalid --vrdpauthtype argument '%s'", pValueUnion.psz);
71c8a528203c289a8585ce10ac6bafc4274058c6vboxsync rc = E_FAIL;
71c8a528203c289a8585ce10ac6bafc4274058c6vboxsync }
71c8a528203c289a8585ce10ac6bafc4274058c6vboxsync }
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync break;
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync }
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync
9e4ea89b1085fdaa5861e45a729d9c978db1a8f1vboxsync case MODIFYVM_VRDPMULTICON:
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync {
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync if (pValueUnion.psz)
71c8a528203c289a8585ce10ac6bafc4274058c6vboxsync {
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync ComPtr<IVRDPServer> vrdpServer;
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync machine->COMGETTER(VRDPServer)(vrdpServer.asOutParam());
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync ASSERT(vrdpServer);
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync if (!strcmp(pValueUnion.psz, "on"))
71c8a528203c289a8585ce10ac6bafc4274058c6vboxsync {
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync CHECK_ERROR (vrdpServer, COMSETTER(AllowMultiConnection)(true));
71c8a528203c289a8585ce10ac6bafc4274058c6vboxsync }
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync else if (!strcmp(pValueUnion.psz, "off"))
71c8a528203c289a8585ce10ac6bafc4274058c6vboxsync {
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync CHECK_ERROR (vrdpServer, COMSETTER(AllowMultiConnection)(false));
71c8a528203c289a8585ce10ac6bafc4274058c6vboxsync }
71c8a528203c289a8585ce10ac6bafc4274058c6vboxsync else
71c8a528203c289a8585ce10ac6bafc4274058c6vboxsync {
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync errorArgument("Invalid --vrdpmulticon argument '%s'", pValueUnion.psz);
71c8a528203c289a8585ce10ac6bafc4274058c6vboxsync rc = E_FAIL;
71c8a528203c289a8585ce10ac6bafc4274058c6vboxsync }
71c8a528203c289a8585ce10ac6bafc4274058c6vboxsync }
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync break;
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync }
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync
9e4ea89b1085fdaa5861e45a729d9c978db1a8f1vboxsync case MODIFYVM_VRDPREUSECON:
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync {
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync if (pValueUnion.psz)
71c8a528203c289a8585ce10ac6bafc4274058c6vboxsync {
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync ComPtr<IVRDPServer> vrdpServer;
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync machine->COMGETTER(VRDPServer)(vrdpServer.asOutParam());
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync ASSERT(vrdpServer);
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync if (!strcmp(pValueUnion.psz, "on"))
71c8a528203c289a8585ce10ac6bafc4274058c6vboxsync {
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync CHECK_ERROR (vrdpServer, COMSETTER(ReuseSingleConnection)(true));
71c8a528203c289a8585ce10ac6bafc4274058c6vboxsync }
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync else if (!strcmp(pValueUnion.psz, "off"))
71c8a528203c289a8585ce10ac6bafc4274058c6vboxsync {
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync CHECK_ERROR (vrdpServer, COMSETTER(ReuseSingleConnection)(false));
71c8a528203c289a8585ce10ac6bafc4274058c6vboxsync }
71c8a528203c289a8585ce10ac6bafc4274058c6vboxsync else
71c8a528203c289a8585ce10ac6bafc4274058c6vboxsync {
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync errorArgument("Invalid --vrdpreusecon argument '%s'", pValueUnion.psz);
71c8a528203c289a8585ce10ac6bafc4274058c6vboxsync rc = E_FAIL;
71c8a528203c289a8585ce10ac6bafc4274058c6vboxsync }
71c8a528203c289a8585ce10ac6bafc4274058c6vboxsync }
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync break;
71c8a528203c289a8585ce10ac6bafc4274058c6vboxsync }
71c8a528203c289a8585ce10ac6bafc4274058c6vboxsync
9e4ea89b1085fdaa5861e45a729d9c978db1a8f1vboxsync case MODIFYVM_VRDP:
71c8a528203c289a8585ce10ac6bafc4274058c6vboxsync {
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync if (pValueUnion.psz)
71c8a528203c289a8585ce10ac6bafc4274058c6vboxsync {
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync ComPtr<IVRDPServer> vrdpServer;
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync machine->COMGETTER(VRDPServer)(vrdpServer.asOutParam());
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync ASSERT(vrdpServer);
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync if (!strcmp(pValueUnion.psz, "on"))
71c8a528203c289a8585ce10ac6bafc4274058c6vboxsync {
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync CHECK_ERROR (vrdpServer, COMSETTER(Enabled)(true));
71c8a528203c289a8585ce10ac6bafc4274058c6vboxsync }
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync else if (!strcmp(pValueUnion.psz, "off"))
71c8a528203c289a8585ce10ac6bafc4274058c6vboxsync {
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync CHECK_ERROR (vrdpServer, COMSETTER(Enabled)(false));
71c8a528203c289a8585ce10ac6bafc4274058c6vboxsync }
71c8a528203c289a8585ce10ac6bafc4274058c6vboxsync else
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync {
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync errorArgument("Invalid --vrdp argument '%s'", pValueUnion.psz);
71c8a528203c289a8585ce10ac6bafc4274058c6vboxsync rc = E_FAIL;
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync }
71c8a528203c289a8585ce10ac6bafc4274058c6vboxsync }
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync break;
71c8a528203c289a8585ce10ac6bafc4274058c6vboxsync }
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync#endif /* VBOX_WITH_VRDP */
71c8a528203c289a8585ce10ac6bafc4274058c6vboxsync
9e4ea89b1085fdaa5861e45a729d9c978db1a8f1vboxsync case MODIFYVM_USBEHCI:
71c8a528203c289a8585ce10ac6bafc4274058c6vboxsync {
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync if (pValueUnion.psz)
71c8a528203c289a8585ce10ac6bafc4274058c6vboxsync {
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync ComPtr<IUSBController> UsbCtl;
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync CHECK_ERROR (machine, COMGETTER(USBController)(UsbCtl.asOutParam()));
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync if (SUCCEEDED(rc))
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync {
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync if (!strcmp(pValueUnion.psz, "on") || !strcmp(pValueUnion.psz, "enable"))
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync CHECK_ERROR (UsbCtl, COMSETTER(EnabledEhci)(true));
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync else if (!strcmp(pValueUnion.psz, "off") || !strcmp(pValueUnion.psz, "disable"))
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync CHECK_ERROR (UsbCtl, COMSETTER(EnabledEhci)(false));
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync else
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync return errorArgument("Invalid --usbehci argument '%s'", pValueUnion.psz);
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync }
71c8a528203c289a8585ce10ac6bafc4274058c6vboxsync }
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync break;
71c8a528203c289a8585ce10ac6bafc4274058c6vboxsync }
71c8a528203c289a8585ce10ac6bafc4274058c6vboxsync
9e4ea89b1085fdaa5861e45a729d9c978db1a8f1vboxsync case MODIFYVM_USB:
71c8a528203c289a8585ce10ac6bafc4274058c6vboxsync {
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync if (pValueUnion.psz)
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync {
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync ComPtr<IUSBController> UsbCtl;
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync CHECK_ERROR (machine, COMGETTER(USBController)(UsbCtl.asOutParam()));
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync if (SUCCEEDED(rc))
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync {
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync if (!strcmp(pValueUnion.psz, "on") || !strcmp(pValueUnion.psz, "enable"))
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync CHECK_ERROR (UsbCtl, COMSETTER(Enabled)(true));
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync else if (!strcmp(pValueUnion.psz, "off") || !strcmp(pValueUnion.psz, "disable"))
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync CHECK_ERROR (UsbCtl, COMSETTER(Enabled)(false));
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync else
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync return errorArgument("Invalid --usb argument '%s'", pValueUnion.psz);
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync }
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync }
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync break;
71c8a528203c289a8585ce10ac6bafc4274058c6vboxsync }
71c8a528203c289a8585ce10ac6bafc4274058c6vboxsync
9e4ea89b1085fdaa5861e45a729d9c978db1a8f1vboxsync case MODIFYVM_SNAPSHOTFOLDER:
e214bb78026c1d64078b34ca9504d3f5abbc52efvboxsync {
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync if (pValueUnion.psz)
a59528c40bbfdcee2e315756333f8c66f35b5accvboxsync {
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync if (!strcmp(pValueUnion.psz, "default"))
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync CHECK_ERROR (machine, COMSETTER(SnapshotFolder)(NULL));
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync else
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync CHECK_ERROR (machine, COMSETTER(SnapshotFolder)(Bstr(pValueUnion.psz)));
a59528c40bbfdcee2e315756333f8c66f35b5accvboxsync }
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync break;
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync }
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync
9e4ea89b1085fdaa5861e45a729d9c978db1a8f1vboxsync case MODIFYVM_TELEPORTER_ENABLED:
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync {
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync if (pValueUnion.psz)
a59528c40bbfdcee2e315756333f8c66f35b5accvboxsync {
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync if (!strcmp(pValueUnion.psz, "on"))
9e4ea89b1085fdaa5861e45a729d9c978db1a8f1vboxsync CHECK_ERROR (machine, COMSETTER(TeleporterEnabled)(1));
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync else if (!strcmp(pValueUnion.psz, "off"))
9e4ea89b1085fdaa5861e45a729d9c978db1a8f1vboxsync CHECK_ERROR (machine, COMSETTER(TeleporterEnabled)(0));
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync else
9e4ea89b1085fdaa5861e45a729d9c978db1a8f1vboxsync return errorArgument("Invalid --teleporterenabled value '%s'", pValueUnion.psz);
a59528c40bbfdcee2e315756333f8c66f35b5accvboxsync }
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync break;
e214bb78026c1d64078b34ca9504d3f5abbc52efvboxsync }
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync
9e4ea89b1085fdaa5861e45a729d9c978db1a8f1vboxsync case MODIFYVM_TELEPORTER_PORT:
a59528c40bbfdcee2e315756333f8c66f35b5accvboxsync {
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync if (pValueUnion.u32 > 0)
9e4ea89b1085fdaa5861e45a729d9c978db1a8f1vboxsync CHECK_ERROR(machine, COMSETTER(TeleporterPort)(pValueUnion.u32));
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync break;
a59528c40bbfdcee2e315756333f8c66f35b5accvboxsync }
e214bb78026c1d64078b34ca9504d3f5abbc52efvboxsync
9e4ea89b1085fdaa5861e45a729d9c978db1a8f1vboxsync case MODIFYVM_TELEPORTER_ADDRESS:
e214bb78026c1d64078b34ca9504d3f5abbc52efvboxsync {
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync if (pValueUnion.psz)
9e4ea89b1085fdaa5861e45a729d9c978db1a8f1vboxsync CHECK_ERROR(machine, COMSETTER(TeleporterAddress)(Bstr(pValueUnion.psz)));
9e4ea89b1085fdaa5861e45a729d9c978db1a8f1vboxsync break;
9e4ea89b1085fdaa5861e45a729d9c978db1a8f1vboxsync }
9e4ea89b1085fdaa5861e45a729d9c978db1a8f1vboxsync
9e4ea89b1085fdaa5861e45a729d9c978db1a8f1vboxsync case MODIFYVM_TELEPORTER_PASSWORD:
9e4ea89b1085fdaa5861e45a729d9c978db1a8f1vboxsync {
9e4ea89b1085fdaa5861e45a729d9c978db1a8f1vboxsync if (pValueUnion.psz)
9e4ea89b1085fdaa5861e45a729d9c978db1a8f1vboxsync CHECK_ERROR(machine, COMSETTER(TeleporterPassword)(Bstr(pValueUnion.psz)));
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync break;
e214bb78026c1d64078b34ca9504d3f5abbc52efvboxsync }
e214bb78026c1d64078b34ca9504d3f5abbc52efvboxsync
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync default:
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync {
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync errorGetOpt(USAGE_MODIFYVM, c, &pValueUnion);
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync rc = E_FAIL;
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync break;
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync }
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync }
71c8a528203c289a8585ce10ac6bafc4274058c6vboxsync }
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync /* commit changes */
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync if (SUCCEEDED(rc))
147e101bcd061b5e085e4a2c0cc9fc35546ff1aavboxsync CHECK_ERROR (machine, SaveSettings());
71c8a528203c289a8585ce10ac6bafc4274058c6vboxsync
71c8a528203c289a8585ce10ac6bafc4274058c6vboxsync /* it's important to always close sessions */
71c8a528203c289a8585ce10ac6bafc4274058c6vboxsync a->session->Close();
71c8a528203c289a8585ce10ac6bafc4274058c6vboxsync
71c8a528203c289a8585ce10ac6bafc4274058c6vboxsync return SUCCEEDED(rc) ? 0 : 1;
71c8a528203c289a8585ce10ac6bafc4274058c6vboxsync}
71c8a528203c289a8585ce10ac6bafc4274058c6vboxsync
71c8a528203c289a8585ce10ac6bafc4274058c6vboxsync#endif /* !VBOX_ONLY_DOCS */