VBoxManage.cpp revision b8ae33177906f4130b85b7c861cae0e78ed4859b
6ef855ecf2121f708685307839f1262e0db1a024vboxsync * VBoxManage - VirtualBox's command-line interface.
441579693f771e49eb05f2bd20c316232155675bvboxsync * Copyright (C) 2006-2009 Sun Microsystems, Inc.
6ef855ecf2121f708685307839f1262e0db1a024vboxsync * This file is part of VirtualBox Open Source Edition (OSE), as
6ef855ecf2121f708685307839f1262e0db1a024vboxsync * available from http://www.virtualbox.org. This file is free software;
6ef855ecf2121f708685307839f1262e0db1a024vboxsync * you can redistribute it and/or modify it under the terms of the GNU
6ef855ecf2121f708685307839f1262e0db1a024vboxsync * General Public License (GPL) as published by the Free Software
6ef855ecf2121f708685307839f1262e0db1a024vboxsync * Foundation, in version 2 as it comes in the "COPYING" file of the
6ef855ecf2121f708685307839f1262e0db1a024vboxsync * VirtualBox OSE distribution. VirtualBox OSE is distributed in the
6ef855ecf2121f708685307839f1262e0db1a024vboxsync * hope that it will be useful, but WITHOUT ANY WARRANTY of any kind.
6ef855ecf2121f708685307839f1262e0db1a024vboxsync * Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa
6ef855ecf2121f708685307839f1262e0db1a024vboxsync * Clara, CA 95054 USA or visit http://www.sun.com if you need
6ef855ecf2121f708685307839f1262e0db1a024vboxsync * additional information or have any questions.
6ef855ecf2121f708685307839f1262e0db1a024vboxsync/*******************************************************************************
6ef855ecf2121f708685307839f1262e0db1a024vboxsync* Header Files *
6ef855ecf2121f708685307839f1262e0db1a024vboxsync*******************************************************************************/
6ef855ecf2121f708685307839f1262e0db1a024vboxsync#endif /* !VBOX_ONLY_DOCS */
6ef855ecf2121f708685307839f1262e0db1a024vboxsyncusing namespace com;
6ef855ecf2121f708685307839f1262e0db1a024vboxsync/** command handler type */
6ef855ecf2121f708685307839f1262e0db1a024vboxsync#endif /* !VBOX_ONLY_DOCS */
6ef855ecf2121f708685307839f1262e0db1a024vboxsync////////////////////////////////////////////////////////////////////////////////
6ef855ecf2121f708685307839f1262e0db1a024vboxsync// global variables
6ef855ecf2121f708685307839f1262e0db1a024vboxsync////////////////////////////////////////////////////////////////////////////////
6ef855ecf2121f708685307839f1262e0db1a024vboxsync////////////////////////////////////////////////////////////////////////////////
6ef855ecf2121f708685307839f1262e0db1a024vboxsync// functions
6ef855ecf2121f708685307839f1262e0db1a024vboxsync////////////////////////////////////////////////////////////////////////////////
6ef855ecf2121f708685307839f1262e0db1a024vboxsync * Print out progress on the console
6ef855ecf2121f708685307839f1262e0db1a024vboxsync while (SUCCEEDED(progress->COMGETTER(Completed(&fCompleted))))
6ef855ecf2121f708685307839f1262e0db1a024vboxsync progress->COMGETTER(OperationPercent(&ulCurrentOperationPercent));
6ef855ecf2121f708685307839f1262e0db1a024vboxsync progress->COMGETTER(OperationDescription(bstrOperationDescription.asOutParam()));
6ef855ecf2121f708685307839f1262e0db1a024vboxsync || (ulCurrentOperationPercent != ulLastOperationPercent)
6ef855ecf2121f708685307839f1262e0db1a024vboxsync RTPrintf("(%ld/%ld) %ls %ld%% => %ld%% (%d s remaining)\n", ulOperation + 1, cOperations, bstrOperationDescription.raw(), ulCurrentOperationPercent, ulCurrentPercent, lSecsRem);
6ef855ecf2121f708685307839f1262e0db1a024vboxsync ulLastOperationPercent = ulCurrentOperationPercent;
6ef855ecf2121f708685307839f1262e0db1a024vboxsync /* did we cross a 10% mark? */
6ef855ecf2121f708685307839f1262e0db1a024vboxsync if (((ulCurrentPercent / 10) > (ulLastPercent / 10)))
6ef855ecf2121f708685307839f1262e0db1a024vboxsync /* make sure to also print out missed steps */
6ef855ecf2121f708685307839f1262e0db1a024vboxsync for (ULONG curVal = (ulLastPercent / 10) * 10 + 10; curVal <= (ulCurrentPercent / 10) * 10; curVal += 10)
6ef855ecf2121f708685307839f1262e0db1a024vboxsync /* make sure the loop is not too tight */
6ef855ecf2121f708685307839f1262e0db1a024vboxsync /* complete the line. */
6ef855ecf2121f708685307839f1262e0db1a024vboxsync if (SUCCEEDED(progress->COMGETTER(ResultCode)(&iRc)))
6ef855ecf2121f708685307839f1262e0db1a024vboxsync#endif /* !VBOX_ONLY_DOCS */
6ef855ecf2121f708685307839f1262e0db1a024vboxsync RTPrintf("VirtualBox Command Line Management Interface Version "
6ef855ecf2121f708685307839f1262e0db1a024vboxsync "(C) 2005-2009 Sun Microsystems, Inc.\n"
6ef855ecf2121f708685307839f1262e0db1a024vboxsync "All rights reserved.\n"
6ef855ecf2121f708685307839f1262e0db1a024vboxsync return errorSyntax(USAGE_REGISTERVM, "Incorrect number of parameters");
6ef855ecf2121f708685307839f1262e0db1a024vboxsync /** @todo Ugly hack to get both the API interpretation of relative paths
6ef855ecf2121f708685307839f1262e0db1a024vboxsync * and the client's interpretation of relative paths. Remove after the API
6ef855ecf2121f708685307839f1262e0db1a024vboxsync * has been redesigned. */
6ef855ecf2121f708685307839f1262e0db1a024vboxsync rc = a->virtualBox->OpenMachine(Bstr(a->argv[0]), machine.asOutParam());
6ef855ecf2121f708685307839f1262e0db1a024vboxsync int vrc = RTPathAbs(a->argv[0], szVMFileAbs, sizeof(szVMFileAbs));
6ef855ecf2121f708685307839f1262e0db1a024vboxsync RTPrintf("Cannot convert filename \"%s\" to absolute path\n", a->argv[0]);
6ef855ecf2121f708685307839f1262e0db1a024vboxsync CHECK_ERROR(a->virtualBox, OpenMachine(Bstr(szVMFileAbs), machine.asOutParam()));
6ef855ecf2121f708685307839f1262e0db1a024vboxsync CHECK_ERROR(a->virtualBox, OpenMachine(Bstr(a->argv[0]), machine.asOutParam()));
6ef855ecf2121f708685307839f1262e0db1a024vboxsync CHECK_ERROR(a->virtualBox, RegisterMachine(machine));
6ef855ecf2121f708685307839f1262e0db1a024vboxsync { "-delete", 'd', RTGETOPT_REQ_NOTHING }, // deprecated
6ef855ecf2121f708685307839f1262e0db1a024vboxsync bool fDelete = false;
6ef855ecf2121f708685307839f1262e0db1a024vboxsync // start at 0 because main() has hacked both the argc and argv given to us
6ef855ecf2121f708685307839f1262e0db1a024vboxsync RTGetOptInit(&GetState, a->argc, a->argv, g_aUnregisterVMOptions, RT_ELEMENTS(g_aUnregisterVMOptions), 0, 0 /* fFlags */);
6ef855ecf2121f708685307839f1262e0db1a024vboxsync return errorSyntax(USAGE_UNREGISTERVM, "Invalid parameter '%s'", ValueUnion.psz);
6ef855ecf2121f708685307839f1262e0db1a024vboxsync return errorSyntax(USAGE_UNREGISTERVM, "Invalid option -%c", c);
6ef855ecf2121f708685307839f1262e0db1a024vboxsync return errorSyntax(USAGE_UNREGISTERVM, "Invalid option case %i", c);
6ef855ecf2121f708685307839f1262e0db1a024vboxsync return errorSyntax(USAGE_UNREGISTERVM, "unknown option: %s\n", ValueUnion.psz);
6ef855ecf2121f708685307839f1262e0db1a024vboxsync return errorSyntax(USAGE_UNREGISTERVM, "%s: %Rrs", ValueUnion.pDef->pszLong, c);
6ef855ecf2121f708685307839f1262e0db1a024vboxsync return errorSyntax(USAGE_UNREGISTERVM, "error: %Rrs", c);
6ef855ecf2121f708685307839f1262e0db1a024vboxsync /* check for required options */
6ef855ecf2121f708685307839f1262e0db1a024vboxsync return errorSyntax(USAGE_UNREGISTERVM, "VM name required");
6ef855ecf2121f708685307839f1262e0db1a024vboxsync /* assume it's a UUID */
6ef855ecf2121f708685307839f1262e0db1a024vboxsync rc = a->virtualBox->GetMachine(Guid(VMName).toUtf16(), machine.asOutParam());
6ef855ecf2121f708685307839f1262e0db1a024vboxsync /* must be a name */
6ef855ecf2121f708685307839f1262e0db1a024vboxsync CHECK_ERROR(a->virtualBox, FindMachine(Bstr(VMName), machine.asOutParam()));
6ef855ecf2121f708685307839f1262e0db1a024vboxsync CHECK_ERROR(a->virtualBox, UnregisterMachine(uuid, machine.asOutParam()));
6ef855ecf2121f708685307839f1262e0db1a024vboxsync bool fRegister = false;
6ef855ecf2121f708685307839f1262e0db1a024vboxsync for (int i = 0; i < a->argc; i++)
6ef855ecf2121f708685307839f1262e0db1a024vboxsync return errorArgument("Missing argument to '%s'", a->argv[i]);
6ef855ecf2121f708685307839f1262e0db1a024vboxsync return errorArgument("Missing argument to '%s'", a->argv[i]);
6ef855ecf2121f708685307839f1262e0db1a024vboxsync return errorArgument("Missing argument to '%s'", a->argv[i]);
6ef855ecf2121f708685307839f1262e0db1a024vboxsync return errorArgument("Missing argument to '%s'", a->argv[i]);
adbb0da2a65fc315cb37869fd2c6c80c7d8d5b8bvboxsync return errorArgument("Missing argument to '%s'", a->argv[i]);
adbb0da2a65fc315cb37869fd2c6c80c7d8d5b8bvboxsync return errorArgument("Invalid UUID format %s\n", a->argv[i]);
adbb0da2a65fc315cb37869fd2c6c80c7d8d5b8bvboxsync return errorSyntax(USAGE_CREATEVM, "Invalid parameter '%s'", Utf8Str(a->argv[i]).raw());
adbb0da2a65fc315cb37869fd2c6c80c7d8d5b8bvboxsync return errorSyntax(USAGE_CREATEVM, "Parameter --name is required");
58015215080abff9c3a752cb331b6efe29fe8933vboxsync return errorSyntax(USAGE_CREATEVM, "Either --basefolder or --settingsfile must be specified");
6ef855ecf2121f708685307839f1262e0db1a024vboxsync CreateMachine(name, osTypeId, baseFolder, Guid(id).toUtf16(), machine.asOutParam()));
6ef855ecf2121f708685307839f1262e0db1a024vboxsync CreateLegacyMachine(name, osTypeId, settingsFile, Guid(id).toUtf16(), machine.asOutParam()));
6ef855ecf2121f708685307839f1262e0db1a024vboxsync CHECK_ERROR_BREAK(a->virtualBox, RegisterMachine(machine));
6ef855ecf2121f708685307839f1262e0db1a024vboxsync CHECK_ERROR_BREAK(machine, COMGETTER(Id)(uuid.asOutParam()));
6ef855ecf2121f708685307839f1262e0db1a024vboxsync CHECK_ERROR_BREAK(machine, COMGETTER(SettingsFilePath)(settingsFile.asOutParam()));
6ef855ecf2121f708685307839f1262e0db1a024vboxsync "UUID: %s\n"
6ef855ecf2121f708685307839f1262e0db1a024vboxsync "Settings file: '%ls'\n",
6ef855ecf2121f708685307839f1262e0db1a024vboxsync * Parses a number.
6ef855ecf2121f708685307839f1262e0db1a024vboxsync * @returns Valid number on success.
6ef855ecf2121f708685307839f1262e0db1a024vboxsync * @returns 0 if invalid number. All necesary bitching has been done.
6ef855ecf2121f708685307839f1262e0db1a024vboxsync * @param psz Pointer to the nic number.
6ef855ecf2121f708685307839f1262e0db1a024vboxsyncunsigned parseNum(const char *psz, unsigned cMaxNum, const char *name)
6ef855ecf2121f708685307839f1262e0db1a024vboxsync return (unsigned)u32;
6ef855ecf2121f708685307839f1262e0db1a024vboxsync errorArgument("Invalid %s number '%s'", name, psz);
6ef855ecf2121f708685307839f1262e0db1a024vboxsync/** @todo refine this after HDD changes; MSC 8.0/64 has trouble with handleModifyVM. */
6ef855ecf2121f708685307839f1262e0db1a024vboxsync { "-type", 't', RTGETOPT_REQ_STRING }, // deprecated
6ef855ecf2121f708685307839f1262e0db1a024vboxsync // start at 0 because main() has hacked both the argc and argv given to us
6ef855ecf2121f708685307839f1262e0db1a024vboxsync RTGetOptInit(&GetState, a->argc, a->argv, g_aStartVMOptions, RT_ELEMENTS(g_aStartVMOptions), 0, 0 /* fFlags */);
6ef855ecf2121f708685307839f1262e0db1a024vboxsync return errorArgument("Invalid session type '%s'", ValueUnion.psz);
6ef855ecf2121f708685307839f1262e0db1a024vboxsync return errorSyntax(USAGE_STARTVM, "Invalid parameter '%s'", ValueUnion.psz);
6ef855ecf2121f708685307839f1262e0db1a024vboxsync return errorSyntax(USAGE_STARTVM, "Invalid option -%c", c);
6ef855ecf2121f708685307839f1262e0db1a024vboxsync return errorSyntax(USAGE_STARTVM, "Invalid option case %i", c);
6ef855ecf2121f708685307839f1262e0db1a024vboxsync return errorSyntax(USAGE_STARTVM, "unknown option: %s\n", ValueUnion.psz);
6ef855ecf2121f708685307839f1262e0db1a024vboxsync return errorSyntax(USAGE_STARTVM, "%s: %Rrs", ValueUnion.pDef->pszLong, c);
6ef855ecf2121f708685307839f1262e0db1a024vboxsync return errorSyntax(USAGE_STARTVM, "error: %Rrs", c);
6ef855ecf2121f708685307839f1262e0db1a024vboxsync /* check for required options */
6ef855ecf2121f708685307839f1262e0db1a024vboxsync return errorSyntax(USAGE_STARTVM, "VM name required");
6ef855ecf2121f708685307839f1262e0db1a024vboxsync /* assume it's a UUID */
6ef855ecf2121f708685307839f1262e0db1a024vboxsync rc = a->virtualBox->GetMachine(Guid(VMName).toUtf16(), machine.asOutParam());
6ef855ecf2121f708685307839f1262e0db1a024vboxsync /* must be a name */
6ef855ecf2121f708685307839f1262e0db1a024vboxsync CHECK_ERROR(a->virtualBox, FindMachine(Bstr(VMName), machine.asOutParam()));
6ef855ecf2121f708685307839f1262e0db1a024vboxsync /* make sure the VM process will start on the same display as VBoxManage */
6ef855ecf2121f708685307839f1262e0db1a024vboxsync CHECK_ERROR_RET(a->virtualBox, OpenRemoteSession(a->session, uuid, sessionType,
6ef855ecf2121f708685307839f1262e0db1a024vboxsync RTPrintf("Waiting for the remote session to open...\n");
6ef855ecf2121f708685307839f1262e0db1a024vboxsync CHECK_ERROR_RET(progress, WaitForCompletion (-1), 1);
6ef855ecf2121f708685307839f1262e0db1a024vboxsync CHECK_ERROR_RET(progress, COMGETTER(Completed)(&completed), rc);
6ef855ecf2121f708685307839f1262e0db1a024vboxsync CHECK_ERROR_RET(progress, COMGETTER(ResultCode)(&iRc), rc);
6ef855ecf2121f708685307839f1262e0db1a024vboxsync CHECK_ERROR_RET(progress, COMGETTER(ErrorInfo)(errorInfo.asOutParam()), 1);
6ef855ecf2121f708685307839f1262e0db1a024vboxsync RTPrintf("Remote session has been successfully opened.\n");
6ef855ecf2121f708685307839f1262e0db1a024vboxsync /* it's important to always close sessions */
6ef855ecf2121f708685307839f1262e0db1a024vboxsync return errorSyntax(USAGE_CONTROLVM, "Not enough parameters");
6ef855ecf2121f708685307839f1262e0db1a024vboxsync /* try to find the given machine */
6ef855ecf2121f708685307839f1262e0db1a024vboxsync CHECK_ERROR (a->virtualBox, GetMachine (uuid, machine.asOutParam()));
6ef855ecf2121f708685307839f1262e0db1a024vboxsync CHECK_ERROR (a->virtualBox, FindMachine (uuid, machine.asOutParam()));
6ef855ecf2121f708685307839f1262e0db1a024vboxsync /* open a session for the VM */
6ef855ecf2121f708685307839f1262e0db1a024vboxsync CHECK_ERROR_RET (a->virtualBox, OpenExistingSession (a->session, uuid), 1);
6ef855ecf2121f708685307839f1262e0db1a024vboxsync /* get the associated console */
6ef855ecf2121f708685307839f1262e0db1a024vboxsync CHECK_ERROR_BREAK (a->session, COMGETTER(Console)(console.asOutParam()));
6ef855ecf2121f708685307839f1262e0db1a024vboxsync /* ... and session machine */
6ef855ecf2121f708685307839f1262e0db1a024vboxsync CHECK_ERROR_BREAK (a->session, COMGETTER(Machine)(sessionMachine.asOutParam()));
6ef855ecf2121f708685307839f1262e0db1a024vboxsync /* which command? */
6ef855ecf2121f708685307839f1262e0db1a024vboxsync CHECK_ERROR_BREAK (console, PowerDown(progress.asOutParam()));
6ef855ecf2121f708685307839f1262e0db1a024vboxsync RTPrintf("Error: failed to power off machine. Error message: %lS\n", info.getText().raw());
6ef855ecf2121f708685307839f1262e0db1a024vboxsync RTPrintf("Error: failed to power off machine. No error message available!\n");
6ef855ecf2121f708685307839f1262e0db1a024vboxsync CHECK_ERROR_BREAK (console, SaveState(progress.asOutParam()));
6ef855ecf2121f708685307839f1262e0db1a024vboxsync RTPrintf("Error: failed to save machine state. Error message: %lS\n", info.getText().raw());
6ef855ecf2121f708685307839f1262e0db1a024vboxsync RTPrintf("Error: failed to save machine state. No error message available!\n");
6ef855ecf2121f708685307839f1262e0db1a024vboxsync /* get the machine debugger. */
6ef855ecf2121f708685307839f1262e0db1a024vboxsync CHECK_ERROR_BREAK(console, COMGETTER(Debugger)(debugger.asOutParam()));
6ef855ecf2121f708685307839f1262e0db1a024vboxsync else if (!strcmp(a->argv[1], "keyboardputscancode"))
6ef855ecf2121f708685307839f1262e0db1a024vboxsync CHECK_ERROR_BREAK(console, COMGETTER(Keyboard)(keyboard.asOutParam()));
6ef855ecf2121f708685307839f1262e0db1a024vboxsync errorArgument("Missing argument to '%s'. Expected IBM PC AT set 2 keyboard scancode(s) as hex byte(s).", a->argv[1]);
6ef855ecf2121f708685307839f1262e0db1a024vboxsync /* Arbitrary restrict the length of a sequence of scancodes to 1024. */
6ef855ecf2121f708685307839f1262e0db1a024vboxsync /* Process the command line. */
6ef855ecf2121f708685307839f1262e0db1a024vboxsync for (i = 1 + 1; i < a->argc && cScancodes < (int)RT_ELEMENTS(alScancodes); i++, cScancodes++)
6ef855ecf2121f708685307839f1262e0db1a024vboxsync int rc = RTStrToUInt8Ex(a->argv[i], NULL, 16, &u8Scancode);
6ef855ecf2121f708685307839f1262e0db1a024vboxsync RTPrintf("Error: converting '%s' returned %Rrc!\n", a->argv[i], rc);
6ef855ecf2121f708685307839f1262e0db1a024vboxsync RTPrintf("Error: '%s' is not a hex byte!\n", a->argv[i]);
383d5bd7b4b12176fbba2defc6c162e5b84e8ac0vboxsync RTPrintf("Error: too many scancodes, maximum %d allowed!\n", RT_ELEMENTS(alScancodes));
6ef855ecf2121f708685307839f1262e0db1a024vboxsync /* Send scancodes to the VM.
6ef855ecf2121f708685307839f1262e0db1a024vboxsync * Note: 'PutScancodes' did not work here. Only the first scancode was transmitted.
6ef855ecf2121f708685307839f1262e0db1a024vboxsync for (i = 0; i < cScancodes; i++)
6ef855ecf2121f708685307839f1262e0db1a024vboxsync CHECK_ERROR_BREAK(keyboard, PutScancode(alScancodes[i]));
6ef855ecf2121f708685307839f1262e0db1a024vboxsync RTPrintf("Scancode[%d]: 0x%02X\n", i, alScancodes[i]);
6ef855ecf2121f708685307839f1262e0db1a024vboxsync /* Get the number of network adapters */
6ef855ecf2121f708685307839f1262e0db1a024vboxsync CHECK_ERROR_BREAK (a->virtualBox, COMGETTER(SystemProperties) (info.asOutParam()));
6ef855ecf2121f708685307839f1262e0db1a024vboxsync CHECK_ERROR_BREAK (info, COMGETTER(NetworkAdapterCount) (&NetworkAdapterCount));
6ef855ecf2121f708685307839f1262e0db1a024vboxsync unsigned n = parseNum(&a->argv[1][12], NetworkAdapterCount, "NIC");
6ef855ecf2121f708685307839f1262e0db1a024vboxsync errorArgument("Missing argument to '%s'", a->argv[1]);
6ef855ecf2121f708685307839f1262e0db1a024vboxsync /* get the corresponding network adapter */
6ef855ecf2121f708685307839f1262e0db1a024vboxsync CHECK_ERROR_BREAK (sessionMachine, GetNetworkAdapter(n - 1, adapter.asOutParam()));
6ef855ecf2121f708685307839f1262e0db1a024vboxsync CHECK_ERROR_BREAK (adapter, COMSETTER(CableConnected)(TRUE));
6ef855ecf2121f708685307839f1262e0db1a024vboxsync CHECK_ERROR_BREAK (adapter, COMSETTER(CableConnected)(FALSE));
6ef855ecf2121f708685307839f1262e0db1a024vboxsync errorArgument("Invalid link state '%s'", Utf8Str(a->argv[2]).raw());
6ef855ecf2121f708685307839f1262e0db1a024vboxsync /* Get the number of network adapters */
6ef855ecf2121f708685307839f1262e0db1a024vboxsync CHECK_ERROR_BREAK (a->virtualBox, COMGETTER(SystemProperties) (info.asOutParam()));
6ef855ecf2121f708685307839f1262e0db1a024vboxsync CHECK_ERROR_BREAK (info, COMGETTER(NetworkAdapterCount) (&NetworkAdapterCount));
6ef855ecf2121f708685307839f1262e0db1a024vboxsync unsigned n = parseNum(&a->argv[1][3], NetworkAdapterCount, "NIC");
6ef855ecf2121f708685307839f1262e0db1a024vboxsync errorArgument("Missing argument to '%s'", a->argv[1]);
6ef855ecf2121f708685307839f1262e0db1a024vboxsync /* get the corresponding network adapter */
6ef855ecf2121f708685307839f1262e0db1a024vboxsync CHECK_ERROR_BREAK (sessionMachine, GetNetworkAdapter(n - 1, adapter.asOutParam()));
441579693f771e49eb05f2bd20c316232155675bvboxsync CHECK_ERROR_RET(adapter, COMSETTER(Enabled) (FALSE), 1);
6ef855ecf2121f708685307839f1262e0db1a024vboxsync CHECK_ERROR_RET(adapter, COMSETTER(Enabled) (TRUE), 1);
6ef855ecf2121f708685307839f1262e0db1a024vboxsync CHECK_ERROR_RET(adapter, COMSETTER(NATNetwork)(Bstr(a->argv[3])), 1);
6ef855ecf2121f708685307839f1262e0db1a024vboxsync CHECK_ERROR_RET(adapter, COMSETTER(Enabled) (TRUE), 1);
6ef855ecf2121f708685307839f1262e0db1a024vboxsync || !strcmp(a->argv[2], "hostif")) /* backward compatibility */
6ef855ecf2121f708685307839f1262e0db1a024vboxsync errorArgument("Missing argument to '%s'", a->argv[2]);
6ef855ecf2121f708685307839f1262e0db1a024vboxsync CHECK_ERROR_RET(adapter, COMSETTER(HostInterface)(Bstr(a->argv[3])), 1);
6ef855ecf2121f708685307839f1262e0db1a024vboxsync CHECK_ERROR_RET(adapter, COMSETTER(Enabled) (TRUE), 1);
6ef855ecf2121f708685307839f1262e0db1a024vboxsync CHECK_ERROR_RET(adapter, AttachToBridgedInterface(), 1);
6ef855ecf2121f708685307839f1262e0db1a024vboxsync errorArgument("Missing argument to '%s'", a->argv[2]);
6ef855ecf2121f708685307839f1262e0db1a024vboxsync CHECK_ERROR_RET(adapter, COMSETTER(InternalNetwork)(Bstr(a->argv[3])), 1);
6ef855ecf2121f708685307839f1262e0db1a024vboxsync CHECK_ERROR_RET(adapter, COMSETTER(Enabled) (TRUE), 1);
6ef855ecf2121f708685307839f1262e0db1a024vboxsync CHECK_ERROR_RET(adapter, AttachToInternalNetwork(), 1);
6ef855ecf2121f708685307839f1262e0db1a024vboxsync errorArgument("Missing argument to '%s'", a->argv[2]);
6ef855ecf2121f708685307839f1262e0db1a024vboxsync CHECK_ERROR_RET(adapter, COMSETTER(HostInterface)(Bstr(a->argv[3])), 1);
6ef855ecf2121f708685307839f1262e0db1a024vboxsync CHECK_ERROR_RET(adapter, COMSETTER(Enabled) (TRUE), 1);
6ef855ecf2121f708685307839f1262e0db1a024vboxsync CHECK_ERROR_RET(adapter, AttachToHostOnlyInterface(), 1);
6ef855ecf2121f708685307839f1262e0db1a024vboxsync errorArgument("Invalid type '%s' specfied for NIC %lu", Utf8Str(a->argv[2]).raw(), n + 1);
441579693f771e49eb05f2bd20c316232155675bvboxsync#endif /* VBOX_DYNAMIC_NET_ATTACH */
441579693f771e49eb05f2bd20c316232155675bvboxsync errorArgument("Missing argument to '%s'", a->argv[1]);
6ef855ecf2121f708685307839f1262e0db1a024vboxsync /* get the corresponding VRDP server */
6ef855ecf2121f708685307839f1262e0db1a024vboxsync sessionMachine->COMGETTER(VRDPServer)(vrdpServer.asOutParam());
6ef855ecf2121f708685307839f1262e0db1a024vboxsync CHECK_ERROR_BREAK (vrdpServer, COMSETTER(Enabled)(TRUE));
6ef855ecf2121f708685307839f1262e0db1a024vboxsync CHECK_ERROR_BREAK (vrdpServer, COMSETTER(Enabled)(FALSE));
441579693f771e49eb05f2bd20c316232155675bvboxsync errorArgument("Invalid vrdp server state '%s'", Utf8Str(a->argv[2]).raw());
6ef855ecf2121f708685307839f1262e0db1a024vboxsync#endif /* VBOX_WITH_VRDP */
6ef855ecf2121f708685307839f1262e0db1a024vboxsync errorSyntax(USAGE_CONTROLVM, "Not enough parameters");
6ef855ecf2121f708685307839f1262e0db1a024vboxsync // assume address
6ef855ecf2121f708685307839f1262e0db1a024vboxsync CHECK_ERROR_BREAK (a->virtualBox, COMGETTER(Host) (host.asOutParam()));
6ef855ecf2121f708685307839f1262e0db1a024vboxsync CHECK_ERROR_BREAK (host, COMGETTER(USBDevices) (ComSafeArrayAsOutParam(coll)));
6ef855ecf2121f708685307839f1262e0db1a024vboxsync CHECK_ERROR_BREAK (host, FindUSBDeviceByAddress (Bstr (a->argv [2]), dev.asOutParam()));
6ef855ecf2121f708685307839f1262e0db1a024vboxsync CHECK_ERROR_BREAK (dev, COMGETTER(Id) (usbId.asOutParam()));
6ef855ecf2121f708685307839f1262e0db1a024vboxsync CHECK_ERROR_BREAK (console, COMGETTER(USBDevices)(ComSafeArrayAsOutParam(coll)));
6ef855ecf2121f708685307839f1262e0db1a024vboxsync CHECK_ERROR_BREAK (console, FindUSBDeviceByAddress (Bstr (a->argv [2]),
6ef855ecf2121f708685307839f1262e0db1a024vboxsync CHECK_ERROR_BREAK (dev, COMGETTER(Id) (usbId.asOutParam()));
6ef855ecf2121f708685307839f1262e0db1a024vboxsync CHECK_ERROR_BREAK (console, AttachUSBDevice (usbId));
6ef855ecf2121f708685307839f1262e0db1a024vboxsync CHECK_ERROR_BREAK (console, DetachUSBDevice (usbId, dev.asOutParam()));
6ef855ecf2121f708685307839f1262e0db1a024vboxsync errorSyntax(USAGE_CONTROLVM, "Incorrect number of parameters");
6ef855ecf2121f708685307839f1262e0db1a024vboxsync CHECK_ERROR_BREAK(console, COMGETTER(Display)(display.asOutParam()));
6ef855ecf2121f708685307839f1262e0db1a024vboxsync CHECK_ERROR_BREAK(display, SetVideoModeHint(xres, yres, bpp, displayIdx));
6ef855ecf2121f708685307839f1262e0db1a024vboxsync errorArgument("Invalid parameter '%s'", a->argv[5]);
6ef855ecf2121f708685307839f1262e0db1a024vboxsync errorSyntax(USAGE_CONTROLVM, "Incorrect number of parameters");
6c6531128b39093daeac902a8705c0bdf15b31ccvboxsync CHECK_ERROR_BREAK(console, COMGETTER(Guest)(guest.asOutParam()));
6ef855ecf2121f708685307839f1262e0db1a024vboxsync CHECK_ERROR_BREAK(guest, SetCredentials(Bstr(a->argv[2]), Bstr(a->argv[3]), Bstr(a->argv[4]), fAllowLocalLogon));
6ef855ecf2121f708685307839f1262e0db1a024vboxsync errorSyntax(USAGE_CONTROLVM, "Incorrect number of parameters");
6ef855ecf2121f708685307839f1262e0db1a024vboxsync sessionMachine->COMGETTER(DVDDrive)(dvdDrive.asOutParam());
6ef855ecf2121f708685307839f1262e0db1a024vboxsync /* unmount? */
6ef855ecf2121f708685307839f1262e0db1a024vboxsync /* host drive? */
6ef855ecf2121f708685307839f1262e0db1a024vboxsync CHECK_ERROR(a->virtualBox, COMGETTER(Host)(host.asOutParam()));
6ef855ecf2121f708685307839f1262e0db1a024vboxsync rc = host->COMGETTER(DVDDrives)(ComSafeArrayAsOutParam(hostDVDs));
6ef855ecf2121f708685307839f1262e0db1a024vboxsync rc = host->FindHostDVDDrive(Bstr(a->argv[2] + 5), hostDVDDrive.asOutParam());
6ef855ecf2121f708685307839f1262e0db1a024vboxsync CHECK_ERROR(dvdDrive, CaptureHostDrive(hostDVDDrive));
6ef855ecf2121f708685307839f1262e0db1a024vboxsync /* first assume it's a UUID */
6ef855ecf2121f708685307839f1262e0db1a024vboxsync rc = a->virtualBox->GetDVDImage(uuid, dvdImage.asOutParam());
6ef855ecf2121f708685307839f1262e0db1a024vboxsync /* must be a filename, check if it's in the collection */
6ef855ecf2121f708685307839f1262e0db1a024vboxsync rc = a->virtualBox->FindDVDImage(Bstr(a->argv[2]), dvdImage.asOutParam());
6ef855ecf2121f708685307839f1262e0db1a024vboxsync /* not registered, do that on the fly */
6ef855ecf2121f708685307839f1262e0db1a024vboxsync CHECK_ERROR(a->virtualBox, OpenDVDImage(Bstr(a->argv[2]), emptyUUID, dvdImage.asOutParam()));
6ef855ecf2121f708685307839f1262e0db1a024vboxsync errorSyntax(USAGE_CONTROLVM, "Incorrect number of parameters");
6ef855ecf2121f708685307839f1262e0db1a024vboxsync sessionMachine->COMGETTER(FloppyDrive)(floppyDrive.asOutParam());
6ef855ecf2121f708685307839f1262e0db1a024vboxsync /* unmount? */
6ef855ecf2121f708685307839f1262e0db1a024vboxsync /* host drive? */
6ef855ecf2121f708685307839f1262e0db1a024vboxsync CHECK_ERROR(a->virtualBox, COMGETTER(Host)(host.asOutParam()));
6ef855ecf2121f708685307839f1262e0db1a024vboxsync com::SafeIfaceArray <IHostFloppyDrive> hostFloppies;
6ef855ecf2121f708685307839f1262e0db1a024vboxsync rc = host->COMGETTER(FloppyDrives)(ComSafeArrayAsOutParam(hostFloppies));
6ef855ecf2121f708685307839f1262e0db1a024vboxsync host->FindHostFloppyDrive(Bstr(a->argv[2] + 5), hostFloppyDrive.asOutParam());
6ef855ecf2121f708685307839f1262e0db1a024vboxsync CHECK_ERROR(floppyDrive, CaptureHostDrive(hostFloppyDrive));
6ef855ecf2121f708685307839f1262e0db1a024vboxsync /* first assume it's a UUID */
6ef855ecf2121f708685307839f1262e0db1a024vboxsync rc = a->virtualBox->GetFloppyImage(uuid, floppyImage.asOutParam());
1939436fa43cbf7f5cdc05a3830ed624d5fe4a6avboxsync /* must be a filename, check if it's in the collection */
6ef855ecf2121f708685307839f1262e0db1a024vboxsync rc = a->virtualBox->FindFloppyImage(Bstr(a->argv[2]), floppyImage.asOutParam());
6ef855ecf2121f708685307839f1262e0db1a024vboxsync /* not registered, do that on the fly */
6ef855ecf2121f708685307839f1262e0db1a024vboxsync CHECK_ERROR(a->virtualBox, OpenFloppyImage(Bstr(a->argv[2]), emptyUUID, floppyImage.asOutParam()));
6ef855ecf2121f708685307839f1262e0db1a024vboxsync else if ( !strcmp(a->argv[1], "--guestmemoryballoon")
6ef855ecf2121f708685307839f1262e0db1a024vboxsync errorSyntax(USAGE_CONTROLVM, "Incorrect number of parameters");
6ef855ecf2121f708685307839f1262e0db1a024vboxsync errorArgument("Error parsing guest memory balloon size '%s'", a->argv[2]);
6ef855ecf2121f708685307839f1262e0db1a024vboxsync /* guest is running; update IGuest */
6ef855ecf2121f708685307839f1262e0db1a024vboxsync rc = console->COMGETTER(Guest)(guest.asOutParam());
6ef855ecf2121f708685307839f1262e0db1a024vboxsync CHECK_ERROR(guest, COMSETTER(MemoryBalloonSize)(uVal));
6ef855ecf2121f708685307839f1262e0db1a024vboxsync else if ( !strcmp(a->argv[1], "--gueststatisticsinterval")
6ef855ecf2121f708685307839f1262e0db1a024vboxsync || !strcmp(a->argv[1], "-gueststatisticsinterval"))
6ef855ecf2121f708685307839f1262e0db1a024vboxsync errorSyntax(USAGE_CONTROLVM, "Incorrect number of parameters");
6ef855ecf2121f708685307839f1262e0db1a024vboxsync errorArgument("Error parsing guest statistics interval '%s'", a->argv[2]);
6ef855ecf2121f708685307839f1262e0db1a024vboxsync /* guest is running; update IGuest */
6ef855ecf2121f708685307839f1262e0db1a024vboxsync rc = console->COMGETTER(Guest)(guest.asOutParam());
6ef855ecf2121f708685307839f1262e0db1a024vboxsync CHECK_ERROR(guest, COMSETTER(StatisticsUpdateInterval)(uVal));
6ef855ecf2121f708685307839f1262e0db1a024vboxsync errorSyntax(USAGE_CONTROLVM, "Invalid parameter '%s'", Utf8Str(a->argv[1]).raw());
6ef855ecf2121f708685307839f1262e0db1a024vboxsync return errorSyntax(USAGE_DISCARDSTATE, "Incorrect number of parameters");
6ef855ecf2121f708685307839f1262e0db1a024vboxsync /* assume it's a UUID */
6ef855ecf2121f708685307839f1262e0db1a024vboxsync rc = a->virtualBox->GetMachine(Bstr(a->argv[0]), machine.asOutParam());
6ef855ecf2121f708685307839f1262e0db1a024vboxsync /* must be a name */
6ef855ecf2121f708685307839f1262e0db1a024vboxsync CHECK_ERROR(a->virtualBox, FindMachine(Bstr(a->argv[0]), machine.asOutParam()));
6ef855ecf2121f708685307839f1262e0db1a024vboxsync /* we have to open a session for this task */
6ef855ecf2121f708685307839f1262e0db1a024vboxsync CHECK_ERROR_BREAK(a->virtualBox, OpenSession(a->session, guid));
6ef855ecf2121f708685307839f1262e0db1a024vboxsync CHECK_ERROR_BREAK(a->session, COMGETTER(Console)(console.asOutParam()));
6ef855ecf2121f708685307839f1262e0db1a024vboxsync CHECK_ERROR_BREAK(console, ForgetSavedState(true));
6ef855ecf2121f708685307839f1262e0db1a024vboxsync return errorSyntax(USAGE_ADOPTSTATE, "Incorrect number of parameters");
6ef855ecf2121f708685307839f1262e0db1a024vboxsync /* assume it's a UUID */
6ef855ecf2121f708685307839f1262e0db1a024vboxsync rc = a->virtualBox->GetMachine(Bstr(a->argv[0]), machine.asOutParam());
6ef855ecf2121f708685307839f1262e0db1a024vboxsync /* must be a name */
6ef855ecf2121f708685307839f1262e0db1a024vboxsync CHECK_ERROR(a->virtualBox, FindMachine(Bstr(a->argv[0]), machine.asOutParam()));
6ef855ecf2121f708685307839f1262e0db1a024vboxsync /* we have to open a session for this task */
6ef855ecf2121f708685307839f1262e0db1a024vboxsync CHECK_ERROR_BREAK(a->virtualBox, OpenSession(a->session, guid));
6ef855ecf2121f708685307839f1262e0db1a024vboxsync CHECK_ERROR_BREAK(a->session, COMGETTER(Console)(console.asOutParam()));
6ef855ecf2121f708685307839f1262e0db1a024vboxsync CHECK_ERROR_BREAK(console, AdoptSavedState (Bstr (a->argv[1])));
6ef855ecf2121f708685307839f1262e0db1a024vboxsync return errorSyntax(USAGE_GETEXTRADATA, "Incorrect number of parameters");
6ef855ecf2121f708685307839f1262e0db1a024vboxsync /* global data? */
6ef855ecf2121f708685307839f1262e0db1a024vboxsync /* enumeration? */
6ef855ecf2121f708685307839f1262e0db1a024vboxsync HRESULT rcEnum = a->virtualBox->GetNextExtraDataKey(extraDataKey, nextExtraDataKey.asOutParam(),
6ef855ecf2121f708685307839f1262e0db1a024vboxsync RTPrintf("Key: %lS, Value: %lS\n", nextExtraDataKey.raw(), nextExtraDataValue.raw());
6ef855ecf2121f708685307839f1262e0db1a024vboxsync CHECK_ERROR(a->virtualBox, GetExtraData(Bstr(a->argv[1]), value.asOutParam()));
6ef855ecf2121f708685307839f1262e0db1a024vboxsync /* assume it's a UUID */
6ef855ecf2121f708685307839f1262e0db1a024vboxsync rc = a->virtualBox->GetMachine(Bstr(a->argv[0]), machine.asOutParam());
6ef855ecf2121f708685307839f1262e0db1a024vboxsync /* must be a name */
6ef855ecf2121f708685307839f1262e0db1a024vboxsync CHECK_ERROR(a->virtualBox, FindMachine(Bstr(a->argv[0]), machine.asOutParam()));
6ef855ecf2121f708685307839f1262e0db1a024vboxsync /* enumeration? */
6ef855ecf2121f708685307839f1262e0db1a024vboxsync HRESULT rcEnum = machine->GetNextExtraDataKey(extraDataKey, nextExtraDataKey.asOutParam(),
6ef855ecf2121f708685307839f1262e0db1a024vboxsync RTPrintf("Key: %lS, Value: %lS\n", nextExtraDataKey.raw(), nextExtraDataValue.raw());
6ef855ecf2121f708685307839f1262e0db1a024vboxsync CHECK_ERROR(machine, GetExtraData(Bstr(a->argv[1]), value.asOutParam()));
6ef855ecf2121f708685307839f1262e0db1a024vboxsync return errorSyntax(USAGE_SETEXTRADATA, "Not enough parameters");
6ef855ecf2121f708685307839f1262e0db1a024vboxsync /* global data? */
6ef855ecf2121f708685307839f1262e0db1a024vboxsync CHECK_ERROR(a->virtualBox, SetExtraData(Bstr(a->argv[1]), NULL));
6ef855ecf2121f708685307839f1262e0db1a024vboxsync CHECK_ERROR(a->virtualBox, SetExtraData(Bstr(a->argv[1]), Bstr(a->argv[2])));
6ef855ecf2121f708685307839f1262e0db1a024vboxsync return errorSyntax(USAGE_SETEXTRADATA, "Too many parameters");
6ef855ecf2121f708685307839f1262e0db1a024vboxsync /* assume it's a UUID */
6ef855ecf2121f708685307839f1262e0db1a024vboxsync rc = a->virtualBox->GetMachine(Bstr(a->argv[0]), machine.asOutParam());
6ef855ecf2121f708685307839f1262e0db1a024vboxsync /* must be a name */
6ef855ecf2121f708685307839f1262e0db1a024vboxsync CHECK_ERROR(a->virtualBox, FindMachine(Bstr(a->argv[0]), machine.asOutParam()));
6ef855ecf2121f708685307839f1262e0db1a024vboxsync CHECK_ERROR(machine, SetExtraData(Bstr(a->argv[1]), NULL));
6ef855ecf2121f708685307839f1262e0db1a024vboxsync CHECK_ERROR(machine, SetExtraData(Bstr(a->argv[1]), Bstr(a->argv[2])));
6ef855ecf2121f708685307839f1262e0db1a024vboxsync return errorSyntax(USAGE_SETEXTRADATA, "Too many parameters");
6ef855ecf2121f708685307839f1262e0db1a024vboxsync /* there must be two arguments: property name and value */
6ef855ecf2121f708685307839f1262e0db1a024vboxsync return errorSyntax(USAGE_SETPROPERTY, "Incorrect number of parameters");
6ef855ecf2121f708685307839f1262e0db1a024vboxsync a->virtualBox->COMGETTER(SystemProperties)(systemProperties.asOutParam());
6ef855ecf2121f708685307839f1262e0db1a024vboxsync /* reset to default? */
6ef855ecf2121f708685307839f1262e0db1a024vboxsync CHECK_ERROR(systemProperties, COMSETTER(DefaultHardDiskFolder)(NULL));
6ef855ecf2121f708685307839f1262e0db1a024vboxsync CHECK_ERROR(systemProperties, COMSETTER(DefaultHardDiskFolder)(Bstr(a->argv[1])));
6ef855ecf2121f708685307839f1262e0db1a024vboxsync /* reset to default? */
6ef855ecf2121f708685307839f1262e0db1a024vboxsync CHECK_ERROR(systemProperties, COMSETTER(DefaultMachineFolder)(NULL));
6ef855ecf2121f708685307839f1262e0db1a024vboxsync CHECK_ERROR(systemProperties, COMSETTER(DefaultMachineFolder)(Bstr(a->argv[1])));
6ef855ecf2121f708685307839f1262e0db1a024vboxsync /* reset to default? */
6ef855ecf2121f708685307839f1262e0db1a024vboxsync CHECK_ERROR(systemProperties, COMSETTER(RemoteDisplayAuthLibrary)(NULL));
6ef855ecf2121f708685307839f1262e0db1a024vboxsync CHECK_ERROR(systemProperties, COMSETTER(RemoteDisplayAuthLibrary)(Bstr(a->argv[1])));
6ef855ecf2121f708685307839f1262e0db1a024vboxsync /* reset to default? */
6ef855ecf2121f708685307839f1262e0db1a024vboxsync CHECK_ERROR(systemProperties, COMSETTER(WebServiceAuthLibrary)(NULL));
6ef855ecf2121f708685307839f1262e0db1a024vboxsync CHECK_ERROR(systemProperties, COMSETTER(WebServiceAuthLibrary)(Bstr(a->argv[1])));
6ef855ecf2121f708685307839f1262e0db1a024vboxsync return errorArgument("Error parsing Log history count '%s'", a->argv[1]);
6ef855ecf2121f708685307839f1262e0db1a024vboxsync CHECK_ERROR(systemProperties, COMSETTER(LogHistoryCount)(uVal));
6ef855ecf2121f708685307839f1262e0db1a024vboxsync return errorSyntax(USAGE_SETPROPERTY, "Invalid parameter '%s'", a->argv[0]);
6ef855ecf2121f708685307839f1262e0db1a024vboxsync /* we need at least a command and target */
6ef855ecf2121f708685307839f1262e0db1a024vboxsync return errorSyntax(USAGE_SHAREDFOLDER, "Not enough parameters");
6ef855ecf2121f708685307839f1262e0db1a024vboxsync /* assume it's a UUID */
6ef855ecf2121f708685307839f1262e0db1a024vboxsync rc = a->virtualBox->GetMachine(Bstr(a->argv[1]), machine.asOutParam());
6ef855ecf2121f708685307839f1262e0db1a024vboxsync /* must be a name */
6ef855ecf2121f708685307839f1262e0db1a024vboxsync CHECK_ERROR(a->virtualBox, FindMachine(Bstr(a->argv[1]), machine.asOutParam()));
6ef855ecf2121f708685307839f1262e0db1a024vboxsync /* we need at least four more parameters */
6ef855ecf2121f708685307839f1262e0db1a024vboxsync return errorSyntax(USAGE_SHAREDFOLDER_ADD, "Not enough parameters");
6ef855ecf2121f708685307839f1262e0db1a024vboxsync bool fTransient = false;
6ef855ecf2121f708685307839f1262e0db1a024vboxsync return errorArgument("Missing argument to '%s'", a->argv[i]);
6ef855ecf2121f708685307839f1262e0db1a024vboxsync return errorArgument("Missing argument to '%s'", a->argv[i]);
6ef855ecf2121f708685307839f1262e0db1a024vboxsync return errorSyntax(USAGE_SHAREDFOLDER_ADD, "Invalid parameter '%s'", Utf8Str(a->argv[i]).raw());
6ef855ecf2121f708685307839f1262e0db1a024vboxsync return errorSyntax(USAGE_SHAREDFOLDER_ADD, "No spaces allowed in parameter '-name'!");
6ef855ecf2121f708685307839f1262e0db1a024vboxsync /* required arguments */
6ef855ecf2121f708685307839f1262e0db1a024vboxsync return errorSyntax(USAGE_SHAREDFOLDER_ADD, "Parameters --name and --hostpath are required");
6ef855ecf2121f708685307839f1262e0db1a024vboxsync /* open an existing session for the VM */
6ef855ecf2121f708685307839f1262e0db1a024vboxsync CHECK_ERROR_RET(a->virtualBox, OpenExistingSession (a->session, uuid), 1);
6ef855ecf2121f708685307839f1262e0db1a024vboxsync /* get the session machine */
6ef855ecf2121f708685307839f1262e0db1a024vboxsync CHECK_ERROR_RET(a->session, COMGETTER(Machine)(machine.asOutParam()), 1);
6ef855ecf2121f708685307839f1262e0db1a024vboxsync /* get the session console */
6ef855ecf2121f708685307839f1262e0db1a024vboxsync CHECK_ERROR_RET(a->session, COMGETTER(Console)(console.asOutParam()), 1);
6ef855ecf2121f708685307839f1262e0db1a024vboxsync CHECK_ERROR(console, CreateSharedFolder(Bstr(name), Bstr(hostpath), fWritable));
6ef855ecf2121f708685307839f1262e0db1a024vboxsync /* open a session for the VM */
6ef855ecf2121f708685307839f1262e0db1a024vboxsync CHECK_ERROR_RET (a->virtualBox, OpenSession(a->session, uuid), 1);
6ef855ecf2121f708685307839f1262e0db1a024vboxsync /* get the mutable session machine */
6ef855ecf2121f708685307839f1262e0db1a024vboxsync a->session->COMGETTER(Machine)(machine.asOutParam());
6ef855ecf2121f708685307839f1262e0db1a024vboxsync CHECK_ERROR(machine, CreateSharedFolder(Bstr(name), Bstr(hostpath), fWritable));
6ef855ecf2121f708685307839f1262e0db1a024vboxsync /* we need at least two more parameters */
6ef855ecf2121f708685307839f1262e0db1a024vboxsync return errorSyntax(USAGE_SHAREDFOLDER_REMOVE, "Not enough parameters");
6ef855ecf2121f708685307839f1262e0db1a024vboxsync bool fTransient = false;
6ef855ecf2121f708685307839f1262e0db1a024vboxsync return errorArgument("Missing argument to '%s'", a->argv[i]);
6ef855ecf2121f708685307839f1262e0db1a024vboxsync return errorSyntax(USAGE_SHAREDFOLDER_REMOVE, "Invalid parameter '%s'", Utf8Str(a->argv[i]).raw());
6ef855ecf2121f708685307839f1262e0db1a024vboxsync /* required arguments */
6ef855ecf2121f708685307839f1262e0db1a024vboxsync return errorSyntax(USAGE_SHAREDFOLDER_REMOVE, "Parameter --name is required");
6182bafa91061adf250994da3e1cf8b7e91751f0vboxsync /* open an existing session for the VM */
6ef855ecf2121f708685307839f1262e0db1a024vboxsync CHECK_ERROR_RET(a->virtualBox, OpenExistingSession (a->session, uuid), 1);
6ef855ecf2121f708685307839f1262e0db1a024vboxsync /* get the session machine */
6ef855ecf2121f708685307839f1262e0db1a024vboxsync CHECK_ERROR_RET(a->session, COMGETTER(Machine)(machine.asOutParam()), 1);
6ef855ecf2121f708685307839f1262e0db1a024vboxsync /* get the session console */
6ef855ecf2121f708685307839f1262e0db1a024vboxsync CHECK_ERROR_RET(a->session, COMGETTER(Console)(console.asOutParam()), 1);
6ef855ecf2121f708685307839f1262e0db1a024vboxsync CHECK_ERROR(console, RemoveSharedFolder(Bstr(name)));
6ef855ecf2121f708685307839f1262e0db1a024vboxsync /* open a session for the VM */
6ef855ecf2121f708685307839f1262e0db1a024vboxsync CHECK_ERROR_RET (a->virtualBox, OpenSession(a->session, uuid), 1);
6ef855ecf2121f708685307839f1262e0db1a024vboxsync /* get the mutable session machine */
6ef855ecf2121f708685307839f1262e0db1a024vboxsync a->session->COMGETTER(Machine)(machine.asOutParam());
6ef855ecf2121f708685307839f1262e0db1a024vboxsync CHECK_ERROR(machine, RemoveSharedFolder(Bstr(name)));
6ef855ecf2121f708685307839f1262e0db1a024vboxsync /* commit and close the session */
6ef855ecf2121f708685307839f1262e0db1a024vboxsync return errorSyntax(USAGE_SETPROPERTY, "Invalid parameter '%s'", Utf8Str(a->argv[0]).raw());
6ef855ecf2121f708685307839f1262e0db1a024vboxsync /* at least one option: the UUID or name of the VM */
6ef855ecf2121f708685307839f1262e0db1a024vboxsync return errorSyntax(USAGE_VM_STATISTICS, "Incorrect number of parameters");
6ef855ecf2121f708685307839f1262e0db1a024vboxsync /* try to find the given machine */
6ef855ecf2121f708685307839f1262e0db1a024vboxsync CHECK_ERROR(a->virtualBox, GetMachine(uuid, machine.asOutParam()));
6ef855ecf2121f708685307839f1262e0db1a024vboxsync CHECK_ERROR(a->virtualBox, FindMachine(Bstr(a->argv[0]), machine.asOutParam()));
6ef855ecf2121f708685307839f1262e0db1a024vboxsync /* parse arguments. */
6ef855ecf2121f708685307839f1262e0db1a024vboxsync bool fReset = false;
6ef855ecf2121f708685307839f1262e0db1a024vboxsync return errorSyntax(USAGE_VM_STATISTICS, "Multiple --patterns options is not permitted");
6ef855ecf2121f708685307839f1262e0db1a024vboxsync return errorArgument("Missing argument to '%s'", a->argv[i]);
6ef855ecf2121f708685307839f1262e0db1a024vboxsync /* add: --file <filename> and --formatted */
6ef855ecf2121f708685307839f1262e0db1a024vboxsync return errorSyntax(USAGE_VM_STATISTICS, "Unknown option '%s'", a->argv[i]);
6ef855ecf2121f708685307839f1262e0db1a024vboxsync return errorSyntax(USAGE_VM_STATISTICS, "The --reset and --descriptions options does not mix");
6ef855ecf2121f708685307839f1262e0db1a024vboxsync /* open an existing session for the VM. */
6ef855ecf2121f708685307839f1262e0db1a024vboxsync CHECK_ERROR(a->virtualBox, OpenExistingSession(a->session, uuid));
6ef855ecf2121f708685307839f1262e0db1a024vboxsync /* get the session console. */
6ef855ecf2121f708685307839f1262e0db1a024vboxsync CHECK_ERROR(a->session, COMGETTER(Console)(console.asOutParam()));
6ef855ecf2121f708685307839f1262e0db1a024vboxsync /* get the machine debugger. */
6ef855ecf2121f708685307839f1262e0db1a024vboxsync CHECK_ERROR(console, COMGETTER(Debugger)(debugger.asOutParam()));
6ef855ecf2121f708685307839f1262e0db1a024vboxsync CHECK_ERROR(debugger, ResetStats(Bstr(pszPattern)));
6ef855ecf2121f708685307839f1262e0db1a024vboxsync CHECK_ERROR(debugger, GetStats(Bstr(pszPattern), fWithDescriptions, stats.asOutParam()));
6ef855ecf2121f708685307839f1262e0db1a024vboxsync /* if (fFormatted)
6ef855ecf2121f708685307839f1262e0db1a024vboxsync { big mess }
6ef855ecf2121f708685307839f1262e0db1a024vboxsync#endif /* !VBOX_ONLY_DOCS */
6ef855ecf2121f708685307839f1262e0db1a024vboxsync * Checks if any of the settings files were auto-converted and informs the
6ef855ecf2121f708685307839f1262e0db1a024vboxsync * user if so.
6ef855ecf2121f708685307839f1262e0db1a024vboxsync * @return @false if the program should terminate and @true otherwise.
6ef855ecf2121f708685307839f1262e0db1a024vboxsyncstatic bool checkForAutoConvertedSettings (ComPtr<IVirtualBox> virtualBox,
6ef855ecf2121f708685307839f1262e0db1a024vboxsync /* return early if nothing to do */
6ef855ecf2121f708685307839f1262e0db1a024vboxsync return true;
6ef855ecf2121f708685307839f1262e0db1a024vboxsync CHECK_ERROR_BREAK(virtualBox, COMGETTER(SettingsFormatVersion) (formatVersion.asOutParam()));
6ef855ecf2121f708685307839f1262e0db1a024vboxsync CHECK_ERROR_BREAK(virtualBox, COMGETTER(Machines)(ComSafeArrayAsOutParam (machines)));
6ef855ecf2121f708685307839f1262e0db1a024vboxsync CHECK_ERROR_BREAK(machines[i], COMGETTER(Accessible) (&accessible));
6ef855ecf2121f708685307839f1262e0db1a024vboxsync CHECK_ERROR_BREAK(machines[i], COMGETTER(SettingsFileVersion) (version.asOutParam()));
6ef855ecf2121f708685307839f1262e0db1a024vboxsync CHECK_ERROR_BREAK(machines[i], COMGETTER(SettingsFilePath) (filePath.asOutParam()));
6ef855ecf2121f708685307839f1262e0db1a024vboxsync fileList.push_back (Utf8StrFmt ("%ls (%ls)", filePath.raw(),
6ef855ecf2121f708685307839f1262e0db1a024vboxsync CHECK_ERROR_BREAK(virtualBox, COMGETTER(SettingsFileVersion) (version.asOutParam()));
6ef855ecf2121f708685307839f1262e0db1a024vboxsync CHECK_ERROR_BREAK(virtualBox, COMGETTER(SettingsFilePath) (filePath.asOutParam()));
6ef855ecf2121f708685307839f1262e0db1a024vboxsync fileList.push_back (Utf8StrFmt ("%ls (%ls)", filePath.raw(),
7d172bb4ed1217e28e28829193159954f6b40ef7vboxsync"WARNING! The following VirtualBox settings files have been automatically\n"
7d172bb4ed1217e28e28829193159954f6b40ef7vboxsync"converted to the new settings file format version '%ls':\n"
6ef855ecf2121f708685307839f1262e0db1a024vboxsync for (std::list <Utf8Str>::const_iterator f = fileList.begin();
6ef855ecf2121f708685307839f1262e0db1a024vboxsync"The current command was aborted to prevent overwriting the above settings\n"
6ef855ecf2121f708685307839f1262e0db1a024vboxsync"files with the results of the auto-conversion without your permission.\n"
6ef855ecf2121f708685307839f1262e0db1a024vboxsync"Please put one of the following command line switches to the beginning of\n"
6ef855ecf2121f708685307839f1262e0db1a024vboxsync"the VBoxManage command line and repeat the command:\n"
6ef855ecf2121f708685307839f1262e0db1a024vboxsync" --convertSettings - to save all auto-converted files (it will not\n"
6ef855ecf2121f708685307839f1262e0db1a024vboxsync" be possible to use these settings files with an\n"
6ef855ecf2121f708685307839f1262e0db1a024vboxsync" older version of VirtualBox in the future);\n"
6ef855ecf2121f708685307839f1262e0db1a024vboxsync" --convertSettingsBackup - to create backup copies of the settings files in\n"
6ef855ecf2121f708685307839f1262e0db1a024vboxsync" the old format before saving them in the new format;\n"
6ef855ecf2121f708685307839f1262e0db1a024vboxsync" --convertSettingsIgnore - to not save the auto-converted settings files.\n"
6ef855ecf2121f708685307839f1262e0db1a024vboxsync"Note that if you use --convertSettingsIgnore, the auto-converted settings files\n"
6ef855ecf2121f708685307839f1262e0db1a024vboxsync"will be implicitly saved in the new format anyway once you change a setting or\n"
6ef855ecf2121f708685307839f1262e0db1a024vboxsync"start a virtual machine, but NO backup copies will be created in this case.\n");
6ef855ecf2121f708685307839f1262e0db1a024vboxsync return false;
6ef855ecf2121f708685307839f1262e0db1a024vboxsync for (std::list <ComPtr <IMachine> >::const_iterator m = cvtMachines.begin();
6ef855ecf2121f708685307839f1262e0db1a024vboxsync CHECK_ERROR_BREAK((*m), COMGETTER(Id) (id.asOutParam()));
6ef855ecf2121f708685307839f1262e0db1a024vboxsync /* open a session for the VM */
6ef855ecf2121f708685307839f1262e0db1a024vboxsync CHECK_ERROR_BREAK (virtualBox, OpenSession (session, id));
6ef855ecf2121f708685307839f1262e0db1a024vboxsync CHECK_ERROR_BREAK(session, COMGETTER(Machine) (sm.asOutParam()));
6ef855ecf2121f708685307839f1262e0db1a024vboxsync CHECK_ERROR (sm, SaveSettingsWithBackup (bakFileName.asOutParam()));
6ef855ecf2121f708685307839f1262e0db1a024vboxsync CHECK_ERROR (virtualBox, SaveSettingsWithBackup (bakFileName.asOutParam()));
6ef855ecf2121f708685307839f1262e0db1a024vboxsync#endif /* !VBOX_ONLY_DOCS */
6ef855ecf2121f708685307839f1262e0db1a024vboxsync///////////////////////////////////////////////////////////////////////////////
6ef855ecf2121f708685307839f1262e0db1a024vboxsync * Before we do anything, init the runtime without loading
6ef855ecf2121f708685307839f1262e0db1a024vboxsync * the support driver.
6ef855ecf2121f708685307839f1262e0db1a024vboxsync ConvertSettings fConvertSettings = ConvertSettings_No;
6ef855ecf2121f708685307839f1262e0db1a024vboxsync /* global options */
6ef855ecf2121f708685307839f1262e0db1a024vboxsync /* Print version number, and do nothing else. */
6ef855ecf2121f708685307839f1262e0db1a024vboxsync RTPrintf("%sr%d\n", VBOX_VERSION_STRING, VBoxSVNRev ());
6ef855ecf2121f708685307839f1262e0db1a024vboxsync /* Special option to dump really all commands,
6ef855ecf2121f708685307839f1262e0db1a024vboxsync * even the ones not understood on this platform. */
6ef855ecf2121f708685307839f1262e0db1a024vboxsync /* suppress the logo */
152e1e373e38dea3d8cfe8bc06c7d3050cb130e2vboxsync else if ( !strcmp(argv[i], "--convertSettingsBackup")
152e1e373e38dea3d8cfe8bc06c7d3050cb130e2vboxsync else if ( !strcmp(argv[i], "--convertSettingsIgnore")
6ef855ecf2121f708685307839f1262e0db1a024vboxsync#else /* !VBOX_ONLY_DOCS */
return rc;
char *converted;
#ifdef USE_XPCOM_QUEUE
#ifdef USE_XPCOM_QUEUE
const char *command;
} commandHandlers[] =
#ifdef VBOX_WITH_GUEST_PROPS
#if defined(VBOX_WITH_NETFLT)
int commandIndex;
#ifdef USE_XPCOM_QUEUE
return rc != 0;