ExtPackManagerImpl.h revision 441579693f771e49eb05f2bd20c316232155675b
73045e3d71f04f3d399e70e89fbd6395c4402821vboxsync/* $Id$ */
73045e3d71f04f3d399e70e89fbd6395c4402821vboxsync/** @file
73045e3d71f04f3d399e70e89fbd6395c4402821vboxsync * VirtualBox Main - interface for Extension Packs, VBoxSVC & VBoxC.
73045e3d71f04f3d399e70e89fbd6395c4402821vboxsync */
73045e3d71f04f3d399e70e89fbd6395c4402821vboxsync
73045e3d71f04f3d399e70e89fbd6395c4402821vboxsync/*
73045e3d71f04f3d399e70e89fbd6395c4402821vboxsync * Copyright (C) 2010 Oracle Corporation
73045e3d71f04f3d399e70e89fbd6395c4402821vboxsync *
73045e3d71f04f3d399e70e89fbd6395c4402821vboxsync * This file is part of VirtualBox Open Source Edition (OSE), as
73045e3d71f04f3d399e70e89fbd6395c4402821vboxsync * available from http://www.virtualbox.org. This file is free software;
73045e3d71f04f3d399e70e89fbd6395c4402821vboxsync * you can redistribute it and/or modify it under the terms of the GNU
73045e3d71f04f3d399e70e89fbd6395c4402821vboxsync * General Public License (GPL) as published by the Free Software
73045e3d71f04f3d399e70e89fbd6395c4402821vboxsync * Foundation, in version 2 as it comes in the "COPYING" file of the
73045e3d71f04f3d399e70e89fbd6395c4402821vboxsync * VirtualBox OSE distribution. VirtualBox OSE is distributed in the
73045e3d71f04f3d399e70e89fbd6395c4402821vboxsync * hope that it will be useful, but WITHOUT ANY WARRANTY of any kind.
73045e3d71f04f3d399e70e89fbd6395c4402821vboxsync */
73045e3d71f04f3d399e70e89fbd6395c4402821vboxsync
73045e3d71f04f3d399e70e89fbd6395c4402821vboxsync#ifndef ____H_EXTPACKMANAGERIMPL
73045e3d71f04f3d399e70e89fbd6395c4402821vboxsync#define ____H_EXTPACKMANAGERIMPL
73045e3d71f04f3d399e70e89fbd6395c4402821vboxsync
73045e3d71f04f3d399e70e89fbd6395c4402821vboxsync#include "VirtualBoxBase.h"
73045e3d71f04f3d399e70e89fbd6395c4402821vboxsync#include <VBox/ExtPack/ExtPack.h>
710d24589d0cbe0ea6e9ad143eda5bbd41000693vboxsync#include <iprt/fs.h>
73045e3d71f04f3d399e70e89fbd6395c4402821vboxsync
94e055188526aeeb119b5d60fe22bf7a302522dcvboxsync/**
94e055188526aeeb119b5d60fe22bf7a302522dcvboxsync * An extension pack file.
94e055188526aeeb119b5d60fe22bf7a302522dcvboxsync */
94e055188526aeeb119b5d60fe22bf7a302522dcvboxsyncclass ATL_NO_VTABLE ExtPackFile :
94e055188526aeeb119b5d60fe22bf7a302522dcvboxsync public VirtualBoxBase,
94e055188526aeeb119b5d60fe22bf7a302522dcvboxsync VBOX_SCRIPTABLE_IMPL(IExtPackFile)
94e055188526aeeb119b5d60fe22bf7a302522dcvboxsync{
94e055188526aeeb119b5d60fe22bf7a302522dcvboxsyncpublic:
94e055188526aeeb119b5d60fe22bf7a302522dcvboxsync /** @name COM and internal init/term/mapping cruft.
94e055188526aeeb119b5d60fe22bf7a302522dcvboxsync * @{ */
94e055188526aeeb119b5d60fe22bf7a302522dcvboxsync VIRTUALBOXBASE_ADD_ERRORINFO_SUPPORT(ExtPackFile, IExtPackFile)
94e055188526aeeb119b5d60fe22bf7a302522dcvboxsync DECLARE_NOT_AGGREGATABLE(ExtPackFile)
94e055188526aeeb119b5d60fe22bf7a302522dcvboxsync DECLARE_PROTECT_FINAL_CONSTRUCT()
94e055188526aeeb119b5d60fe22bf7a302522dcvboxsync BEGIN_COM_MAP(ExtPackFile)
c7a378ed2fbad681c0b674351d698ef20a368935vboxsync VBOX_DEFAULT_INTERFACE_ENTRIES(IExtPackFile)
94e055188526aeeb119b5d60fe22bf7a302522dcvboxsync COM_INTERFACE_ENTRY(IExtPackBase)
94e055188526aeeb119b5d60fe22bf7a302522dcvboxsync END_COM_MAP()
94e055188526aeeb119b5d60fe22bf7a302522dcvboxsync DECLARE_EMPTY_CTOR_DTOR(ExtPackFile)
94e055188526aeeb119b5d60fe22bf7a302522dcvboxsync
94e055188526aeeb119b5d60fe22bf7a302522dcvboxsync HRESULT FinalConstruct();
94e055188526aeeb119b5d60fe22bf7a302522dcvboxsync void FinalRelease();
441579693f771e49eb05f2bd20c316232155675bvboxsync HRESULT initWithFile(const char *a_pszFile, const char *a_pszDigest, class ExtPackManager *a_pExtPackMgr, VirtualBox *a_pVirtualBox);
94e055188526aeeb119b5d60fe22bf7a302522dcvboxsync void uninit();
f7d0672fb68919a6a824f47d7ef72b9b7bd0c266vboxsync RTMEMEF_NEW_AND_DELETE_OPERATORS();
94e055188526aeeb119b5d60fe22bf7a302522dcvboxsync /** @} */
94e055188526aeeb119b5d60fe22bf7a302522dcvboxsync
94e055188526aeeb119b5d60fe22bf7a302522dcvboxsync /** @name IExtPackBase interfaces
94e055188526aeeb119b5d60fe22bf7a302522dcvboxsync * @{ */
94e055188526aeeb119b5d60fe22bf7a302522dcvboxsync STDMETHOD(COMGETTER(Name))(BSTR *a_pbstrName);
94e055188526aeeb119b5d60fe22bf7a302522dcvboxsync STDMETHOD(COMGETTER(Description))(BSTR *a_pbstrDescription);
94e055188526aeeb119b5d60fe22bf7a302522dcvboxsync STDMETHOD(COMGETTER(Version))(BSTR *a_pbstrVersion);
94e055188526aeeb119b5d60fe22bf7a302522dcvboxsync STDMETHOD(COMGETTER(Revision))(ULONG *a_puRevision);
901ea941307dc8d4284f8ba09736aca6be2fc95dvboxsync STDMETHOD(COMGETTER(Edition))(BSTR *a_pbstrEdition);
94e055188526aeeb119b5d60fe22bf7a302522dcvboxsync STDMETHOD(COMGETTER(VRDEModule))(BSTR *a_pbstrVrdeModule);
94e055188526aeeb119b5d60fe22bf7a302522dcvboxsync STDMETHOD(COMGETTER(PlugIns))(ComSafeArrayOut(IExtPackPlugIn *, a_paPlugIns));
94e055188526aeeb119b5d60fe22bf7a302522dcvboxsync STDMETHOD(COMGETTER(Usable))(BOOL *a_pfUsable);
94e055188526aeeb119b5d60fe22bf7a302522dcvboxsync STDMETHOD(COMGETTER(WhyUnusable))(BSTR *a_pbstrWhy);
62f5aca659040a32b49dbcd84f555687d84ba9cfvboxsync STDMETHOD(COMGETTER(ShowLicense))(BOOL *a_pfShowIt);
62f5aca659040a32b49dbcd84f555687d84ba9cfvboxsync STDMETHOD(COMGETTER(License))(BSTR *a_pbstrHtmlLicense);
62f5aca659040a32b49dbcd84f555687d84ba9cfvboxsync STDMETHOD(QueryLicense)(IN_BSTR a_bstrPreferredLocale, IN_BSTR a_bstrPreferredLanguage,
62f5aca659040a32b49dbcd84f555687d84ba9cfvboxsync IN_BSTR a_bstrFormat, BSTR *a_pbstrLicense);
94e055188526aeeb119b5d60fe22bf7a302522dcvboxsync /** @} */
94e055188526aeeb119b5d60fe22bf7a302522dcvboxsync
94e055188526aeeb119b5d60fe22bf7a302522dcvboxsync /** @name IExtPackFile interfaces
94e055188526aeeb119b5d60fe22bf7a302522dcvboxsync * @{ */
94e055188526aeeb119b5d60fe22bf7a302522dcvboxsync STDMETHOD(COMGETTER(FilePath))(BSTR *a_pbstrPath);
7c17fb207ce942776c36e7e1506471c682973bf8vboxsync STDMETHOD(Install)(BOOL a_fReplace, IN_BSTR a_bstrDisplayInfo, IProgress **a_ppProgress);
94e055188526aeeb119b5d60fe22bf7a302522dcvboxsync /** @} */
94e055188526aeeb119b5d60fe22bf7a302522dcvboxsync
f7d0672fb68919a6a824f47d7ef72b9b7bd0c266vboxsyncprivate:
f7d0672fb68919a6a824f47d7ef72b9b7bd0c266vboxsync /** @name Misc init helpers
f7d0672fb68919a6a824f47d7ef72b9b7bd0c266vboxsync * @{ */
f7d0672fb68919a6a824f47d7ef72b9b7bd0c266vboxsync HRESULT initFailed(const char *a_pszWhyFmt, ...);
f7d0672fb68919a6a824f47d7ef72b9b7bd0c266vboxsync /** @} */
f7d0672fb68919a6a824f47d7ef72b9b7bd0c266vboxsync
94e055188526aeeb119b5d60fe22bf7a302522dcvboxsyncprivate:
94e055188526aeeb119b5d60fe22bf7a302522dcvboxsync struct Data;
94e055188526aeeb119b5d60fe22bf7a302522dcvboxsync /** Pointer to the private instance. */
94e055188526aeeb119b5d60fe22bf7a302522dcvboxsync Data *m;
94e055188526aeeb119b5d60fe22bf7a302522dcvboxsync
94e055188526aeeb119b5d60fe22bf7a302522dcvboxsync friend class ExtPackManager;
94e055188526aeeb119b5d60fe22bf7a302522dcvboxsync};
94e055188526aeeb119b5d60fe22bf7a302522dcvboxsync
73045e3d71f04f3d399e70e89fbd6395c4402821vboxsync
73045e3d71f04f3d399e70e89fbd6395c4402821vboxsync/**
94e055188526aeeb119b5d60fe22bf7a302522dcvboxsync * An installed extension pack.
73045e3d71f04f3d399e70e89fbd6395c4402821vboxsync */
73045e3d71f04f3d399e70e89fbd6395c4402821vboxsyncclass ATL_NO_VTABLE ExtPack :
73045e3d71f04f3d399e70e89fbd6395c4402821vboxsync public VirtualBoxBase,
73045e3d71f04f3d399e70e89fbd6395c4402821vboxsync VBOX_SCRIPTABLE_IMPL(IExtPack)
73045e3d71f04f3d399e70e89fbd6395c4402821vboxsync{
73045e3d71f04f3d399e70e89fbd6395c4402821vboxsyncpublic:
73045e3d71f04f3d399e70e89fbd6395c4402821vboxsync /** @name COM and internal init/term/mapping cruft.
73045e3d71f04f3d399e70e89fbd6395c4402821vboxsync * @{ */
73045e3d71f04f3d399e70e89fbd6395c4402821vboxsync VIRTUALBOXBASE_ADD_ERRORINFO_SUPPORT(ExtPack, IExtPack)
73045e3d71f04f3d399e70e89fbd6395c4402821vboxsync DECLARE_NOT_AGGREGATABLE(ExtPack)
73045e3d71f04f3d399e70e89fbd6395c4402821vboxsync DECLARE_PROTECT_FINAL_CONSTRUCT()
73045e3d71f04f3d399e70e89fbd6395c4402821vboxsync BEGIN_COM_MAP(ExtPack)
c7a378ed2fbad681c0b674351d698ef20a368935vboxsync VBOX_DEFAULT_INTERFACE_ENTRIES(IExtPack)
94e055188526aeeb119b5d60fe22bf7a302522dcvboxsync COM_INTERFACE_ENTRY(IExtPackBase)
73045e3d71f04f3d399e70e89fbd6395c4402821vboxsync END_COM_MAP()
73045e3d71f04f3d399e70e89fbd6395c4402821vboxsync DECLARE_EMPTY_CTOR_DTOR(ExtPack)
73045e3d71f04f3d399e70e89fbd6395c4402821vboxsync
73045e3d71f04f3d399e70e89fbd6395c4402821vboxsync HRESULT FinalConstruct();
73045e3d71f04f3d399e70e89fbd6395c4402821vboxsync void FinalRelease();
71a0530ccd741736d49c6798fd01cbc2956eea12vboxsync HRESULT initWithDir(VBOXEXTPACKCTX a_enmContext, const char *a_pszName, const char *a_pszDir);
73045e3d71f04f3d399e70e89fbd6395c4402821vboxsync void uninit();
f7d0672fb68919a6a824f47d7ef72b9b7bd0c266vboxsync RTMEMEF_NEW_AND_DELETE_OPERATORS();
73045e3d71f04f3d399e70e89fbd6395c4402821vboxsync /** @} */
73045e3d71f04f3d399e70e89fbd6395c4402821vboxsync
94e055188526aeeb119b5d60fe22bf7a302522dcvboxsync /** @name IExtPackBase interfaces
73045e3d71f04f3d399e70e89fbd6395c4402821vboxsync * @{ */
73045e3d71f04f3d399e70e89fbd6395c4402821vboxsync STDMETHOD(COMGETTER(Name))(BSTR *a_pbstrName);
d6835eb59b58420b98d9adf7b7f1f8f5ef6187bcvboxsync STDMETHOD(COMGETTER(Description))(BSTR *a_pbstrDescription);
73045e3d71f04f3d399e70e89fbd6395c4402821vboxsync STDMETHOD(COMGETTER(Version))(BSTR *a_pbstrVersion);
73045e3d71f04f3d399e70e89fbd6395c4402821vboxsync STDMETHOD(COMGETTER(Revision))(ULONG *a_puRevision);
901ea941307dc8d4284f8ba09736aca6be2fc95dvboxsync STDMETHOD(COMGETTER(Edition))(BSTR *a_pbstrEdition);
9ca017ceee656f9d33f2cb6652e401b5f17fcfb7vboxsync STDMETHOD(COMGETTER(VRDEModule))(BSTR *a_pbstrVrdeModule);
8479df0918362ee801608d4f48c6d8ee8fdf505evboxsync STDMETHOD(COMGETTER(PlugIns))(ComSafeArrayOut(IExtPackPlugIn *, a_paPlugIns));
73045e3d71f04f3d399e70e89fbd6395c4402821vboxsync STDMETHOD(COMGETTER(Usable))(BOOL *a_pfUsable);
73045e3d71f04f3d399e70e89fbd6395c4402821vboxsync STDMETHOD(COMGETTER(WhyUnusable))(BSTR *a_pbstrWhy);
62f5aca659040a32b49dbcd84f555687d84ba9cfvboxsync STDMETHOD(COMGETTER(ShowLicense))(BOOL *a_pfShowIt);
62f5aca659040a32b49dbcd84f555687d84ba9cfvboxsync STDMETHOD(COMGETTER(License))(BSTR *a_pbstrHtmlLicense);
62f5aca659040a32b49dbcd84f555687d84ba9cfvboxsync STDMETHOD(QueryLicense)(IN_BSTR a_bstrPreferredLocale, IN_BSTR a_bstrPreferredLanguage,
62f5aca659040a32b49dbcd84f555687d84ba9cfvboxsync IN_BSTR a_bstrFormat, BSTR *a_pbstrLicense);
94e055188526aeeb119b5d60fe22bf7a302522dcvboxsync /** @} */
94e055188526aeeb119b5d60fe22bf7a302522dcvboxsync
94e055188526aeeb119b5d60fe22bf7a302522dcvboxsync /** @name IExtPack interfaces
94e055188526aeeb119b5d60fe22bf7a302522dcvboxsync * @{ */
8479df0918362ee801608d4f48c6d8ee8fdf505evboxsync STDMETHOD(QueryObject)(IN_BSTR a_bstrObjectId, IUnknown **a_ppUnknown);
73045e3d71f04f3d399e70e89fbd6395c4402821vboxsync /** @} */
73045e3d71f04f3d399e70e89fbd6395c4402821vboxsync
73045e3d71f04f3d399e70e89fbd6395c4402821vboxsync /** @name Internal interfaces used by ExtPackManager.
73045e3d71f04f3d399e70e89fbd6395c4402821vboxsync * @{ */
81964179b862d4e3e3da1e8bd66b7e92cdc65140vboxsync bool callInstalledHook(IVirtualBox *a_pVirtualBox, AutoWriteLock *a_pLock, PRTERRINFO pErrInfo);
6f63267ae3ac590beee4c0e298774baf18e0fb84vboxsync HRESULT callUninstallHookAndClose(IVirtualBox *a_pVirtualBox, bool a_fForcedRemoval);
8dcec71b7a288828cf280aa9c60d5dd260388254vboxsync bool callVirtualBoxReadyHook(IVirtualBox *a_pVirtualBox, AutoWriteLock *a_pLock);
8dcec71b7a288828cf280aa9c60d5dd260388254vboxsync bool callConsoleReadyHook(IConsole *a_pConsole, AutoWriteLock *a_pLock);
8dcec71b7a288828cf280aa9c60d5dd260388254vboxsync bool callVmCreatedHook(IVirtualBox *a_pVirtualBox, IMachine *a_pMachine, AutoWriteLock *a_pLock);
8dcec71b7a288828cf280aa9c60d5dd260388254vboxsync bool callVmConfigureVmmHook(IConsole *a_pConsole, PVM a_pVM, AutoWriteLock *a_pLock, int *a_pvrc);
8dcec71b7a288828cf280aa9c60d5dd260388254vboxsync bool callVmPowerOnHook(IConsole *a_pConsole, PVM a_pVM, AutoWriteLock *a_pLock, int *a_pvrc);
8dcec71b7a288828cf280aa9c60d5dd260388254vboxsync bool callVmPowerOffHook(IConsole *a_pConsole, PVM a_pVM, AutoWriteLock *a_pLock);
9ca017ceee656f9d33f2cb6652e401b5f17fcfb7vboxsync HRESULT checkVrde(void);
9ca017ceee656f9d33f2cb6652e401b5f17fcfb7vboxsync HRESULT getVrdpLibraryName(Utf8Str *a_pstrVrdeLibrary);
9ca017ceee656f9d33f2cb6652e401b5f17fcfb7vboxsync bool wantsToBeDefaultVrde(void) const;
d6835eb59b58420b98d9adf7b7f1f8f5ef6187bcvboxsync HRESULT refresh(bool *pfCanDelete);
73045e3d71f04f3d399e70e89fbd6395c4402821vboxsync /** @} */
73045e3d71f04f3d399e70e89fbd6395c4402821vboxsync
710d24589d0cbe0ea6e9ad143eda5bbd41000693vboxsyncprotected:
710d24589d0cbe0ea6e9ad143eda5bbd41000693vboxsync /** @name Internal helper methods.
710d24589d0cbe0ea6e9ad143eda5bbd41000693vboxsync * @{ */
710d24589d0cbe0ea6e9ad143eda5bbd41000693vboxsync void probeAndLoad(void);
9ca017ceee656f9d33f2cb6652e401b5f17fcfb7vboxsync bool findModule(const char *a_pszName, const char *a_pszExt, VBOXEXTPACKMODKIND a_enmKind,
8479df0918362ee801608d4f48c6d8ee8fdf505evboxsync Utf8Str *a_ppStrFound, bool *a_pfNative, PRTFSOBJINFO a_pObjInfo) const;
710d24589d0cbe0ea6e9ad143eda5bbd41000693vboxsync static bool objinfoIsEqual(PCRTFSOBJINFO pObjInfo1, PCRTFSOBJINFO pObjInfo2);
710d24589d0cbe0ea6e9ad143eda5bbd41000693vboxsync /** @} */
710d24589d0cbe0ea6e9ad143eda5bbd41000693vboxsync
710d24589d0cbe0ea6e9ad143eda5bbd41000693vboxsync /** @name Extension Pack Helpers
710d24589d0cbe0ea6e9ad143eda5bbd41000693vboxsync * @{ */
710d24589d0cbe0ea6e9ad143eda5bbd41000693vboxsync static DECLCALLBACK(int) hlpFindModule(PCVBOXEXTPACKHLP pHlp, const char *pszName, const char *pszExt,
9ca017ceee656f9d33f2cb6652e401b5f17fcfb7vboxsync VBOXEXTPACKMODKIND enmKind, char *pszFound, size_t cbFound, bool *pfNative);
8479df0918362ee801608d4f48c6d8ee8fdf505evboxsync static DECLCALLBACK(int) hlpGetFilePath(PCVBOXEXTPACKHLP pHlp, const char *pszFilename, char *pszPath, size_t cbPath);
8dcec71b7a288828cf280aa9c60d5dd260388254vboxsync static DECLCALLBACK(VBOXEXTPACKCTX) hlpGetContext(PCVBOXEXTPACKHLP pHlp);
8dcec71b7a288828cf280aa9c60d5dd260388254vboxsync static DECLCALLBACK(int) hlpReservedN(PCVBOXEXTPACKHLP pHlp);
710d24589d0cbe0ea6e9ad143eda5bbd41000693vboxsync /** @} */
710d24589d0cbe0ea6e9ad143eda5bbd41000693vboxsync
73045e3d71f04f3d399e70e89fbd6395c4402821vboxsyncprivate:
73045e3d71f04f3d399e70e89fbd6395c4402821vboxsync struct Data;
73045e3d71f04f3d399e70e89fbd6395c4402821vboxsync /** Pointer to the private instance. */
73045e3d71f04f3d399e70e89fbd6395c4402821vboxsync Data *m;
73045e3d71f04f3d399e70e89fbd6395c4402821vboxsync
73045e3d71f04f3d399e70e89fbd6395c4402821vboxsync friend class ExtPackManager;
73045e3d71f04f3d399e70e89fbd6395c4402821vboxsync};
73045e3d71f04f3d399e70e89fbd6395c4402821vboxsync
73045e3d71f04f3d399e70e89fbd6395c4402821vboxsync
73045e3d71f04f3d399e70e89fbd6395c4402821vboxsync/**
73045e3d71f04f3d399e70e89fbd6395c4402821vboxsync * Extension pack manager.
73045e3d71f04f3d399e70e89fbd6395c4402821vboxsync */
73045e3d71f04f3d399e70e89fbd6395c4402821vboxsyncclass ATL_NO_VTABLE ExtPackManager :
73045e3d71f04f3d399e70e89fbd6395c4402821vboxsync public VirtualBoxBase,
73045e3d71f04f3d399e70e89fbd6395c4402821vboxsync VBOX_SCRIPTABLE_IMPL(IExtPackManager)
73045e3d71f04f3d399e70e89fbd6395c4402821vboxsync{
73045e3d71f04f3d399e70e89fbd6395c4402821vboxsync /** @name COM and internal init/term/mapping cruft.
73045e3d71f04f3d399e70e89fbd6395c4402821vboxsync * @{ */
73045e3d71f04f3d399e70e89fbd6395c4402821vboxsync VIRTUALBOXBASE_ADD_ERRORINFO_SUPPORT(ExtPackManager, IExtPackManager)
73045e3d71f04f3d399e70e89fbd6395c4402821vboxsync DECLARE_NOT_AGGREGATABLE(ExtPackManager)
73045e3d71f04f3d399e70e89fbd6395c4402821vboxsync DECLARE_PROTECT_FINAL_CONSTRUCT()
73045e3d71f04f3d399e70e89fbd6395c4402821vboxsync BEGIN_COM_MAP(ExtPackManager)
c7a378ed2fbad681c0b674351d698ef20a368935vboxsync VBOX_DEFAULT_INTERFACE_ENTRIES(IExtPackManager)
73045e3d71f04f3d399e70e89fbd6395c4402821vboxsync END_COM_MAP()
73045e3d71f04f3d399e70e89fbd6395c4402821vboxsync DECLARE_EMPTY_CTOR_DTOR(ExtPackManager)
73045e3d71f04f3d399e70e89fbd6395c4402821vboxsync
73045e3d71f04f3d399e70e89fbd6395c4402821vboxsync HRESULT FinalConstruct();
73045e3d71f04f3d399e70e89fbd6395c4402821vboxsync void FinalRelease();
dfb168a2e2b9e4dd806eab2ebfcbf3b36dc9a8b9vboxsync HRESULT initExtPackManager(VirtualBox *a_pVirtualBox, VBOXEXTPACKCTX a_enmContext);
73045e3d71f04f3d399e70e89fbd6395c4402821vboxsync void uninit();
f7d0672fb68919a6a824f47d7ef72b9b7bd0c266vboxsync RTMEMEF_NEW_AND_DELETE_OPERATORS();
73045e3d71f04f3d399e70e89fbd6395c4402821vboxsync /** @} */
73045e3d71f04f3d399e70e89fbd6395c4402821vboxsync
73045e3d71f04f3d399e70e89fbd6395c4402821vboxsync /** @name IExtPack interfaces
73045e3d71f04f3d399e70e89fbd6395c4402821vboxsync * @{ */
73045e3d71f04f3d399e70e89fbd6395c4402821vboxsync STDMETHOD(COMGETTER(InstalledExtPacks))(ComSafeArrayOut(IExtPack *, a_paExtPacks));
73045e3d71f04f3d399e70e89fbd6395c4402821vboxsync STDMETHOD(Find)(IN_BSTR a_bstrName, IExtPack **a_pExtPack);
94e055188526aeeb119b5d60fe22bf7a302522dcvboxsync STDMETHOD(OpenExtPackFile)(IN_BSTR a_bstrTarball, IExtPackFile **a_ppExtPackFile);
7c17fb207ce942776c36e7e1506471c682973bf8vboxsync STDMETHOD(Uninstall)(IN_BSTR a_bstrName, BOOL a_fForcedRemoval, IN_BSTR a_bstrDisplayInfo, IProgress **a_ppProgress);
8479df0918362ee801608d4f48c6d8ee8fdf505evboxsync STDMETHOD(Cleanup)(void);
8479df0918362ee801608d4f48c6d8ee8fdf505evboxsync STDMETHOD(QueryAllPlugInsForFrontend)(IN_BSTR a_bstrFrontend, ComSafeArrayOut(BSTR, a_pabstrPlugInModules));
bc5c914a7a0b01cb2ac217ac1b0b206102b25be9vboxsync STDMETHOD(IsExtPackUsable(IN_BSTR a_bstrExtPack, BOOL *aUsable));
73045e3d71f04f3d399e70e89fbd6395c4402821vboxsync /** @} */
73045e3d71f04f3d399e70e89fbd6395c4402821vboxsync
73045e3d71f04f3d399e70e89fbd6395c4402821vboxsync /** @name Internal interfaces used by other Main classes.
73045e3d71f04f3d399e70e89fbd6395c4402821vboxsync * @{ */
40a7c4c6161d7e81d51ea25f6ab1cfd4d8961590vboxsync static DECLCALLBACK(int) doInstallThreadProc(RTTHREAD hThread, void *pvJob);
40a7c4c6161d7e81d51ea25f6ab1cfd4d8961590vboxsync HRESULT doInstall(ExtPackFile *a_pExtPackFile, bool a_fReplace, Utf8Str const *a_pstrDisplayInfo);
40a7c4c6161d7e81d51ea25f6ab1cfd4d8961590vboxsync static DECLCALLBACK(int) doUninstallThreadProc(RTTHREAD hThread, void *pvJob);
40a7c4c6161d7e81d51ea25f6ab1cfd4d8961590vboxsync HRESULT doUninstall(const Utf8Str *a_pstrName, bool a_fForcedRemoval, const Utf8Str *a_pstrDisplayInfo);
6f63267ae3ac590beee4c0e298774baf18e0fb84vboxsync void callAllVirtualBoxReadyHooks(void);
8dcec71b7a288828cf280aa9c60d5dd260388254vboxsync void callAllConsoleReadyHooks(IConsole *a_pConsole);
d6835eb59b58420b98d9adf7b7f1f8f5ef6187bcvboxsync void callAllVmCreatedHooks(IMachine *a_pMachine);
d6835eb59b58420b98d9adf7b7f1f8f5ef6187bcvboxsync int callAllVmConfigureVmmHooks(IConsole *a_pConsole, PVM a_pVM);
d6835eb59b58420b98d9adf7b7f1f8f5ef6187bcvboxsync int callAllVmPowerOnHooks(IConsole *a_pConsole, PVM a_pVM);
d6835eb59b58420b98d9adf7b7f1f8f5ef6187bcvboxsync void callAllVmPowerOffHooks(IConsole *a_pConsole, PVM a_pVM);
9ca017ceee656f9d33f2cb6652e401b5f17fcfb7vboxsync HRESULT checkVrdeExtPack(Utf8Str const *a_pstrExtPack);
9ca017ceee656f9d33f2cb6652e401b5f17fcfb7vboxsync int getVrdeLibraryPathForExtPack(Utf8Str const *a_pstrExtPack, Utf8Str *a_pstrVrdeLibrary);
9ca017ceee656f9d33f2cb6652e401b5f17fcfb7vboxsync HRESULT getDefaultVrdeExtPack(Utf8Str *a_pstrExtPack);
106e42b6203965c6117fc263ea924465e5a319fbvboxsync bool isExtPackUsable(const char *a_pszExtPack);
0159b7428fbf1f50112a2602a41db7dca53779ccvboxsync void dumpAllToReleaseLog(void);
73045e3d71f04f3d399e70e89fbd6395c4402821vboxsync /** @} */
73045e3d71f04f3d399e70e89fbd6395c4402821vboxsync
8d82d07fc2f7234b1e5a3ba544e1086a5a7a7c5fvboxsyncprivate:
7c17fb207ce942776c36e7e1506471c682973bf8vboxsync HRESULT runSetUidToRootHelper(Utf8Str const *a_pstrDisplayInfo, const char *a_pszCommand, ...);
8d82d07fc2f7234b1e5a3ba544e1086a5a7a7c5fvboxsync ExtPack *findExtPack(const char *a_pszName);
8d82d07fc2f7234b1e5a3ba544e1086a5a7a7c5fvboxsync void removeExtPack(const char *a_pszName);
8d82d07fc2f7234b1e5a3ba544e1086a5a7a7c5fvboxsync HRESULT refreshExtPack(const char *a_pszName, bool a_fUnsuableIsError, ExtPack **a_ppExtPack);
8d82d07fc2f7234b1e5a3ba544e1086a5a7a7c5fvboxsync
73045e3d71f04f3d399e70e89fbd6395c4402821vboxsyncprivate:
73045e3d71f04f3d399e70e89fbd6395c4402821vboxsync struct Data;
73045e3d71f04f3d399e70e89fbd6395c4402821vboxsync /** Pointer to the private instance. */
73045e3d71f04f3d399e70e89fbd6395c4402821vboxsync Data *m;
73045e3d71f04f3d399e70e89fbd6395c4402821vboxsync};
73045e3d71f04f3d399e70e89fbd6395c4402821vboxsync
73045e3d71f04f3d399e70e89fbd6395c4402821vboxsync#endif
73045e3d71f04f3d399e70e89fbd6395c4402821vboxsync/* vi: set tabstop=4 shiftwidth=4 expandtab: */