VBoxManageMisc.cpp revision 7c164968f8c38ee82b62a5429766bebf9c65c26d
3194da424708abdd288b28d96892b3a5f3f7df0bvboxsync * VBoxManage - VirtualBox's command-line interface.
3194da424708abdd288b28d96892b3a5f3f7df0bvboxsync * Copyright (C) 2006-2009 Sun Microsystems, Inc.
3194da424708abdd288b28d96892b3a5f3f7df0bvboxsync * This file is part of VirtualBox Open Source Edition (OSE), as
3194da424708abdd288b28d96892b3a5f3f7df0bvboxsync * available from http://www.virtualbox.org. This file is free software;
3194da424708abdd288b28d96892b3a5f3f7df0bvboxsync * you can redistribute it and/or modify it under the terms of the GNU
3194da424708abdd288b28d96892b3a5f3f7df0bvboxsync * General Public License (GPL) as published by the Free Software
3194da424708abdd288b28d96892b3a5f3f7df0bvboxsync * Foundation, in version 2 as it comes in the "COPYING" file of the
3194da424708abdd288b28d96892b3a5f3f7df0bvboxsync * VirtualBox OSE distribution. VirtualBox OSE is distributed in the
3194da424708abdd288b28d96892b3a5f3f7df0bvboxsync * hope that it will be useful, but WITHOUT ANY WARRANTY of any kind.
3194da424708abdd288b28d96892b3a5f3f7df0bvboxsync * Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa
3194da424708abdd288b28d96892b3a5f3f7df0bvboxsync * Clara, CA 95054 USA or visit http://www.sun.com if you need
930b5f872e89407f445d4000d4e4aaecaa6a0998vboxsync * additional information or have any questions.
930b5f872e89407f445d4000d4e4aaecaa6a0998vboxsync/*******************************************************************************
930b5f872e89407f445d4000d4e4aaecaa6a0998vboxsync* Header Files *
930b5f872e89407f445d4000d4e4aaecaa6a0998vboxsync*******************************************************************************/
3194da424708abdd288b28d96892b3a5f3f7df0bvboxsync#endif /* !VBOX_ONLY_DOCS */
3194da424708abdd288b28d96892b3a5f3f7df0bvboxsyncusing namespace com;
3194da424708abdd288b28d96892b3a5f3f7df0bvboxsync return errorSyntax(USAGE_REGISTERVM, "Incorrect number of parameters");
3194da424708abdd288b28d96892b3a5f3f7df0bvboxsync /** @todo Ugly hack to get both the API interpretation of relative paths
3194da424708abdd288b28d96892b3a5f3f7df0bvboxsync * and the client's interpretation of relative paths. Remove after the API
3194da424708abdd288b28d96892b3a5f3f7df0bvboxsync * has been redesigned. */
3194da424708abdd288b28d96892b3a5f3f7df0bvboxsync rc = a->virtualBox->OpenMachine(Bstr(a->argv[0]), machine.asOutParam());
3194da424708abdd288b28d96892b3a5f3f7df0bvboxsync int vrc = RTPathAbs(a->argv[0], szVMFileAbs, sizeof(szVMFileAbs));
3194da424708abdd288b28d96892b3a5f3f7df0bvboxsync RTPrintf("Cannot convert filename \"%s\" to absolute path\n", a->argv[0]);
3194da424708abdd288b28d96892b3a5f3f7df0bvboxsync CHECK_ERROR(a->virtualBox, OpenMachine(Bstr(szVMFileAbs), machine.asOutParam()));
3194da424708abdd288b28d96892b3a5f3f7df0bvboxsync CHECK_ERROR(a->virtualBox, OpenMachine(Bstr(a->argv[0]), machine.asOutParam()));
3194da424708abdd288b28d96892b3a5f3f7df0bvboxsync CHECK_ERROR(a->virtualBox, RegisterMachine(machine));
3194da424708abdd288b28d96892b3a5f3f7df0bvboxsync { "-delete", 'd', RTGETOPT_REQ_NOTHING }, // deprecated
3194da424708abdd288b28d96892b3a5f3f7df0bvboxsync bool fDelete = false;
3194da424708abdd288b28d96892b3a5f3f7df0bvboxsync // start at 0 because main() has hacked both the argc and argv given to us
3194da424708abdd288b28d96892b3a5f3f7df0bvboxsync RTGetOptInit(&GetState, a->argc, a->argv, g_aUnregisterVMOptions, RT_ELEMENTS(g_aUnregisterVMOptions),
3194da424708abdd288b28d96892b3a5f3f7df0bvboxsync return errorSyntax(USAGE_UNREGISTERVM, "Invalid parameter '%s'", ValueUnion.psz);
3194da424708abdd288b28d96892b3a5f3f7df0bvboxsync return errorSyntax(USAGE_UNREGISTERVM, "Invalid option -%c", c);
3194da424708abdd288b28d96892b3a5f3f7df0bvboxsync return errorSyntax(USAGE_UNREGISTERVM, "Invalid option case %i", c);
3194da424708abdd288b28d96892b3a5f3f7df0bvboxsync return errorSyntax(USAGE_UNREGISTERVM, "unknown option: %s\n", ValueUnion.psz);
3194da424708abdd288b28d96892b3a5f3f7df0bvboxsync return errorSyntax(USAGE_UNREGISTERVM, "%s: %Rrs", ValueUnion.pDef->pszLong, c);
3194da424708abdd288b28d96892b3a5f3f7df0bvboxsync return errorSyntax(USAGE_UNREGISTERVM, "error: %Rrs", c);
3194da424708abdd288b28d96892b3a5f3f7df0bvboxsync /* check for required options */
3194da424708abdd288b28d96892b3a5f3f7df0bvboxsync return errorSyntax(USAGE_UNREGISTERVM, "VM name required");
3194da424708abdd288b28d96892b3a5f3f7df0bvboxsync /* assume it's a UUID */
3194da424708abdd288b28d96892b3a5f3f7df0bvboxsync rc = a->virtualBox->GetMachine(Guid(VMName).toUtf16(), machine.asOutParam());
3194da424708abdd288b28d96892b3a5f3f7df0bvboxsync /* must be a name */
3194da424708abdd288b28d96892b3a5f3f7df0bvboxsync CHECK_ERROR(a->virtualBox, FindMachine(Bstr(VMName), machine.asOutParam()));
3194da424708abdd288b28d96892b3a5f3f7df0bvboxsync CHECK_ERROR(a->virtualBox, UnregisterMachine(uuid, machine.asOutParam()));
3194da424708abdd288b28d96892b3a5f3f7df0bvboxsync bool fRegister = false;
3194da424708abdd288b28d96892b3a5f3f7df0bvboxsync for (int i = 0; i < a->argc; i++)
3194da424708abdd288b28d96892b3a5f3f7df0bvboxsync return errorArgument("Missing argument to '%s'", a->argv[i]);
3194da424708abdd288b28d96892b3a5f3f7df0bvboxsync return errorArgument("Missing argument to '%s'", a->argv[i]);
3194da424708abdd288b28d96892b3a5f3f7df0bvboxsync return errorArgument("Missing argument to '%s'", a->argv[i]);
3194da424708abdd288b28d96892b3a5f3f7df0bvboxsync return errorArgument("Missing argument to '%s'", a->argv[i]);
3194da424708abdd288b28d96892b3a5f3f7df0bvboxsync return errorArgument("Missing argument to '%s'", a->argv[i]);
3194da424708abdd288b28d96892b3a5f3f7df0bvboxsync return errorArgument("Invalid UUID format %s\n", a->argv[i]);
3194da424708abdd288b28d96892b3a5f3f7df0bvboxsync return errorSyntax(USAGE_CREATEVM, "Invalid parameter '%s'", Utf8Str(a->argv[i]).raw());
3194da424708abdd288b28d96892b3a5f3f7df0bvboxsync return errorSyntax(USAGE_CREATEVM, "Parameter --name is required");
3194da424708abdd288b28d96892b3a5f3f7df0bvboxsync if (!baseFolder.isEmpty() && !settingsFile.isEmpty())
3194da424708abdd288b28d96892b3a5f3f7df0bvboxsync return errorSyntax(USAGE_CREATEVM, "Cannot specify both --basefolder and --settingsfile together");
3194da424708abdd288b28d96892b3a5f3f7df0bvboxsync CreateMachine(name, osTypeId, baseFolder, Guid(id).toUtf16(), FALSE, machine.asOutParam()));
3194da424708abdd288b28d96892b3a5f3f7df0bvboxsync CreateLegacyMachine(name, osTypeId, settingsFile, Guid(id).toUtf16(), machine.asOutParam()));
3194da424708abdd288b28d96892b3a5f3f7df0bvboxsync CHECK_ERROR_BREAK(a->virtualBox, RegisterMachine(machine));
3194da424708abdd288b28d96892b3a5f3f7df0bvboxsync CHECK_ERROR_BREAK(machine, COMGETTER(Id)(uuid.asOutParam()));
3194da424708abdd288b28d96892b3a5f3f7df0bvboxsync CHECK_ERROR_BREAK(machine, COMGETTER(SettingsFilePath)(settingsFile.asOutParam()));
3194da424708abdd288b28d96892b3a5f3f7df0bvboxsync "UUID: %s\n"
3194da424708abdd288b28d96892b3a5f3f7df0bvboxsync "Settings file: '%ls'\n",
3194da424708abdd288b28d96892b3a5f3f7df0bvboxsync { "-type", 't', RTGETOPT_REQ_STRING }, // deprecated
3194da424708abdd288b28d96892b3a5f3f7df0bvboxsync // start at 0 because main() has hacked both the argc and argv given to us
3194da424708abdd288b28d96892b3a5f3f7df0bvboxsync RTGetOptInit(&GetState, a->argc, a->argv, s_aStartVMOptions, RT_ELEMENTS(s_aStartVMOptions),
3194da424708abdd288b28d96892b3a5f3f7df0bvboxsync return errorArgument("Invalid session type '%s'", ValueUnion.psz);
3194da424708abdd288b28d96892b3a5f3f7df0bvboxsync return errorSyntax(USAGE_STARTVM, "Invalid parameter '%s'", ValueUnion.psz);
3194da424708abdd288b28d96892b3a5f3f7df0bvboxsync return errorSyntax(USAGE_STARTVM, "Invalid option -%c", c);
3194da424708abdd288b28d96892b3a5f3f7df0bvboxsync return errorSyntax(USAGE_STARTVM, "Invalid option case %i", c);
3194da424708abdd288b28d96892b3a5f3f7df0bvboxsync return errorSyntax(USAGE_STARTVM, "unknown option: %s\n", ValueUnion.psz);
3194da424708abdd288b28d96892b3a5f3f7df0bvboxsync return errorSyntax(USAGE_STARTVM, "%s: %Rrs", ValueUnion.pDef->pszLong, c);
3194da424708abdd288b28d96892b3a5f3f7df0bvboxsync return errorSyntax(USAGE_STARTVM, "error: %Rrs", c);
3194da424708abdd288b28d96892b3a5f3f7df0bvboxsync /* check for required options */
3194da424708abdd288b28d96892b3a5f3f7df0bvboxsync return errorSyntax(USAGE_STARTVM, "VM name required");
3194da424708abdd288b28d96892b3a5f3f7df0bvboxsync /* assume it's a UUID */
3194da424708abdd288b28d96892b3a5f3f7df0bvboxsync rc = a->virtualBox->GetMachine(Guid(VMName).toUtf16(), machine.asOutParam());
3194da424708abdd288b28d96892b3a5f3f7df0bvboxsync /* must be a name */
3194da424708abdd288b28d96892b3a5f3f7df0bvboxsync CHECK_ERROR(a->virtualBox, FindMachine(Bstr(VMName), machine.asOutParam()));
3194da424708abdd288b28d96892b3a5f3f7df0bvboxsync /* make sure the VM process will start on the same display as VBoxManage */
3194da424708abdd288b28d96892b3a5f3f7df0bvboxsync str.append(Utf8StrFmt("XAUTHORITY=%s\n", pszXAuth));
3194da424708abdd288b28d96892b3a5f3f7df0bvboxsync CHECK_ERROR_RET(a->virtualBox, OpenRemoteSession(a->session, uuid, sessionType,
3194da424708abdd288b28d96892b3a5f3f7df0bvboxsync CHECK_ERROR_RET(progress, WaitForCompletion(-1), 1);
3194da424708abdd288b28d96892b3a5f3f7df0bvboxsync CHECK_ERROR_RET(progress, COMGETTER(Completed)(&completed), rc);
3194da424708abdd288b28d96892b3a5f3f7df0bvboxsync CHECK_ERROR_RET(progress, COMGETTER(ResultCode)(&iRc), rc);
3194da424708abdd288b28d96892b3a5f3f7df0bvboxsync CHECK_ERROR_RET(progress, COMGETTER(ErrorInfo)(errorInfo.asOutParam()), 1);
3194da424708abdd288b28d96892b3a5f3f7df0bvboxsync /* it's important to always close sessions */
3194da424708abdd288b28d96892b3a5f3f7df0bvboxsync return errorSyntax(USAGE_DISCARDSTATE, "Incorrect number of parameters");
3194da424708abdd288b28d96892b3a5f3f7df0bvboxsync /* assume it's a UUID */
3194da424708abdd288b28d96892b3a5f3f7df0bvboxsync rc = a->virtualBox->GetMachine(Bstr(a->argv[0]), machine.asOutParam());
3194da424708abdd288b28d96892b3a5f3f7df0bvboxsync /* must be a name */
3194da424708abdd288b28d96892b3a5f3f7df0bvboxsync CHECK_ERROR(a->virtualBox, FindMachine(Bstr(a->argv[0]), machine.asOutParam()));
3194da424708abdd288b28d96892b3a5f3f7df0bvboxsync /* we have to open a session for this task */
3194da424708abdd288b28d96892b3a5f3f7df0bvboxsync CHECK_ERROR_BREAK(a->virtualBox, OpenSession(a->session, guid));
3194da424708abdd288b28d96892b3a5f3f7df0bvboxsync CHECK_ERROR_BREAK(a->session, COMGETTER(Console)(console.asOutParam()));
3194da424708abdd288b28d96892b3a5f3f7df0bvboxsync CHECK_ERROR_BREAK(console, ForgetSavedState(true));
3194da424708abdd288b28d96892b3a5f3f7df0bvboxsync } while (0);
3194da424708abdd288b28d96892b3a5f3f7df0bvboxsync } while (0);
3194da424708abdd288b28d96892b3a5f3f7df0bvboxsync return errorSyntax(USAGE_ADOPTSTATE, "Incorrect number of parameters");
3194da424708abdd288b28d96892b3a5f3f7df0bvboxsync /* assume it's a UUID */
3194da424708abdd288b28d96892b3a5f3f7df0bvboxsync rc = a->virtualBox->GetMachine(Bstr(a->argv[0]), machine.asOutParam());
3194da424708abdd288b28d96892b3a5f3f7df0bvboxsync /* must be a name */
3194da424708abdd288b28d96892b3a5f3f7df0bvboxsync CHECK_ERROR(a->virtualBox, FindMachine(Bstr(a->argv[0]), machine.asOutParam()));
3194da424708abdd288b28d96892b3a5f3f7df0bvboxsync /* we have to open a session for this task */
3194da424708abdd288b28d96892b3a5f3f7df0bvboxsync CHECK_ERROR_BREAK(a->virtualBox, OpenSession(a->session, guid));
3194da424708abdd288b28d96892b3a5f3f7df0bvboxsync CHECK_ERROR_BREAK(a->session, COMGETTER(Console)(console.asOutParam()));
3194da424708abdd288b28d96892b3a5f3f7df0bvboxsync CHECK_ERROR_BREAK(console, AdoptSavedState(Bstr(a->argv[1])));
3194da424708abdd288b28d96892b3a5f3f7df0bvboxsync } while (0);
3194da424708abdd288b28d96892b3a5f3f7df0bvboxsync } while (0);
3194da424708abdd288b28d96892b3a5f3f7df0bvboxsync return errorSyntax(USAGE_GETEXTRADATA, "Incorrect number of parameters");
3194da424708abdd288b28d96892b3a5f3f7df0bvboxsync /* global data? */
3194da424708abdd288b28d96892b3a5f3f7df0bvboxsync /* enumeration? */
3194da424708abdd288b28d96892b3a5f3f7df0bvboxsync CHECK_ERROR(a->virtualBox, GetExtraDataKeys(ComSafeArrayAsOutParam(aKeys)));
3194da424708abdd288b28d96892b3a5f3f7df0bvboxsync CHECK_ERROR(a->virtualBox, GetExtraData(bstrKey, bstrValue.asOutParam()));
3194da424708abdd288b28d96892b3a5f3f7df0bvboxsync RTPrintf("Key: %lS, Value: %lS\n", bstrKey.raw(), bstrValue.raw());
3194da424708abdd288b28d96892b3a5f3f7df0bvboxsync CHECK_ERROR(a->virtualBox, GetExtraData(Bstr(a->argv[1]), value.asOutParam()));
3194da424708abdd288b28d96892b3a5f3f7df0bvboxsync /* assume it's a UUID */
3194da424708abdd288b28d96892b3a5f3f7df0bvboxsync rc = a->virtualBox->GetMachine(Bstr(a->argv[0]), machine.asOutParam());
3194da424708abdd288b28d96892b3a5f3f7df0bvboxsync /* must be a name */
3194da424708abdd288b28d96892b3a5f3f7df0bvboxsync CHECK_ERROR(a->virtualBox, FindMachine(Bstr(a->argv[0]), machine.asOutParam()));
3194da424708abdd288b28d96892b3a5f3f7df0bvboxsync /* enumeration? */
3194da424708abdd288b28d96892b3a5f3f7df0bvboxsync CHECK_ERROR(machine, GetExtraDataKeys(ComSafeArrayAsOutParam(aKeys)));
3194da424708abdd288b28d96892b3a5f3f7df0bvboxsync CHECK_ERROR(machine, GetExtraData(bstrKey, bstrValue.asOutParam()));
3194da424708abdd288b28d96892b3a5f3f7df0bvboxsync RTPrintf("Key: %lS, Value: %lS\n", bstrKey.raw(), bstrValue.raw());
3194da424708abdd288b28d96892b3a5f3f7df0bvboxsync CHECK_ERROR(machine, GetExtraData(Bstr(a->argv[1]), value.asOutParam()));
3194da424708abdd288b28d96892b3a5f3f7df0bvboxsync return errorSyntax(USAGE_SETEXTRADATA, "Not enough parameters");
3194da424708abdd288b28d96892b3a5f3f7df0bvboxsync /* global data? */
3194da424708abdd288b28d96892b3a5f3f7df0bvboxsync CHECK_ERROR(a->virtualBox, SetExtraData(Bstr(a->argv[1]), NULL));
3194da424708abdd288b28d96892b3a5f3f7df0bvboxsync CHECK_ERROR(a->virtualBox, SetExtraData(Bstr(a->argv[1]), Bstr(a->argv[2])));
3194da424708abdd288b28d96892b3a5f3f7df0bvboxsync return errorSyntax(USAGE_SETEXTRADATA, "Too many parameters");
3194da424708abdd288b28d96892b3a5f3f7df0bvboxsync /* assume it's a UUID */
3194da424708abdd288b28d96892b3a5f3f7df0bvboxsync rc = a->virtualBox->GetMachine(Bstr(a->argv[0]), machine.asOutParam());
3194da424708abdd288b28d96892b3a5f3f7df0bvboxsync /* must be a name */
3194da424708abdd288b28d96892b3a5f3f7df0bvboxsync CHECK_ERROR(a->virtualBox, FindMachine(Bstr(a->argv[0]), machine.asOutParam()));
3194da424708abdd288b28d96892b3a5f3f7df0bvboxsync CHECK_ERROR(machine, SetExtraData(Bstr(a->argv[1]), NULL));
3194da424708abdd288b28d96892b3a5f3f7df0bvboxsync CHECK_ERROR(machine, SetExtraData(Bstr(a->argv[1]), Bstr(a->argv[2])));
3194da424708abdd288b28d96892b3a5f3f7df0bvboxsync return errorSyntax(USAGE_SETEXTRADATA, "Too many parameters");
3194da424708abdd288b28d96892b3a5f3f7df0bvboxsync /* there must be two arguments: property name and value */
3194da424708abdd288b28d96892b3a5f3f7df0bvboxsync return errorSyntax(USAGE_SETPROPERTY, "Incorrect number of parameters");
3194da424708abdd288b28d96892b3a5f3f7df0bvboxsync a->virtualBox->COMGETTER(SystemProperties)(systemProperties.asOutParam());
3194da424708abdd288b28d96892b3a5f3f7df0bvboxsync /* reset to default? */
3194da424708abdd288b28d96892b3a5f3f7df0bvboxsync CHECK_ERROR(systemProperties, COMSETTER(DefaultHardDiskFolder)(NULL));
3194da424708abdd288b28d96892b3a5f3f7df0bvboxsync CHECK_ERROR(systemProperties, COMSETTER(DefaultHardDiskFolder)(Bstr(a->argv[1])));
3194da424708abdd288b28d96892b3a5f3f7df0bvboxsync /* reset to default? */
3194da424708abdd288b28d96892b3a5f3f7df0bvboxsync CHECK_ERROR(systemProperties, COMSETTER(DefaultMachineFolder)(NULL));
3194da424708abdd288b28d96892b3a5f3f7df0bvboxsync CHECK_ERROR(systemProperties, COMSETTER(DefaultMachineFolder)(Bstr(a->argv[1])));
3194da424708abdd288b28d96892b3a5f3f7df0bvboxsync /* reset to default? */
3194da424708abdd288b28d96892b3a5f3f7df0bvboxsync CHECK_ERROR(systemProperties, COMSETTER(RemoteDisplayAuthLibrary)(NULL));
3194da424708abdd288b28d96892b3a5f3f7df0bvboxsync CHECK_ERROR(systemProperties, COMSETTER(RemoteDisplayAuthLibrary)(Bstr(a->argv[1])));
3194da424708abdd288b28d96892b3a5f3f7df0bvboxsync /* reset to default? */
3194da424708abdd288b28d96892b3a5f3f7df0bvboxsync CHECK_ERROR(systemProperties, COMSETTER(WebServiceAuthLibrary)(NULL));
3194da424708abdd288b28d96892b3a5f3f7df0bvboxsync CHECK_ERROR(systemProperties, COMSETTER(WebServiceAuthLibrary)(Bstr(a->argv[1])));
3194da424708abdd288b28d96892b3a5f3f7df0bvboxsync return errorArgument("Error parsing Log history count '%s'", a->argv[1]);
3194da424708abdd288b28d96892b3a5f3f7df0bvboxsync CHECK_ERROR(systemProperties, COMSETTER(LogHistoryCount)(uVal));
3194da424708abdd288b28d96892b3a5f3f7df0bvboxsync return errorSyntax(USAGE_SETPROPERTY, "Invalid parameter '%s'", a->argv[0]);
3194da424708abdd288b28d96892b3a5f3f7df0bvboxsync /* we need at least a command and target */
3194da424708abdd288b28d96892b3a5f3f7df0bvboxsync return errorSyntax(USAGE_SHAREDFOLDER, "Not enough parameters");
3194da424708abdd288b28d96892b3a5f3f7df0bvboxsync /* assume it's a UUID */
3194da424708abdd288b28d96892b3a5f3f7df0bvboxsync rc = a->virtualBox->GetMachine(Bstr(a->argv[1]), machine.asOutParam());
3194da424708abdd288b28d96892b3a5f3f7df0bvboxsync /* must be a name */
3194da424708abdd288b28d96892b3a5f3f7df0bvboxsync CHECK_ERROR(a->virtualBox, FindMachine(Bstr(a->argv[1]), machine.asOutParam()));
3194da424708abdd288b28d96892b3a5f3f7df0bvboxsync /* we need at least four more parameters */
3194da424708abdd288b28d96892b3a5f3f7df0bvboxsync return errorSyntax(USAGE_SHAREDFOLDER_ADD, "Not enough parameters");
3194da424708abdd288b28d96892b3a5f3f7df0bvboxsync bool fTransient = false;
3194da424708abdd288b28d96892b3a5f3f7df0bvboxsync return errorArgument("Missing argument to '%s'", a->argv[i]);
3194da424708abdd288b28d96892b3a5f3f7df0bvboxsync return errorArgument("Missing argument to '%s'", a->argv[i]);
3194da424708abdd288b28d96892b3a5f3f7df0bvboxsync return errorSyntax(USAGE_SHAREDFOLDER_ADD, "Invalid parameter '%s'", Utf8Str(a->argv[i]).raw());
3194da424708abdd288b28d96892b3a5f3f7df0bvboxsync return errorSyntax(USAGE_SHAREDFOLDER_ADD, "No spaces allowed in parameter '-name'!");
3194da424708abdd288b28d96892b3a5f3f7df0bvboxsync /* required arguments */
3194da424708abdd288b28d96892b3a5f3f7df0bvboxsync return errorSyntax(USAGE_SHAREDFOLDER_ADD, "Parameters --name and --hostpath are required");
3194da424708abdd288b28d96892b3a5f3f7df0bvboxsync /* open an existing session for the VM */
3194da424708abdd288b28d96892b3a5f3f7df0bvboxsync CHECK_ERROR_RET(a->virtualBox, OpenExistingSession(a->session, uuid), 1);
3194da424708abdd288b28d96892b3a5f3f7df0bvboxsync /* get the session machine */
3194da424708abdd288b28d96892b3a5f3f7df0bvboxsync CHECK_ERROR_RET(a->session, COMGETTER(Machine)(machine.asOutParam()), 1);
3194da424708abdd288b28d96892b3a5f3f7df0bvboxsync /* get the session console */
3194da424708abdd288b28d96892b3a5f3f7df0bvboxsync CHECK_ERROR_RET(a->session, COMGETTER(Console)(console.asOutParam()), 1);
3194da424708abdd288b28d96892b3a5f3f7df0bvboxsync CHECK_ERROR(console, CreateSharedFolder(Bstr(name), Bstr(hostpath), fWritable));
3194da424708abdd288b28d96892b3a5f3f7df0bvboxsync /* open a session for the VM */
3194da424708abdd288b28d96892b3a5f3f7df0bvboxsync CHECK_ERROR_RET(a->virtualBox, OpenSession(a->session, uuid), 1);
3194da424708abdd288b28d96892b3a5f3f7df0bvboxsync /* get the mutable session machine */
3194da424708abdd288b28d96892b3a5f3f7df0bvboxsync a->session->COMGETTER(Machine)(machine.asOutParam());
3194da424708abdd288b28d96892b3a5f3f7df0bvboxsync CHECK_ERROR(machine, CreateSharedFolder(Bstr(name), Bstr(hostpath), fWritable));
3194da424708abdd288b28d96892b3a5f3f7df0bvboxsync /* we need at least two more parameters */
3194da424708abdd288b28d96892b3a5f3f7df0bvboxsync return errorSyntax(USAGE_SHAREDFOLDER_REMOVE, "Not enough parameters");
3194da424708abdd288b28d96892b3a5f3f7df0bvboxsync bool fTransient = false;
3194da424708abdd288b28d96892b3a5f3f7df0bvboxsync return errorArgument("Missing argument to '%s'", a->argv[i]);
3194da424708abdd288b28d96892b3a5f3f7df0bvboxsync return errorSyntax(USAGE_SHAREDFOLDER_REMOVE, "Invalid parameter '%s'", Utf8Str(a->argv[i]).raw());
3194da424708abdd288b28d96892b3a5f3f7df0bvboxsync /* required arguments */
3194da424708abdd288b28d96892b3a5f3f7df0bvboxsync return errorSyntax(USAGE_SHAREDFOLDER_REMOVE, "Parameter --name is required");
3194da424708abdd288b28d96892b3a5f3f7df0bvboxsync /* open an existing session for the VM */
3194da424708abdd288b28d96892b3a5f3f7df0bvboxsync CHECK_ERROR_RET(a->virtualBox, OpenExistingSession(a->session, uuid), 1);
3194da424708abdd288b28d96892b3a5f3f7df0bvboxsync /* get the session machine */
3194da424708abdd288b28d96892b3a5f3f7df0bvboxsync CHECK_ERROR_RET(a->session, COMGETTER(Machine)(machine.asOutParam()), 1);
3194da424708abdd288b28d96892b3a5f3f7df0bvboxsync /* get the session console */
3194da424708abdd288b28d96892b3a5f3f7df0bvboxsync CHECK_ERROR_RET(a->session, COMGETTER(Console)(console.asOutParam()), 1);
3194da424708abdd288b28d96892b3a5f3f7df0bvboxsync CHECK_ERROR(console, RemoveSharedFolder(Bstr(name)));
3194da424708abdd288b28d96892b3a5f3f7df0bvboxsync /* open a session for the VM */
3194da424708abdd288b28d96892b3a5f3f7df0bvboxsync CHECK_ERROR_RET(a->virtualBox, OpenSession(a->session, uuid), 1);
3194da424708abdd288b28d96892b3a5f3f7df0bvboxsync /* get the mutable session machine */
3194da424708abdd288b28d96892b3a5f3f7df0bvboxsync a->session->COMGETTER(Machine)(machine.asOutParam());
3194da424708abdd288b28d96892b3a5f3f7df0bvboxsync CHECK_ERROR(machine, RemoveSharedFolder(Bstr(name)));
3194da424708abdd288b28d96892b3a5f3f7df0bvboxsync /* commit and close the session */
3194da424708abdd288b28d96892b3a5f3f7df0bvboxsync return errorSyntax(USAGE_SETPROPERTY, "Invalid parameter '%s'", Utf8Str(a->argv[0]).raw());
3194da424708abdd288b28d96892b3a5f3f7df0bvboxsync /* at least one option: the UUID or name of the VM */
3194da424708abdd288b28d96892b3a5f3f7df0bvboxsync return errorSyntax(USAGE_VM_STATISTICS, "Incorrect number of parameters");
3194da424708abdd288b28d96892b3a5f3f7df0bvboxsync /* try to find the given machine */
3194da424708abdd288b28d96892b3a5f3f7df0bvboxsync CHECK_ERROR(a->virtualBox, GetMachine(uuid, machine.asOutParam()));
3194da424708abdd288b28d96892b3a5f3f7df0bvboxsync CHECK_ERROR(a->virtualBox, FindMachine(Bstr(a->argv[0]), machine.asOutParam()));
3194da424708abdd288b28d96892b3a5f3f7df0bvboxsync /* parse arguments. */
3194da424708abdd288b28d96892b3a5f3f7df0bvboxsync bool fReset = false;
3194da424708abdd288b28d96892b3a5f3f7df0bvboxsync return errorSyntax(USAGE_VM_STATISTICS, "Multiple --patterns options is not permitted");
3194da424708abdd288b28d96892b3a5f3f7df0bvboxsync return errorArgument("Missing argument to '%s'", a->argv[i]);
3194da424708abdd288b28d96892b3a5f3f7df0bvboxsync /* add: --file <filename> and --formatted */
3194da424708abdd288b28d96892b3a5f3f7df0bvboxsync return errorSyntax(USAGE_VM_STATISTICS, "Unknown option '%s'", a->argv[i]);
3194da424708abdd288b28d96892b3a5f3f7df0bvboxsync return errorSyntax(USAGE_VM_STATISTICS, "The --reset and --descriptions options does not mix");
3194da424708abdd288b28d96892b3a5f3f7df0bvboxsync /* open an existing session for the VM. */
3194da424708abdd288b28d96892b3a5f3f7df0bvboxsync CHECK_ERROR(a->virtualBox, OpenExistingSession(a->session, uuid));
3194da424708abdd288b28d96892b3a5f3f7df0bvboxsync /* get the session console. */
3194da424708abdd288b28d96892b3a5f3f7df0bvboxsync CHECK_ERROR(a->session, COMGETTER(Console)(console.asOutParam()));
3194da424708abdd288b28d96892b3a5f3f7df0bvboxsync /* get the machine debugger. */
3194da424708abdd288b28d96892b3a5f3f7df0bvboxsync CHECK_ERROR(console, COMGETTER(Debugger)(debugger.asOutParam()));
if (fReset)