VirtualBoxImpl.h revision a2615ff0171c742ab58bc7694ce98f6e363ceadb
278688e1dd719e82e8b77a7953a40875fb39e129vboxsync/* $Id$ */
daa94352f51be2329ac8660f70396e03a7cb983bvboxsync/** @file
daa94352f51be2329ac8660f70396e03a7cb983bvboxsync * VirtualBox COM class implementation
daa94352f51be2329ac8660f70396e03a7cb983bvboxsync */
daa94352f51be2329ac8660f70396e03a7cb983bvboxsync
daa94352f51be2329ac8660f70396e03a7cb983bvboxsync/*
daa94352f51be2329ac8660f70396e03a7cb983bvboxsync * Copyright (C) 2006-2013 Oracle Corporation
daa94352f51be2329ac8660f70396e03a7cb983bvboxsync *
daa94352f51be2329ac8660f70396e03a7cb983bvboxsync * This file is part of VirtualBox Open Source Edition (OSE), as
daa94352f51be2329ac8660f70396e03a7cb983bvboxsync * available from http://www.virtualbox.org. This file is free software;
daa94352f51be2329ac8660f70396e03a7cb983bvboxsync * you can redistribute it and/or modify it under the terms of the GNU
daa94352f51be2329ac8660f70396e03a7cb983bvboxsync * General Public License (GPL) as published by the Free Software
daa94352f51be2329ac8660f70396e03a7cb983bvboxsync * Foundation, in version 2 as it comes in the "COPYING" file of the
daa94352f51be2329ac8660f70396e03a7cb983bvboxsync * VirtualBox OSE distribution. VirtualBox OSE is distributed in the
daa94352f51be2329ac8660f70396e03a7cb983bvboxsync * hope that it will be useful, but WITHOUT ANY WARRANTY of any kind.
daa94352f51be2329ac8660f70396e03a7cb983bvboxsync */
daa94352f51be2329ac8660f70396e03a7cb983bvboxsync
daa94352f51be2329ac8660f70396e03a7cb983bvboxsync#ifndef ____H_VIRTUALBOXIMPL
daa94352f51be2329ac8660f70396e03a7cb983bvboxsync#define ____H_VIRTUALBOXIMPL
daa94352f51be2329ac8660f70396e03a7cb983bvboxsync
daa94352f51be2329ac8660f70396e03a7cb983bvboxsync#include "VirtualBoxBase.h"
daa94352f51be2329ac8660f70396e03a7cb983bvboxsync#include "objectslist.h"
daa94352f51be2329ac8660f70396e03a7cb983bvboxsync#include "VirtualBoxWrap.h"
daa94352f51be2329ac8660f70396e03a7cb983bvboxsync
daa94352f51be2329ac8660f70396e03a7cb983bvboxsync#ifdef RT_OS_WINDOWS
daa94352f51be2329ac8660f70396e03a7cb983bvboxsync# include "win/resource.h"
daa94352f51be2329ac8660f70396e03a7cb983bvboxsync#endif
daa94352f51be2329ac8660f70396e03a7cb983bvboxsync
daa94352f51be2329ac8660f70396e03a7cb983bvboxsyncnamespace com
daa94352f51be2329ac8660f70396e03a7cb983bvboxsync{
daa94352f51be2329ac8660f70396e03a7cb983bvboxsync class Event;
daa94352f51be2329ac8660f70396e03a7cb983bvboxsync class EventQueue;
daa94352f51be2329ac8660f70396e03a7cb983bvboxsync}
daa94352f51be2329ac8660f70396e03a7cb983bvboxsync
daa94352f51be2329ac8660f70396e03a7cb983bvboxsyncclass SessionMachine;
daa94352f51be2329ac8660f70396e03a7cb983bvboxsyncclass GuestOSType;
daa94352f51be2329ac8660f70396e03a7cb983bvboxsyncclass Progress;
daa94352f51be2329ac8660f70396e03a7cb983bvboxsyncclass Host;
daa94352f51be2329ac8660f70396e03a7cb983bvboxsyncclass SystemProperties;
daa94352f51be2329ac8660f70396e03a7cb983bvboxsyncclass DHCPServer;
daa94352f51be2329ac8660f70396e03a7cb983bvboxsyncclass PerformanceCollector;
daa94352f51be2329ac8660f70396e03a7cb983bvboxsync#ifdef VBOX_WITH_EXTPACK
daa94352f51be2329ac8660f70396e03a7cb983bvboxsyncclass ExtPackManager;
daa94352f51be2329ac8660f70396e03a7cb983bvboxsync#endif
daa94352f51be2329ac8660f70396e03a7cb983bvboxsyncclass AutostartDb;
daa94352f51be2329ac8660f70396e03a7cb983bvboxsyncclass NATNetwork;
daa94352f51be2329ac8660f70396e03a7cb983bvboxsync
daa94352f51be2329ac8660f70396e03a7cb983bvboxsync
daa94352f51be2329ac8660f70396e03a7cb983bvboxsynctypedef std::list<ComObjPtr<SessionMachine> > SessionMachinesList;
daa94352f51be2329ac8660f70396e03a7cb983bvboxsync
daa94352f51be2329ac8660f70396e03a7cb983bvboxsync#ifdef RT_OS_WINDOWS
daa94352f51be2329ac8660f70396e03a7cb983bvboxsyncclass SVCHlpClient;
daa94352f51be2329ac8660f70396e03a7cb983bvboxsync#endif
daa94352f51be2329ac8660f70396e03a7cb983bvboxsync
daa94352f51be2329ac8660f70396e03a7cb983bvboxsyncnamespace settings
daa94352f51be2329ac8660f70396e03a7cb983bvboxsync{
daa94352f51be2329ac8660f70396e03a7cb983bvboxsync class MainConfigFile;
daa94352f51be2329ac8660f70396e03a7cb983bvboxsync struct MediaRegistry;
daa94352f51be2329ac8660f70396e03a7cb983bvboxsync}
daa94352f51be2329ac8660f70396e03a7cb983bvboxsyncclass ATL_NO_VTABLE VirtualBox :
daa94352f51be2329ac8660f70396e03a7cb983bvboxsync public VirtualBoxWrap
daa94352f51be2329ac8660f70396e03a7cb983bvboxsync#ifdef RT_OS_WINDOWS
daa94352f51be2329ac8660f70396e03a7cb983bvboxsync , public CComCoClass<VirtualBox, &CLSID_VirtualBox>
daa94352f51be2329ac8660f70396e03a7cb983bvboxsync#endif
daa94352f51be2329ac8660f70396e03a7cb983bvboxsync{
daa94352f51be2329ac8660f70396e03a7cb983bvboxsync
daa94352f51be2329ac8660f70396e03a7cb983bvboxsyncpublic:
daa94352f51be2329ac8660f70396e03a7cb983bvboxsync
daa94352f51be2329ac8660f70396e03a7cb983bvboxsync typedef std::list<ComPtr<IInternalSessionControl> > InternalControlList;
daa94352f51be2329ac8660f70396e03a7cb983bvboxsync typedef ObjectsList<Machine> MachinesOList;
daa94352f51be2329ac8660f70396e03a7cb983bvboxsync
daa94352f51be2329ac8660f70396e03a7cb983bvboxsync class CallbackEvent;
daa94352f51be2329ac8660f70396e03a7cb983bvboxsync friend class CallbackEvent;
daa94352f51be2329ac8660f70396e03a7cb983bvboxsync
daa94352f51be2329ac8660f70396e03a7cb983bvboxsync DECLARE_CLASSFACTORY_SINGLETON(VirtualBox)
daa94352f51be2329ac8660f70396e03a7cb983bvboxsync
daa94352f51be2329ac8660f70396e03a7cb983bvboxsync DECLARE_REGISTRY_RESOURCEID(IDR_VIRTUALBOX)
daa94352f51be2329ac8660f70396e03a7cb983bvboxsync
daa94352f51be2329ac8660f70396e03a7cb983bvboxsync // Kind of redundant (VirtualBoxWrap declares itself not aggregatable and
daa94352f51be2329ac8660f70396e03a7cb983bvboxsync // CComCoClass<VirtualBox, &CLSID_VirtualBox> as aggregatable, the former
daa94352f51be2329ac8660f70396e03a7cb983bvboxsync // is the first inheritance), but the C++ multiple inheritance rules and
daa94352f51be2329ac8660f70396e03a7cb983bvboxsync // the class factory in svcmain.cpp needs this to disambiguate.
daa94352f51be2329ac8660f70396e03a7cb983bvboxsync DECLARE_NOT_AGGREGATABLE(VirtualBox)
daa94352f51be2329ac8660f70396e03a7cb983bvboxsync
daa94352f51be2329ac8660f70396e03a7cb983bvboxsync // to postpone generation of the default ctor/dtor
daa94352f51be2329ac8660f70396e03a7cb983bvboxsync DECLARE_EMPTY_CTOR_DTOR(VirtualBox)
daa94352f51be2329ac8660f70396e03a7cb983bvboxsync
daa94352f51be2329ac8660f70396e03a7cb983bvboxsync HRESULT FinalConstruct();
daa94352f51be2329ac8660f70396e03a7cb983bvboxsync void FinalRelease();
daa94352f51be2329ac8660f70396e03a7cb983bvboxsync
daa94352f51be2329ac8660f70396e03a7cb983bvboxsync /* public initializer/uninitializer for internal purposes only */
daa94352f51be2329ac8660f70396e03a7cb983bvboxsync HRESULT init();
daa94352f51be2329ac8660f70396e03a7cb983bvboxsync HRESULT initMachines();
daa94352f51be2329ac8660f70396e03a7cb983bvboxsync HRESULT initMedia(const Guid &uuidMachineRegistry,
daa94352f51be2329ac8660f70396e03a7cb983bvboxsync const settings::MediaRegistry mediaRegistry,
daa94352f51be2329ac8660f70396e03a7cb983bvboxsync const Utf8Str &strMachineFolder);
daa94352f51be2329ac8660f70396e03a7cb983bvboxsync void uninit();
daa94352f51be2329ac8660f70396e03a7cb983bvboxsync
daa94352f51be2329ac8660f70396e03a7cb983bvboxsync /* public methods only for internal purposes */
daa94352f51be2329ac8660f70396e03a7cb983bvboxsync
daa94352f51be2329ac8660f70396e03a7cb983bvboxsync /**
daa94352f51be2329ac8660f70396e03a7cb983bvboxsync * Override of the default locking class to be used for validating lock
daa94352f51be2329ac8660f70396e03a7cb983bvboxsync * order with the standard member lock handle.
daa94352f51be2329ac8660f70396e03a7cb983bvboxsync */
daa94352f51be2329ac8660f70396e03a7cb983bvboxsync virtual VBoxLockingClass getLockingClass() const
daa94352f51be2329ac8660f70396e03a7cb983bvboxsync {
daa94352f51be2329ac8660f70396e03a7cb983bvboxsync return LOCKCLASS_VIRTUALBOXOBJECT;
daa94352f51be2329ac8660f70396e03a7cb983bvboxsync }
daa94352f51be2329ac8660f70396e03a7cb983bvboxsync
d90eec53c9dcaa0f3d1054e8734ed46875b9093avboxsync#ifdef DEBUG
d90eec53c9dcaa0f3d1054e8734ed46875b9093avboxsync void i_dumpAllBackRefs();
daa94352f51be2329ac8660f70396e03a7cb983bvboxsync#endif
daa94352f51be2329ac8660f70396e03a7cb983bvboxsync
daa94352f51be2329ac8660f70396e03a7cb983bvboxsync HRESULT i_postEvent(Event *event);
daa94352f51be2329ac8660f70396e03a7cb983bvboxsync
daa94352f51be2329ac8660f70396e03a7cb983bvboxsync HRESULT i_addProgress(IProgress *aProgress);
daa94352f51be2329ac8660f70396e03a7cb983bvboxsync HRESULT i_removeProgress(IN_GUID aId);
daa94352f51be2329ac8660f70396e03a7cb983bvboxsync
daa94352f51be2329ac8660f70396e03a7cb983bvboxsync#ifdef RT_OS_WINDOWS
d90eec53c9dcaa0f3d1054e8734ed46875b9093avboxsync typedef DECLCALLBACKPTR(HRESULT, SVCHelperClientFunc)
daa94352f51be2329ac8660f70396e03a7cb983bvboxsync (SVCHlpClient *aClient, Progress *aProgress, void *aUser, int *aVrc);
d90eec53c9dcaa0f3d1054e8734ed46875b9093avboxsync HRESULT i_startSVCHelperClient(bool aPrivileged,
daa94352f51be2329ac8660f70396e03a7cb983bvboxsync SVCHelperClientFunc aFunc,
daa94352f51be2329ac8660f70396e03a7cb983bvboxsync void *aUser, Progress *aProgress);
daa94352f51be2329ac8660f70396e03a7cb983bvboxsync#endif
daa94352f51be2329ac8660f70396e03a7cb983bvboxsync
d90eec53c9dcaa0f3d1054e8734ed46875b9093avboxsync void i_addProcessToReap(RTPROCESS pid);
daa94352f51be2329ac8660f70396e03a7cb983bvboxsync void i_updateClientWatcher();
d90eec53c9dcaa0f3d1054e8734ed46875b9093avboxsync
daa94352f51be2329ac8660f70396e03a7cb983bvboxsync void i_onMachineStateChange(const Guid &aId, MachineState_T aState);
daa94352f51be2329ac8660f70396e03a7cb983bvboxsync void i_onMachineDataChange(const Guid &aId, BOOL aTemporary = FALSE);
daa94352f51be2329ac8660f70396e03a7cb983bvboxsync BOOL i_onExtraDataCanChange(const Guid &aId, IN_BSTR aKey, IN_BSTR aValue,
daa94352f51be2329ac8660f70396e03a7cb983bvboxsync Bstr &aError);
daa94352f51be2329ac8660f70396e03a7cb983bvboxsync void i_onExtraDataChange(const Guid &aId, IN_BSTR aKey, IN_BSTR aValue);
daa94352f51be2329ac8660f70396e03a7cb983bvboxsync void i_onMachineRegistered(const Guid &aId, BOOL aRegistered);
daa94352f51be2329ac8660f70396e03a7cb983bvboxsync void i_onSessionStateChange(const Guid &aId, SessionState_T aState);
daa94352f51be2329ac8660f70396e03a7cb983bvboxsync
daa94352f51be2329ac8660f70396e03a7cb983bvboxsync void i_onSnapshotTaken(const Guid &aMachineId, const Guid &aSnapshotId);
daa94352f51be2329ac8660f70396e03a7cb983bvboxsync void i_onSnapshotDeleted(const Guid &aMachineId, const Guid &aSnapshotId);
daa94352f51be2329ac8660f70396e03a7cb983bvboxsync void i_onSnapshotChange(const Guid &aMachineId, const Guid &aSnapshotId);
daa94352f51be2329ac8660f70396e03a7cb983bvboxsync void i_onGuestPropertyChange(const Guid &aMachineId, IN_BSTR aName, IN_BSTR aValue,
daa94352f51be2329ac8660f70396e03a7cb983bvboxsync IN_BSTR aFlags);
daa94352f51be2329ac8660f70396e03a7cb983bvboxsync void i_onNatRedirectChange(const Guid &aMachineId, ULONG ulSlot, bool fRemove, IN_BSTR aName,
daa94352f51be2329ac8660f70396e03a7cb983bvboxsync NATProtocol_T aProto, IN_BSTR aHostIp, uint16_t aHostPort,
daa94352f51be2329ac8660f70396e03a7cb983bvboxsync IN_BSTR aGuestIp, uint16_t aGuestPort);
daa94352f51be2329ac8660f70396e03a7cb983bvboxsync void i_onNATNetworkChange(IN_BSTR aNetworkName);
daa94352f51be2329ac8660f70396e03a7cb983bvboxsync void i_onNATNetworkStartStop(IN_BSTR aNetworkName, BOOL aStart);
daa94352f51be2329ac8660f70396e03a7cb983bvboxsync void i_onNATNetworkSetting(IN_BSTR aNetworkName, BOOL aEnabled, IN_BSTR aNetwork,
daa94352f51be2329ac8660f70396e03a7cb983bvboxsync IN_BSTR aGateway, BOOL aAdvertiseDefaultIpv6RouteEnabled,
daa94352f51be2329ac8660f70396e03a7cb983bvboxsync BOOL fNeedDhcpServer);
daa94352f51be2329ac8660f70396e03a7cb983bvboxsync void i_onNATNetworkPortForward(IN_BSTR aNetworkName, BOOL create, BOOL fIpv6,
daa94352f51be2329ac8660f70396e03a7cb983bvboxsync IN_BSTR aRuleName, NATProtocol_T proto,
daa94352f51be2329ac8660f70396e03a7cb983bvboxsync IN_BSTR aHostIp, LONG aHostPort,
daa94352f51be2329ac8660f70396e03a7cb983bvboxsync IN_BSTR aGuestIp, LONG aGuestPort);
daa94352f51be2329ac8660f70396e03a7cb983bvboxsync void i_onHostNameResolutionConfigurationChange();
daa94352f51be2329ac8660f70396e03a7cb983bvboxsync
daa94352f51be2329ac8660f70396e03a7cb983bvboxsync int i_natNetworkRefInc(IN_BSTR aNetworkName);
daa94352f51be2329ac8660f70396e03a7cb983bvboxsync int i_natNetworkRefDec(IN_BSTR aNetworkName);
daa94352f51be2329ac8660f70396e03a7cb983bvboxsync
daa94352f51be2329ac8660f70396e03a7cb983bvboxsync ComObjPtr<GuestOSType> i_getUnknownOSType();
daa94352f51be2329ac8660f70396e03a7cb983bvboxsync
daa94352f51be2329ac8660f70396e03a7cb983bvboxsync void i_getOpenedMachines(SessionMachinesList &aMachines,
daa94352f51be2329ac8660f70396e03a7cb983bvboxsync InternalControlList *aControls = NULL);
daa94352f51be2329ac8660f70396e03a7cb983bvboxsync MachinesOList &i_getMachinesList();
daa94352f51be2329ac8660f70396e03a7cb983bvboxsync
daa94352f51be2329ac8660f70396e03a7cb983bvboxsync HRESULT i_findMachine(const Guid &aId,
daa94352f51be2329ac8660f70396e03a7cb983bvboxsync bool fPermitInaccessible,
daa94352f51be2329ac8660f70396e03a7cb983bvboxsync bool aSetError,
daa94352f51be2329ac8660f70396e03a7cb983bvboxsync ComObjPtr<Machine> *aMachine = NULL);
daa94352f51be2329ac8660f70396e03a7cb983bvboxsync
daa94352f51be2329ac8660f70396e03a7cb983bvboxsync HRESULT i_findMachineByName(const Utf8Str &aName,
daa94352f51be2329ac8660f70396e03a7cb983bvboxsync bool aSetError,
daa94352f51be2329ac8660f70396e03a7cb983bvboxsync ComObjPtr<Machine> *aMachine = NULL);
daa94352f51be2329ac8660f70396e03a7cb983bvboxsync
daa94352f51be2329ac8660f70396e03a7cb983bvboxsync HRESULT i_validateMachineGroup(const Utf8Str &aGroup, bool fPrimary);
daa94352f51be2329ac8660f70396e03a7cb983bvboxsync HRESULT i_convertMachineGroups(const std::vector<com::Utf8Str> aMachineGroups, StringsList *pllMachineGroups);
daa94352f51be2329ac8660f70396e03a7cb983bvboxsync
daa94352f51be2329ac8660f70396e03a7cb983bvboxsync HRESULT i_findHardDiskById(const Guid &id,
daa94352f51be2329ac8660f70396e03a7cb983bvboxsync bool aSetError,
daa94352f51be2329ac8660f70396e03a7cb983bvboxsync ComObjPtr<Medium> *aHardDisk = NULL);
daa94352f51be2329ac8660f70396e03a7cb983bvboxsync HRESULT i_findHardDiskByLocation(const Utf8Str &strLocation,
daa94352f51be2329ac8660f70396e03a7cb983bvboxsync bool aSetError,
daa94352f51be2329ac8660f70396e03a7cb983bvboxsync ComObjPtr<Medium> *aHardDisk = NULL);
daa94352f51be2329ac8660f70396e03a7cb983bvboxsync HRESULT i_findDVDOrFloppyImage(DeviceType_T mediumType,
daa94352f51be2329ac8660f70396e03a7cb983bvboxsync const Guid *aId,
daa94352f51be2329ac8660f70396e03a7cb983bvboxsync const Utf8Str &aLocation,
daa94352f51be2329ac8660f70396e03a7cb983bvboxsync bool aSetError,
daa94352f51be2329ac8660f70396e03a7cb983bvboxsync ComObjPtr<Medium> *aImage = NULL);
daa94352f51be2329ac8660f70396e03a7cb983bvboxsync HRESULT i_findRemoveableMedium(DeviceType_T mediumType,
daa94352f51be2329ac8660f70396e03a7cb983bvboxsync const Guid &uuid,
daa94352f51be2329ac8660f70396e03a7cb983bvboxsync bool fRefresh,
daa94352f51be2329ac8660f70396e03a7cb983bvboxsync bool aSetError,
daa94352f51be2329ac8660f70396e03a7cb983bvboxsync ComObjPtr<Medium> &pMedium);
daa94352f51be2329ac8660f70396e03a7cb983bvboxsync
daa94352f51be2329ac8660f70396e03a7cb983bvboxsync HRESULT i_findGuestOSType(const Bstr &bstrOSType,
daa94352f51be2329ac8660f70396e03a7cb983bvboxsync GuestOSType*& pGuestOSType);
daa94352f51be2329ac8660f70396e03a7cb983bvboxsync
daa94352f51be2329ac8660f70396e03a7cb983bvboxsync const Guid &i_getGlobalRegistryId() const;
daa94352f51be2329ac8660f70396e03a7cb983bvboxsync
daa94352f51be2329ac8660f70396e03a7cb983bvboxsync const ComObjPtr<Host>& i_host() const;
daa94352f51be2329ac8660f70396e03a7cb983bvboxsync SystemProperties* i_getSystemProperties() const;
daa94352f51be2329ac8660f70396e03a7cb983bvboxsync#ifdef VBOX_WITH_EXTPACK
daa94352f51be2329ac8660f70396e03a7cb983bvboxsync ExtPackManager* i_getExtPackManager() const;
daa94352f51be2329ac8660f70396e03a7cb983bvboxsync#endif
daa94352f51be2329ac8660f70396e03a7cb983bvboxsync#ifdef VBOX_WITH_RESOURCE_USAGE_API
daa94352f51be2329ac8660f70396e03a7cb983bvboxsync const ComObjPtr<PerformanceCollector>& i_performanceCollector() const;
daa94352f51be2329ac8660f70396e03a7cb983bvboxsync#endif /* VBOX_WITH_RESOURCE_USAGE_API */
daa94352f51be2329ac8660f70396e03a7cb983bvboxsync
848a8a60f4429fb74d007753d6a2e588d38516dfvboxsync void i_getDefaultMachineFolder(Utf8Str &str) const;
daa94352f51be2329ac8660f70396e03a7cb983bvboxsync void i_getDefaultHardDiskFormat(Utf8Str &str) const;
daa94352f51be2329ac8660f70396e03a7cb983bvboxsync
daa94352f51be2329ac8660f70396e03a7cb983bvboxsync /** Returns the VirtualBox home directory */
daa94352f51be2329ac8660f70396e03a7cb983bvboxsync const Utf8Str& i_homeDir() const;
daa94352f51be2329ac8660f70396e03a7cb983bvboxsync int i_calculateFullPath(const Utf8Str &strPath, Utf8Str &aResult);
daa94352f51be2329ac8660f70396e03a7cb983bvboxsync void i_copyPathRelativeToConfig(const Utf8Str &strSource, Utf8Str &strTarget);
daa94352f51be2329ac8660f70396e03a7cb983bvboxsync HRESULT i_registerMedium(const ComObjPtr<Medium> &pMedium, ComObjPtr<Medium> *ppMedium, DeviceType_T argType);
daa94352f51be2329ac8660f70396e03a7cb983bvboxsync HRESULT i_unregisterMedium(Medium *pMedium);
daa94352f51be2329ac8660f70396e03a7cb983bvboxsync void i_pushMediumToListWithChildren(MediaList &llMedia, Medium *pMedium);
daa94352f51be2329ac8660f70396e03a7cb983bvboxsync HRESULT i_unregisterMachineMedia(const Guid &id);
daa94352f51be2329ac8660f70396e03a7cb983bvboxsync HRESULT i_unregisterMachine(Machine *pMachine, const Guid &id);
daa94352f51be2329ac8660f70396e03a7cb983bvboxsync void i_rememberMachineNameChangeForMedia(const Utf8Str &strOldConfigDir,
daa94352f51be2329ac8660f70396e03a7cb983bvboxsync const Utf8Str &strNewConfigDir);
daa94352f51be2329ac8660f70396e03a7cb983bvboxsync void i_saveMediaRegistry(settings::MediaRegistry &mediaRegistry,
daa94352f51be2329ac8660f70396e03a7cb983bvboxsync const Guid &uuidRegistry,
daa94352f51be2329ac8660f70396e03a7cb983bvboxsync const Utf8Str &strMachineFolder);
daa94352f51be2329ac8660f70396e03a7cb983bvboxsync HRESULT i_saveSettings();
daa94352f51be2329ac8660f70396e03a7cb983bvboxsync void i_markRegistryModified(const Guid &uuid);
daa94352f51be2329ac8660f70396e03a7cb983bvboxsync void i_saveModifiedRegistries();
848a8a60f4429fb74d007753d6a2e588d38516dfvboxsync static const com::Utf8Str &i_getVersionNormalized();
daa94352f51be2329ac8660f70396e03a7cb983bvboxsync static HRESULT i_ensureFilePathExists(const Utf8Str &strFileName, bool fCreate);
daa94352f51be2329ac8660f70396e03a7cb983bvboxsync const Utf8Str& i_settingsFilePath();
daa94352f51be2329ac8660f70396e03a7cb983bvboxsync AutostartDb* i_getAutostartDb() const;
daa94352f51be2329ac8660f70396e03a7cb983bvboxsync RWLockHandle& i_getMachinesListLockHandle();
daa94352f51be2329ac8660f70396e03a7cb983bvboxsync RWLockHandle& i_getMediaTreeLockHandle();
daa94352f51be2329ac8660f70396e03a7cb983bvboxsync int i_encryptSetting(const Utf8Str &aPlaintext, Utf8Str *aCiphertext);
daa94352f51be2329ac8660f70396e03a7cb983bvboxsync int i_decryptSetting(Utf8Str *aPlaintext, const Utf8Str &aCiphertext);
daa94352f51be2329ac8660f70396e03a7cb983bvboxsync void i_storeSettingsKey(const Utf8Str &aKey);
daa94352f51be2329ac8660f70396e03a7cb983bvboxsync bool i_isMediaUuidInUse(const Guid &aId, DeviceType_T deviceType);
daa94352f51be2329ac8660f70396e03a7cb983bvboxsync
daa94352f51be2329ac8660f70396e03a7cb983bvboxsyncprivate:
daa94352f51be2329ac8660f70396e03a7cb983bvboxsync class ClientWatcher;
daa94352f51be2329ac8660f70396e03a7cb983bvboxsync
daa94352f51be2329ac8660f70396e03a7cb983bvboxsync // wrapped IVirtualBox properties
daa94352f51be2329ac8660f70396e03a7cb983bvboxsync HRESULT getVersion(com::Utf8Str &aVersion);
daa94352f51be2329ac8660f70396e03a7cb983bvboxsync HRESULT getVersionNormalized(com::Utf8Str &aVersionNormalized);
daa94352f51be2329ac8660f70396e03a7cb983bvboxsync HRESULT getRevision(ULONG *aRevision);
daa94352f51be2329ac8660f70396e03a7cb983bvboxsync HRESULT getPackageType(com::Utf8Str &aPackageType);
daa94352f51be2329ac8660f70396e03a7cb983bvboxsync HRESULT getAPIVersion(com::Utf8Str &aAPIVersion);
daa94352f51be2329ac8660f70396e03a7cb983bvboxsync HRESULT getHomeFolder(com::Utf8Str &aHomeFolder);
daa94352f51be2329ac8660f70396e03a7cb983bvboxsync HRESULT getSettingsFilePath(com::Utf8Str &aSettingsFilePath);
daa94352f51be2329ac8660f70396e03a7cb983bvboxsync HRESULT getHost(ComPtr<IHost> &aHost);
daa94352f51be2329ac8660f70396e03a7cb983bvboxsync HRESULT getSystemProperties(ComPtr<ISystemProperties> &aSystemProperties);
daa94352f51be2329ac8660f70396e03a7cb983bvboxsync HRESULT getMachines(std::vector<ComPtr<IMachine> > &aMachines);
daa94352f51be2329ac8660f70396e03a7cb983bvboxsync HRESULT getMachineGroups(std::vector<com::Utf8Str> &aMachineGroups);
daa94352f51be2329ac8660f70396e03a7cb983bvboxsync HRESULT getHardDisks(std::vector<ComPtr<IMedium> > &aHardDisks);
daa94352f51be2329ac8660f70396e03a7cb983bvboxsync HRESULT getDVDImages(std::vector<ComPtr<IMedium> > &aDVDImages);
daa94352f51be2329ac8660f70396e03a7cb983bvboxsync HRESULT getFloppyImages(std::vector<ComPtr<IMedium> > &aFloppyImages);
daa94352f51be2329ac8660f70396e03a7cb983bvboxsync HRESULT getProgressOperations(std::vector<ComPtr<IProgress> > &aProgressOperations);
daa94352f51be2329ac8660f70396e03a7cb983bvboxsync HRESULT getGuestOSTypes(std::vector<ComPtr<IGuestOSType> > &aGuestOSTypes);
daa94352f51be2329ac8660f70396e03a7cb983bvboxsync HRESULT getSharedFolders(std::vector<ComPtr<ISharedFolder> > &aSharedFolders);
daa94352f51be2329ac8660f70396e03a7cb983bvboxsync HRESULT getPerformanceCollector(ComPtr<IPerformanceCollector> &aPerformanceCollector);
daa94352f51be2329ac8660f70396e03a7cb983bvboxsync HRESULT getDHCPServers(std::vector<ComPtr<IDHCPServer> > &aDHCPServers);
daa94352f51be2329ac8660f70396e03a7cb983bvboxsync HRESULT getNATNetworks(std::vector<ComPtr<INATNetwork> > &aNATNetworks);
daa94352f51be2329ac8660f70396e03a7cb983bvboxsync HRESULT getEventSource(ComPtr<IEventSource> &aEventSource);
daa94352f51be2329ac8660f70396e03a7cb983bvboxsync HRESULT getExtensionPackManager(ComPtr<IExtPackManager> &aExtensionPackManager);
daa94352f51be2329ac8660f70396e03a7cb983bvboxsync HRESULT getInternalNetworks(std::vector<com::Utf8Str> &aInternalNetworks);
daa94352f51be2329ac8660f70396e03a7cb983bvboxsync HRESULT getGenericNetworkDrivers(std::vector<com::Utf8Str> &aGenericNetworkDrivers);
daa94352f51be2329ac8660f70396e03a7cb983bvboxsync
daa94352f51be2329ac8660f70396e03a7cb983bvboxsync // wrapped IVirtualBox methods
daa94352f51be2329ac8660f70396e03a7cb983bvboxsync HRESULT composeMachineFilename(const com::Utf8Str &aName,
daa94352f51be2329ac8660f70396e03a7cb983bvboxsync const com::Utf8Str &aGroup,
daa94352f51be2329ac8660f70396e03a7cb983bvboxsync const com::Utf8Str &aCreateFlags,
daa94352f51be2329ac8660f70396e03a7cb983bvboxsync const com::Utf8Str &aBaseFolder,
daa94352f51be2329ac8660f70396e03a7cb983bvboxsync com::Utf8Str &aFile);
daa94352f51be2329ac8660f70396e03a7cb983bvboxsync HRESULT createMachine(const com::Utf8Str &aSettingsFile,
daa94352f51be2329ac8660f70396e03a7cb983bvboxsync const com::Utf8Str &aName,
daa94352f51be2329ac8660f70396e03a7cb983bvboxsync const std::vector<com::Utf8Str> &aGroups,
daa94352f51be2329ac8660f70396e03a7cb983bvboxsync const com::Utf8Str &aOsTypeId,
daa94352f51be2329ac8660f70396e03a7cb983bvboxsync const com::Utf8Str &aFlags,
daa94352f51be2329ac8660f70396e03a7cb983bvboxsync ComPtr<IMachine> &aMachine);
daa94352f51be2329ac8660f70396e03a7cb983bvboxsync HRESULT openMachine(const com::Utf8Str &aSettingsFile,
daa94352f51be2329ac8660f70396e03a7cb983bvboxsync ComPtr<IMachine> &aMachine);
daa94352f51be2329ac8660f70396e03a7cb983bvboxsync HRESULT registerMachine(const ComPtr<IMachine> &aMachine);
daa94352f51be2329ac8660f70396e03a7cb983bvboxsync HRESULT findMachine(const com::Utf8Str &aNameOrId,
daa94352f51be2329ac8660f70396e03a7cb983bvboxsync ComPtr<IMachine> &aMachine);
daa94352f51be2329ac8660f70396e03a7cb983bvboxsync HRESULT getMachinesByGroups(const std::vector<com::Utf8Str> &aGroups,
daa94352f51be2329ac8660f70396e03a7cb983bvboxsync std::vector<ComPtr<IMachine> > &aMachines);
daa94352f51be2329ac8660f70396e03a7cb983bvboxsync HRESULT getMachineStates(const std::vector<ComPtr<IMachine> > &aMachines,
daa94352f51be2329ac8660f70396e03a7cb983bvboxsync std::vector<MachineState_T> &aStates);
daa94352f51be2329ac8660f70396e03a7cb983bvboxsync HRESULT createAppliance(ComPtr<IAppliance> &aAppliance);
daa94352f51be2329ac8660f70396e03a7cb983bvboxsync HRESULT createHardDisk(const com::Utf8Str &aFormat,
daa94352f51be2329ac8660f70396e03a7cb983bvboxsync const com::Utf8Str &aLocation,
daa94352f51be2329ac8660f70396e03a7cb983bvboxsync ComPtr<IMedium> &aMedium);
daa94352f51be2329ac8660f70396e03a7cb983bvboxsync HRESULT openMedium(const com::Utf8Str &aLocation,
daa94352f51be2329ac8660f70396e03a7cb983bvboxsync DeviceType_T aDeviceType,
daa94352f51be2329ac8660f70396e03a7cb983bvboxsync AccessMode_T aAccessMode,
daa94352f51be2329ac8660f70396e03a7cb983bvboxsync BOOL aForceNewUuid,
daa94352f51be2329ac8660f70396e03a7cb983bvboxsync ComPtr<IMedium> &aMedium);
daa94352f51be2329ac8660f70396e03a7cb983bvboxsync HRESULT getGuestOSType(const com::Utf8Str &aId,
daa94352f51be2329ac8660f70396e03a7cb983bvboxsync ComPtr<IGuestOSType> &aType);
daa94352f51be2329ac8660f70396e03a7cb983bvboxsync HRESULT createSharedFolder(const com::Utf8Str &aName,
daa94352f51be2329ac8660f70396e03a7cb983bvboxsync const com::Utf8Str &aHostPath,
daa94352f51be2329ac8660f70396e03a7cb983bvboxsync BOOL aWritable,
daa94352f51be2329ac8660f70396e03a7cb983bvboxsync BOOL aAutomount);
daa94352f51be2329ac8660f70396e03a7cb983bvboxsync HRESULT removeSharedFolder(const com::Utf8Str &aName);
daa94352f51be2329ac8660f70396e03a7cb983bvboxsync HRESULT getExtraDataKeys(std::vector<com::Utf8Str> &aKeys);
daa94352f51be2329ac8660f70396e03a7cb983bvboxsync HRESULT getExtraData(const com::Utf8Str &aKey,
daa94352f51be2329ac8660f70396e03a7cb983bvboxsync com::Utf8Str &aValue);
daa94352f51be2329ac8660f70396e03a7cb983bvboxsync HRESULT setExtraData(const com::Utf8Str &aKey,
daa94352f51be2329ac8660f70396e03a7cb983bvboxsync const com::Utf8Str &aValue);
daa94352f51be2329ac8660f70396e03a7cb983bvboxsync HRESULT setSettingsSecret(const com::Utf8Str &aPassword);
daa94352f51be2329ac8660f70396e03a7cb983bvboxsync HRESULT createDHCPServer(const com::Utf8Str &aName,
daa94352f51be2329ac8660f70396e03a7cb983bvboxsync ComPtr<IDHCPServer> &aServer);
daa94352f51be2329ac8660f70396e03a7cb983bvboxsync HRESULT findDHCPServerByNetworkName(const com::Utf8Str &aName,
daa94352f51be2329ac8660f70396e03a7cb983bvboxsync ComPtr<IDHCPServer> &aServer);
daa94352f51be2329ac8660f70396e03a7cb983bvboxsync HRESULT removeDHCPServer(const ComPtr<IDHCPServer> &aServer);
daa94352f51be2329ac8660f70396e03a7cb983bvboxsync HRESULT createNATNetwork(const com::Utf8Str &aNetworkName,
daa94352f51be2329ac8660f70396e03a7cb983bvboxsync ComPtr<INATNetwork> &aNetwork);
daa94352f51be2329ac8660f70396e03a7cb983bvboxsync HRESULT findNATNetworkByName(const com::Utf8Str &aNetworkName,
daa94352f51be2329ac8660f70396e03a7cb983bvboxsync ComPtr<INATNetwork> &aNetwork);
daa94352f51be2329ac8660f70396e03a7cb983bvboxsync HRESULT removeNATNetwork(const ComPtr<INATNetwork> &aNetwork);
daa94352f51be2329ac8660f70396e03a7cb983bvboxsync HRESULT checkFirmwarePresent(FirmwareType_T aFirmwareType,
daa94352f51be2329ac8660f70396e03a7cb983bvboxsync const com::Utf8Str &aVersion,
daa94352f51be2329ac8660f70396e03a7cb983bvboxsync com::Utf8Str &aUrl,
daa94352f51be2329ac8660f70396e03a7cb983bvboxsync com::Utf8Str &aFile,
daa94352f51be2329ac8660f70396e03a7cb983bvboxsync BOOL *aResult);
daa94352f51be2329ac8660f70396e03a7cb983bvboxsync
daa94352f51be2329ac8660f70396e03a7cb983bvboxsync static HRESULT i_setErrorStatic(HRESULT aResultCode,
daa94352f51be2329ac8660f70396e03a7cb983bvboxsync const Utf8Str &aText)
daa94352f51be2329ac8660f70396e03a7cb983bvboxsync {
daa94352f51be2329ac8660f70396e03a7cb983bvboxsync return setErrorInternal(aResultCode, getStaticClassIID(), getStaticComponentName(), aText, false, true);
daa94352f51be2329ac8660f70396e03a7cb983bvboxsync }
daa94352f51be2329ac8660f70396e03a7cb983bvboxsync
daa94352f51be2329ac8660f70396e03a7cb983bvboxsync HRESULT i_registerMachine(Machine *aMachine);
daa94352f51be2329ac8660f70396e03a7cb983bvboxsync HRESULT i_registerDHCPServer(DHCPServer *aDHCPServer,
daa94352f51be2329ac8660f70396e03a7cb983bvboxsync bool aSaveRegistry = true);
e9684b4f760eb8ec77e3883dd2e3c42db9d7cc80vboxsync HRESULT i_unregisterDHCPServer(DHCPServer *aDHCPServer,
daa94352f51be2329ac8660f70396e03a7cb983bvboxsync bool aSaveRegistry = true);
daa94352f51be2329ac8660f70396e03a7cb983bvboxsync HRESULT i_registerNATNetwork(NATNetwork *aNATNetwork,
daa94352f51be2329ac8660f70396e03a7cb983bvboxsync bool aSaveRegistry = true);
daa94352f51be2329ac8660f70396e03a7cb983bvboxsync HRESULT i_unregisterNATNetwork(NATNetwork *aNATNetwork,
daa94352f51be2329ac8660f70396e03a7cb983bvboxsync bool aSaveRegistry = true);
daa94352f51be2329ac8660f70396e03a7cb983bvboxsync HRESULT i_checkMediaForConflicts(const Guid &aId,
daa94352f51be2329ac8660f70396e03a7cb983bvboxsync const Utf8Str &aLocation,
daa94352f51be2329ac8660f70396e03a7cb983bvboxsync Utf8Str &aConflictType,
daa94352f51be2329ac8660f70396e03a7cb983bvboxsync ComObjPtr<Medium> *pDupMedium);
daa94352f51be2329ac8660f70396e03a7cb983bvboxsync int i_decryptSettings();
daa94352f51be2329ac8660f70396e03a7cb983bvboxsync int i_decryptMediumSettings(Medium *pMedium);
daa94352f51be2329ac8660f70396e03a7cb983bvboxsync int i_decryptSettingBytes(uint8_t *aPlaintext,
daa94352f51be2329ac8660f70396e03a7cb983bvboxsync const uint8_t *aCiphertext,
daa94352f51be2329ac8660f70396e03a7cb983bvboxsync size_t aCiphertextSize) const;
daa94352f51be2329ac8660f70396e03a7cb983bvboxsync int i_encryptSettingBytes(const uint8_t *aPlaintext,
daa94352f51be2329ac8660f70396e03a7cb983bvboxsync uint8_t *aCiphertext,
daa94352f51be2329ac8660f70396e03a7cb983bvboxsync size_t aPlaintextSize,
daa94352f51be2329ac8660f70396e03a7cb983bvboxsync size_t aCiphertextSize) const;
daa94352f51be2329ac8660f70396e03a7cb983bvboxsync
daa94352f51be2329ac8660f70396e03a7cb983bvboxsync struct Data; // opaque data structure, defined in VirtualBoxImpl.cpp
daa94352f51be2329ac8660f70396e03a7cb983bvboxsync
daa94352f51be2329ac8660f70396e03a7cb983bvboxsync Data *m;
daa94352f51be2329ac8660f70396e03a7cb983bvboxsync
daa94352f51be2329ac8660f70396e03a7cb983bvboxsync /* static variables (defined in VirtualBoxImpl.cpp) */
daa94352f51be2329ac8660f70396e03a7cb983bvboxsync static com::Utf8Str sVersion;
daa94352f51be2329ac8660f70396e03a7cb983bvboxsync static com::Utf8Str sVersionNormalized;
daa94352f51be2329ac8660f70396e03a7cb983bvboxsync static ULONG sRevision;
daa94352f51be2329ac8660f70396e03a7cb983bvboxsync static com::Utf8Str sPackageType;
daa94352f51be2329ac8660f70396e03a7cb983bvboxsync static com::Utf8Str sAPIVersion;
daa94352f51be2329ac8660f70396e03a7cb983bvboxsync static std::map<com::Utf8Str, int> sNatNetworkNameToRefCount;
daa94352f51be2329ac8660f70396e03a7cb983bvboxsync static RWLockHandle* spMtxNatNetworkNameToRefCountLock;
daa94352f51be2329ac8660f70396e03a7cb983bvboxsync
daa94352f51be2329ac8660f70396e03a7cb983bvboxsync static DECLCALLBACK(int) AsyncEventHandler(RTTHREAD thread, void *pvUser);
daa94352f51be2329ac8660f70396e03a7cb983bvboxsync
daa94352f51be2329ac8660f70396e03a7cb983bvboxsync#ifdef RT_OS_WINDOWS
daa94352f51be2329ac8660f70396e03a7cb983bvboxsync static DECLCALLBACK(int) SVCHelperClientThread(RTTHREAD aThread, void *aUser);
daa94352f51be2329ac8660f70396e03a7cb983bvboxsync#endif
daa94352f51be2329ac8660f70396e03a7cb983bvboxsync};
daa94352f51be2329ac8660f70396e03a7cb983bvboxsync
daa94352f51be2329ac8660f70396e03a7cb983bvboxsync////////////////////////////////////////////////////////////////////////////////
daa94352f51be2329ac8660f70396e03a7cb983bvboxsync
daa94352f51be2329ac8660f70396e03a7cb983bvboxsync#endif // !____H_VIRTUALBOXIMPL
daa94352f51be2329ac8660f70396e03a7cb983bvboxsync
daa94352f51be2329ac8660f70396e03a7cb983bvboxsync