VirtualBoxImpl.h revision 1bef0d3fd3b2fe689a4eaa9ebf0647b8bf7c662e
daa94352f51be2329ac8660f70396e03a7cb983bvboxsync * VirtualBox COM class implementation
daa94352f51be2329ac8660f70396e03a7cb983bvboxsync * Copyright (C) 2006-2009 Sun Microsystems, Inc.
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 * Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa
daa94352f51be2329ac8660f70396e03a7cb983bvboxsync * Clara, CA 95054 USA or visit http://www.sun.com if you need
daa94352f51be2329ac8660f70396e03a7cb983bvboxsync * additional information or have any questions.
daa94352f51be2329ac8660f70396e03a7cb983bvboxsync#endif /* VBOX_WITH_RESOURCE_USAGE_API */
daa94352f51be2329ac8660f70396e03a7cb983bvboxsync public VirtualBoxSupportErrorInfoImpl <VirtualBox, IVirtualBox>,
daa94352f51be2329ac8660f70396e03a7cb983bvboxsync public IDispatchImpl<IVirtualBox, &IID_IVirtualBox, &LIBID_VirtualBox,
daa94352f51be2329ac8660f70396e03a7cb983bvboxsync kTypeLibraryMajorVersion, kTypeLibraryMinorVersion>,
daa94352f51be2329ac8660f70396e03a7cb983bvboxsync typedef std::list <ComPtr <IVirtualBoxCallback> > CallbackList;
daa94352f51be2329ac8660f70396e03a7cb983bvboxsync typedef std::vector <ComPtr <IVirtualBoxCallback> > CallbackVector;
daa94352f51be2329ac8660f70396e03a7cb983bvboxsync typedef std::vector <ComObjPtr <SessionMachine> > SessionMachineVector;
daa94352f51be2329ac8660f70396e03a7cb983bvboxsync typedef std::vector <ComObjPtr <Machine> > MachineVector;
daa94352f51be2329ac8660f70396e03a7cb983bvboxsync typedef std::vector <ComPtr <IInternalSessionControl> > InternalControlVector;
daa94352f51be2329ac8660f70396e03a7cb983bvboxsync /* to postpone generation of the default ctor/dtor */
daa94352f51be2329ac8660f70396e03a7cb983bvboxsync /* public initializer/uninitializer for internal purposes only */
daa94352f51be2329ac8660f70396e03a7cb983bvboxsync /* IVirtualBox properties */
d90eec53c9dcaa0f3d1054e8734ed46875b9093avboxsync STDMETHOD(COMGETTER(PackageType)) (BSTR *aPackageType);
daa94352f51be2329ac8660f70396e03a7cb983bvboxsync STDMETHOD(COMGETTER(HomeFolder)) (BSTR *aHomeFolder);
d90eec53c9dcaa0f3d1054e8734ed46875b9093avboxsync STDMETHOD(COMGETTER(SettingsFilePath)) (BSTR *aSettingsFilePath);
daa94352f51be2329ac8660f70396e03a7cb983bvboxsync STDMETHOD(COMGETTER(SettingsFileVersion)) (BSTR *aSettingsFileVersion);
daa94352f51be2329ac8660f70396e03a7cb983bvboxsync STDMETHOD(COMGETTER(SettingsFormatVersion)) (BSTR *aSettingsFormatVersion);
daa94352f51be2329ac8660f70396e03a7cb983bvboxsync STDMETHOD(COMGETTER(SystemProperties)) (ISystemProperties **aSystemProperties);
d90eec53c9dcaa0f3d1054e8734ed46875b9093avboxsync STDMETHOD(COMGETTER(Machines)) (ComSafeArrayOut (IMachine *, aMachines));
daa94352f51be2329ac8660f70396e03a7cb983bvboxsync STDMETHOD(COMGETTER(HardDisks)) (ComSafeArrayOut (IHardDisk *, aHardDisks));
d90eec53c9dcaa0f3d1054e8734ed46875b9093avboxsync STDMETHOD(COMGETTER(DVDImages)) (ComSafeArrayOut (IDVDImage *, aDVDImages));
daa94352f51be2329ac8660f70396e03a7cb983bvboxsync STDMETHOD(COMGETTER(FloppyImages)) (ComSafeArrayOut (IFloppyImage *, aFloppyImages));
daa94352f51be2329ac8660f70396e03a7cb983bvboxsync STDMETHOD(COMGETTER(ProgressOperations)) (ComSafeArrayOut (IProgress *, aOperations));
daa94352f51be2329ac8660f70396e03a7cb983bvboxsync STDMETHOD(COMGETTER(GuestOSTypes)) (ComSafeArrayOut (IGuestOSType *, aGuestOSTypes));
daa94352f51be2329ac8660f70396e03a7cb983bvboxsync STDMETHOD(COMGETTER(SharedFolders)) (ComSafeArrayOut (ISharedFolder *, aSharedFolders));
daa94352f51be2329ac8660f70396e03a7cb983bvboxsync STDMETHOD(COMGETTER(PerformanceCollector)) (IPerformanceCollector **aPerformanceCollector);
daa94352f51be2329ac8660f70396e03a7cb983bvboxsync /* IVirtualBox methods */
daa94352f51be2329ac8660f70396e03a7cb983bvboxsync STDMETHOD(CreateMachine) (IN_BSTR aName, IN_BSTR aOsTypeId, IN_BSTR aBaseFolder,
daa94352f51be2329ac8660f70396e03a7cb983bvboxsync STDMETHOD(CreateLegacyMachine) (IN_BSTR aName, IN_BSTR aOsTypeId, IN_BSTR aSettingsFile,
daa94352f51be2329ac8660f70396e03a7cb983bvboxsync STDMETHOD(OpenMachine) (IN_BSTR aSettingsFile, IMachine **aMachine);
daa94352f51be2329ac8660f70396e03a7cb983bvboxsync STDMETHOD(GetMachine) (IN_GUID aId, IMachine **aMachine);
daa94352f51be2329ac8660f70396e03a7cb983bvboxsync STDMETHOD(FindMachine) (IN_BSTR aName, IMachine **aMachine);
daa94352f51be2329ac8660f70396e03a7cb983bvboxsync STDMETHOD(UnregisterMachine) (IN_GUID aId, IMachine **aMachine);
daa94352f51be2329ac8660f70396e03a7cb983bvboxsync STDMETHOD(CreateAppliance) (IAppliance **anAppliance);
daa94352f51be2329ac8660f70396e03a7cb983bvboxsync STDMETHOD(CreateHardDisk)(IN_BSTR aFormat, IN_BSTR aLocation,
daa94352f51be2329ac8660f70396e03a7cb983bvboxsync STDMETHOD(OpenHardDisk) (IN_BSTR aLocation, IHardDisk **aHardDisk);
daa94352f51be2329ac8660f70396e03a7cb983bvboxsync STDMETHOD(GetHardDisk) (IN_GUID aId, IHardDisk **aHardDisk);
daa94352f51be2329ac8660f70396e03a7cb983bvboxsync STDMETHOD(FindHardDisk) (IN_BSTR aLocation, IHardDisk **aHardDisk);
daa94352f51be2329ac8660f70396e03a7cb983bvboxsync STDMETHOD(OpenDVDImage) (IN_BSTR aLocation, IN_GUID aId,
daa94352f51be2329ac8660f70396e03a7cb983bvboxsync STDMETHOD(GetDVDImage) (IN_GUID aId, IDVDImage **aDVDImage);
daa94352f51be2329ac8660f70396e03a7cb983bvboxsync STDMETHOD(FindDVDImage) (IN_BSTR aLocation, IDVDImage **aDVDImage);
daa94352f51be2329ac8660f70396e03a7cb983bvboxsync STDMETHOD(OpenFloppyImage) (IN_BSTR aLocation, IN_GUID aId,
daa94352f51be2329ac8660f70396e03a7cb983bvboxsync STDMETHOD(GetFloppyImage) (IN_GUID aId, IFloppyImage **aFloppyImage);
daa94352f51be2329ac8660f70396e03a7cb983bvboxsync STDMETHOD(FindFloppyImage) (IN_BSTR aLocation, IFloppyImage **aFloppyImage);
daa94352f51be2329ac8660f70396e03a7cb983bvboxsync STDMETHOD(GetGuestOSType) (IN_BSTR aId, IGuestOSType **aType);
daa94352f51be2329ac8660f70396e03a7cb983bvboxsync STDMETHOD(CreateSharedFolder) (IN_BSTR aName, IN_BSTR aHostPath, BOOL aWritable);
daa94352f51be2329ac8660f70396e03a7cb983bvboxsync STDMETHOD(GetNextExtraDataKey) (IN_BSTR aKey, BSTR *aNextKey, BSTR *aNextValue);
daa94352f51be2329ac8660f70396e03a7cb983bvboxsync STDMETHOD(GetExtraData) (IN_BSTR aKey, BSTR *aValue);
daa94352f51be2329ac8660f70396e03a7cb983bvboxsync STDMETHOD(SetExtraData) (IN_BSTR aKey, IN_BSTR aValue);
daa94352f51be2329ac8660f70396e03a7cb983bvboxsync STDMETHOD(OpenSession) (ISession *aSession, IN_GUID aMachineId);
daa94352f51be2329ac8660f70396e03a7cb983bvboxsync STDMETHOD(OpenRemoteSession) (ISession *aSession, IN_GUID aMachineId,
daa94352f51be2329ac8660f70396e03a7cb983bvboxsync STDMETHOD(OpenExistingSession) (ISession *aSession, IN_GUID aMachineId);
daa94352f51be2329ac8660f70396e03a7cb983bvboxsync STDMETHOD(RegisterCallback) (IVirtualBoxCallback *aCallback);
daa94352f51be2329ac8660f70396e03a7cb983bvboxsync STDMETHOD(UnregisterCallback) (IVirtualBoxCallback *aCallback);
daa94352f51be2329ac8660f70396e03a7cb983bvboxsync STDMETHOD(WaitForPropertyChange) (IN_BSTR aWhat, ULONG aTimeout,
daa94352f51be2329ac8660f70396e03a7cb983bvboxsync STDMETHOD(SaveSettingsWithBackup) (BSTR *aBakFileName);
daa94352f51be2329ac8660f70396e03a7cb983bvboxsync /* public methods only for internal purposes */
daa94352f51be2329ac8660f70396e03a7cb983bvboxsync typedef DECLCALLBACKPTR (HRESULT, SVCHelperClientFunc)
daa94352f51be2329ac8660f70396e03a7cb983bvboxsync (SVCHlpClient *aClient, Progress *aProgress, void *aUser, int *aVrc);
daa94352f51be2329ac8660f70396e03a7cb983bvboxsync void onMachineStateChange (const Guid &aId, MachineState_T aState);
daa94352f51be2329ac8660f70396e03a7cb983bvboxsync BOOL onExtraDataCanChange(const Guid &aId, IN_BSTR aKey, IN_BSTR aValue,
daa94352f51be2329ac8660f70396e03a7cb983bvboxsync void onExtraDataChange(const Guid &aId, IN_BSTR aKey, IN_BSTR aValue);
daa94352f51be2329ac8660f70396e03a7cb983bvboxsync void onMachineRegistered (const Guid &aId, BOOL aRegistered);
daa94352f51be2329ac8660f70396e03a7cb983bvboxsync void onSessionStateChange (const Guid &aId, SessionState_T aState);
daa94352f51be2329ac8660f70396e03a7cb983bvboxsync void onSnapshotTaken (const Guid &aMachineId, const Guid &aSnapshotId);
daa94352f51be2329ac8660f70396e03a7cb983bvboxsync void onSnapshotDiscarded (const Guid &aMachineId, const Guid &aSnapshotId);
daa94352f51be2329ac8660f70396e03a7cb983bvboxsync void onSnapshotChange (const Guid &aMachineId, const Guid &aSnapshotId);
daa94352f51be2329ac8660f70396e03a7cb983bvboxsync void onGuestPropertyChange (const Guid &aMachineId, IN_BSTR aName, IN_BSTR aValue,
daa94352f51be2329ac8660f70396e03a7cb983bvboxsync void getOpenedMachines (SessionMachineVector &aMachines,
daa94352f51be2329ac8660f70396e03a7cb983bvboxsync /** Shortcut to #getOpenedMachines (aMachines, &aControls). */
daa94352f51be2329ac8660f70396e03a7cb983bvboxsync void getOpenedMachinesAndControls (SessionMachineVector &aMachines,
daa94352f51be2329ac8660f70396e03a7cb983bvboxsync return SUCCEEDED (findMachine (aId, false /* aSetError */, NULL));
daa94352f51be2329ac8660f70396e03a7cb983bvboxsync HRESULT findMachine (const Guid &aId, bool aSetError,
daa94352f51be2329ac8660f70396e03a7cb983bvboxsync HRESULT findHardDisk(const Guid *aId, CBSTR aLocation,
daa94352f51be2329ac8660f70396e03a7cb983bvboxsync bool aSetError, ComObjPtr<HardDisk> *aHardDisk = NULL);
daa94352f51be2329ac8660f70396e03a7cb983bvboxsync HRESULT findDVDImage(const Guid *aId, CBSTR aLocation,
daa94352f51be2329ac8660f70396e03a7cb983bvboxsync bool aSetError, ComObjPtr<DVDImage> *aImage = NULL);
daa94352f51be2329ac8660f70396e03a7cb983bvboxsync HRESULT findFloppyImage(const Guid *aId, CBSTR aLocation,
daa94352f51be2329ac8660f70396e03a7cb983bvboxsync bool aSetError, ComObjPtr<FloppyImage> *aImage = NULL);
daa94352f51be2329ac8660f70396e03a7cb983bvboxsync const ComObjPtr <Host> &host() { return mData.mHost; }
daa94352f51be2329ac8660f70396e03a7cb983bvboxsync const ComObjPtr <SystemProperties> &systemProperties()
daa94352f51be2329ac8660f70396e03a7cb983bvboxsync const ComObjPtr <PerformanceCollector> &performanceCollector()
daa94352f51be2329ac8660f70396e03a7cb983bvboxsync#endif /* VBOX_WITH_RESOURCE_USAGE_API */
daa94352f51be2329ac8660f70396e03a7cb983bvboxsync /** Returns the VirtualBox home directory */
daa94352f51be2329ac8660f70396e03a7cb983bvboxsync const Utf8Str &homeDir() { return mData.mHomeDir; }
daa94352f51be2329ac8660f70396e03a7cb983bvboxsync int calculateFullPath (const char *aPath, Utf8Str &aResult);
daa94352f51be2329ac8660f70396e03a7cb983bvboxsync void calculateRelativePath (const char *aPath, Utf8Str &aResult);
daa94352f51be2329ac8660f70396e03a7cb983bvboxsync HRESULT registerHardDisk(HardDisk *aHardDisk, bool aSaveRegistry = true);
daa94352f51be2329ac8660f70396e03a7cb983bvboxsync HRESULT unregisterHardDisk(HardDisk *aHardDisk, bool aSaveRegistry = true);
daa94352f51be2329ac8660f70396e03a7cb983bvboxsync HRESULT registerDVDImage(DVDImage *aImage, bool aSaveRegistry = true);
daa94352f51be2329ac8660f70396e03a7cb983bvboxsync HRESULT unregisterDVDImage(DVDImage *aImage, bool aSaveRegistry = true);
daa94352f51be2329ac8660f70396e03a7cb983bvboxsync HRESULT registerFloppyImage (FloppyImage *aImage, bool aSaveRegistry = true);
daa94352f51be2329ac8660f70396e03a7cb983bvboxsync HRESULT unregisterFloppyImage (FloppyImage *aImage, bool aSaveRegistry = true);
daa94352f51be2329ac8660f70396e03a7cb983bvboxsync HRESULT cast (IHardDisk *aFrom, ComObjPtr<HardDisk> &aTo);
daa94352f51be2329ac8660f70396e03a7cb983bvboxsync HRESULT updateSettings (const char *aOldPath, const char *aNewPath);
daa94352f51be2329ac8660f70396e03a7cb983bvboxsync const Bstr &settingsFileName() { return mData.mCfgFile.mName; }
daa94352f51be2329ac8660f70396e03a7cb983bvboxsync static HRESULT ensureFilePathExists (const char *aFileName);
daa94352f51be2329ac8660f70396e03a7cb983bvboxsync static HRESULT loadSettingsTree (settings::XmlTreeBackend &aTree,
daa94352f51be2329ac8660f70396e03a7cb983bvboxsync * Shortcut to loadSettingsTree (aTree, aFile, true, true, true).
daa94352f51be2329ac8660f70396e03a7cb983bvboxsync * Used when the settings file is to be loaded for the first time for the
daa94352f51be2329ac8660f70396e03a7cb983bvboxsync * given object in order to recreate it from the stored settings.
daa94352f51be2329ac8660f70396e03a7cb983bvboxsync * @param aFormatVersion Where to store the current format version of the
daa94352f51be2329ac8660f70396e03a7cb983bvboxsync * loaded settings tree.
daa94352f51be2329ac8660f70396e03a7cb983bvboxsync static HRESULT loadSettingsTree_FirstTime (settings::XmlTreeBackend &aTree,
daa94352f51be2329ac8660f70396e03a7cb983bvboxsync return loadSettingsTree (aTree, aFile, true, true, true,
daa94352f51be2329ac8660f70396e03a7cb983bvboxsync * Shortcut to loadSettingsTree (aTree, aFile, true, false, true).
daa94352f51be2329ac8660f70396e03a7cb983bvboxsync * Used when the settings file is loaded again (after it has been fully
daa94352f51be2329ac8660f70396e03a7cb983bvboxsync * checked and validated by #loadSettingsTree_FirstTime()) in order to
daa94352f51be2329ac8660f70396e03a7cb983bvboxsync * look at settings that don't have any representation within object's
daa94352f51be2329ac8660f70396e03a7cb983bvboxsync * data fields.
daa94352f51be2329ac8660f70396e03a7cb983bvboxsync static HRESULT loadSettingsTree_Again (settings::XmlTreeBackend &aTree,
daa94352f51be2329ac8660f70396e03a7cb983bvboxsync return loadSettingsTree (aTree, aFile, true, false, true);
daa94352f51be2329ac8660f70396e03a7cb983bvboxsync * Shortcut to loadSettingsTree (aTree, aFile, true, false, false).
daa94352f51be2329ac8660f70396e03a7cb983bvboxsync * Used when the settings file is loaded again (after it has been fully
daa94352f51be2329ac8660f70396e03a7cb983bvboxsync * checked and validated by #loadSettingsTree_FirstTime()) in order to
daa94352f51be2329ac8660f70396e03a7cb983bvboxsync * update some settings and then save them back.
daa94352f51be2329ac8660f70396e03a7cb983bvboxsync static HRESULT loadSettingsTree_ForUpdate (settings::XmlTreeBackend &aTree,
daa94352f51be2329ac8660f70396e03a7cb983bvboxsync return loadSettingsTree (aTree, aFile, true, false, false);
daa94352f51be2329ac8660f70396e03a7cb983bvboxsync static HRESULT saveSettingsTree (settings::TreeBackend &aTree,
daa94352f51be2329ac8660f70396e03a7cb983bvboxsync static HRESULT backupSettingsFile (const Bstr &aFileName,
daa94352f51be2329ac8660f70396e03a7cb983bvboxsync static HRESULT handleUnexpectedExceptions (RT_SRC_POS_DECL);
daa94352f51be2329ac8660f70396e03a7cb983bvboxsync * Returns a lock handle used to protect changes to the hard disk hierarchy
daa94352f51be2329ac8660f70396e03a7cb983bvboxsync * (e.g. serialize access to the HardDisk::mParent fields and methods
daa94352f51be2329ac8660f70396e03a7cb983bvboxsync * adding/removing children). When using this lock, the following rules must
daa94352f51be2329ac8660f70396e03a7cb983bvboxsync * be obeyed:
daa94352f51be2329ac8660f70396e03a7cb983bvboxsync * 1. The write lock on this handle must be either held alone on the thread
daa94352f51be2329ac8660f70396e03a7cb983bvboxsync * or requested *after* the VirtualBox object lock. Mixing with other
daa94352f51be2329ac8660f70396e03a7cb983bvboxsync * locks is prohibited.
daa94352f51be2329ac8660f70396e03a7cb983bvboxsync * 2. The read lock on this handle may be intermixed with any other lock
daa94352f51be2329ac8660f70396e03a7cb983bvboxsync * with the exception that it must be requested *after* the VirtualBox
daa94352f51be2329ac8660f70396e03a7cb983bvboxsync * object lock.
daa94352f51be2329ac8660f70396e03a7cb983bvboxsync RWLockHandle *hardDiskTreeLockHandle() { return &mHardDiskTreeLockHandle; }
daa94352f51be2329ac8660f70396e03a7cb983bvboxsync /* for VirtualBoxSupportErrorInfoImpl */
daa94352f51be2329ac8660f70396e03a7cb983bvboxsync static const wchar_t *getComponentName() { return L"VirtualBox"; }
daa94352f51be2329ac8660f70396e03a7cb983bvboxsync typedef std::list <ComObjPtr <Machine> > MachineList;
daa94352f51be2329ac8660f70396e03a7cb983bvboxsync typedef std::list <ComObjPtr <GuestOSType> > GuestOSTypeList;
daa94352f51be2329ac8660f70396e03a7cb983bvboxsync typedef std::map <Guid, ComPtr <IProgress> > ProgressMap;
daa94352f51be2329ac8660f70396e03a7cb983bvboxsync typedef std::list <ComObjPtr <HardDisk> > HardDiskList;
daa94352f51be2329ac8660f70396e03a7cb983bvboxsync typedef std::list <ComObjPtr <DVDImage> > DVDImageList;
daa94352f51be2329ac8660f70396e03a7cb983bvboxsync typedef std::list <ComObjPtr <FloppyImage> > FloppyImageList;
daa94352f51be2329ac8660f70396e03a7cb983bvboxsync typedef std::list <ComObjPtr <SharedFolder> > SharedFolderList;
daa94352f51be2329ac8660f70396e03a7cb983bvboxsync typedef std::map <Guid, ComObjPtr<HardDisk> > HardDiskMap;
daa94352f51be2329ac8660f70396e03a7cb983bvboxsync * Reimplements VirtualBoxWithTypedChildren::childrenLock() to return a
daa94352f51be2329ac8660f70396e03a7cb983bvboxsync * dedicated lock instead of the main object lock. The dedicated lock for
daa94352f51be2329ac8660f70396e03a7cb983bvboxsync * child map operations frees callers of init() methods of these children
daa94352f51be2329ac8660f70396e03a7cb983bvboxsync * from acquiring a write parent (VirtualBox) lock (which would be mandatory
daa94352f51be2329ac8660f70396e03a7cb983bvboxsync * otherwise). Since VirtualBox has a lot of heterogenous children which
daa94352f51be2329ac8660f70396e03a7cb983bvboxsync * init() methods are called here and there, it definitely makes sense.
daa94352f51be2329ac8660f70396e03a7cb983bvboxsync RWLockHandle *childrenLock() { return &mChildrenMapLockHandle; }
daa94352f51be2329ac8660f70396e03a7cb983bvboxsync HRESULT checkMediaForConflicts2 (const Guid &aId, const Bstr &aLocation,
daa94352f51be2329ac8660f70396e03a7cb983bvboxsync HRESULT loadMachines (const settings::Key &aGlobal);
daa94352f51be2329ac8660f70396e03a7cb983bvboxsync /** @note This method is not thread safe */
daa94352f51be2329ac8660f70396e03a7cb983bvboxsync bool isConfigLocked() { return mData.mCfgFile.mHandle != NIL_RTFILE; }
d1e9999d55e7ac80a28692c161710be98071fc00vboxsync * Main VirtualBox data structure.
daa94352f51be2329ac8660f70396e03a7cb983bvboxsync * @note |const| members are persistent during lifetime so can be accessed
daa94352f51be2329ac8660f70396e03a7cb983bvboxsync * without locking.
daa94352f51be2329ac8660f70396e03a7cb983bvboxsync // const data members not requiring locking
daa94352f51be2329ac8660f70396e03a7cb983bvboxsync // const objects not requiring locking
daa94352f51be2329ac8660f70396e03a7cb983bvboxsync const ComObjPtr <SystemProperties> mSystemProperties;
daa94352f51be2329ac8660f70396e03a7cb983bvboxsync const ComObjPtr <PerformanceCollector> mPerformanceCollector;
daa94352f51be2329ac8660f70396e03a7cb983bvboxsync#endif /* VBOX_WITH_RESOURCE_USAGE_API */
daa94352f51be2329ac8660f70396e03a7cb983bvboxsync /// @todo NEWMEDIA do we really need this map? Used only in
daa94352f51be2329ac8660f70396e03a7cb983bvboxsync /// find() it seems
d1e9999d55e7ac80a28692c161710be98071fc00vboxsync /** Client watcher thread data structure */
6ba706e9f431401d425d16817fdcd6316f83b584vboxsync // const objects not requiring locking
daa94352f51be2329ac8660f70396e03a7cb983bvboxsync * "Safe" lock. May only be used if guaranteed that no other locks are
daa94352f51be2329ac8660f70396e03a7cb983bvboxsync * requested while holding it and no functions that may do so are called.
daa94352f51be2329ac8660f70396e03a7cb983bvboxsync * Currently, protects the following:
daa94352f51be2329ac8660f70396e03a7cb983bvboxsync * - mProgressOperations
3bb3e26b3306b9f62b18c17380bdf2ca3a98ca49vboxsync static DECLCALLBACK(int) ClientWatcher (RTTHREAD thread, void *pvUser);
3bb3e26b3306b9f62b18c17380bdf2ca3a98ca49vboxsync static DECLCALLBACK(int) AsyncEventHandler (RTTHREAD thread, void *pvUser);
3bb3e26b3306b9f62b18c17380bdf2ca3a98ca49vboxsync static DECLCALLBACK(int) SVCHelperClientThread (RTTHREAD aThread, void *aUser);
3bb3e26b3306b9f62b18c17380bdf2ca3a98ca49vboxsync////////////////////////////////////////////////////////////////////////////////
daa94352f51be2329ac8660f70396e03a7cb983bvboxsync * Abstract callback event class to asynchronously call VirtualBox callbacks
daa94352f51be2329ac8660f70396e03a7cb983bvboxsync * on a dedicated event thread. Subclasses reimplement #handleCallback()
daa94352f51be2329ac8660f70396e03a7cb983bvboxsync * to call appropriate IVirtualBoxCallback methods depending on the event
daa94352f51be2329ac8660f70396e03a7cb983bvboxsync * to be dispatched.
daa94352f51be2329ac8660f70396e03a7cb983bvboxsync * @note The VirtualBox instance passed to the constructor is strongly
daa94352f51be2329ac8660f70396e03a7cb983bvboxsync * referenced, so that the VirtualBox singleton won't be released until the
daa94352f51be2329ac8660f70396e03a7cb983bvboxsync * event gets handled by the event thread.
abe1b07126bb9f5644b2ad8424534c2d1e97a66cvboxsync CallbackEvent (VirtualBox *aVirtualBox) : mVirtualBox (aVirtualBox)
abe1b07126bb9f5644b2ad8424534c2d1e97a66cvboxsync virtual void handleCallback (const ComPtr <IVirtualBoxCallback> &aCallback) = 0;
daa94352f51be2329ac8660f70396e03a7cb983bvboxsync * Note that this is a weak ref -- the CallbackEvent handler thread
daa94352f51be2329ac8660f70396e03a7cb983bvboxsync * is bound to the lifetime of the VirtualBox instance, so it's safe.
daa94352f51be2329ac8660f70396e03a7cb983bvboxsync#endif // ____H_VIRTUALBOXIMPL
daa94352f51be2329ac8660f70396e03a7cb983bvboxsync/* vi: set tabstop=4 shiftwidth=4 expandtab: */