VirtualBox

source: vbox/trunk/src/VBox/Main/include/ExtPackManagerImpl.h@ 73768

Last change on this file since 73768 was 73716, checked in by vboxsync, 6 years ago

Main/CloudProviderManager+CloudProvider+CloudProfile: Introduce CloudProfile as separate interface, and do a big cleanup. Adding synchronization and incomplete support for moving to an extension pack. Updated VBoxManage to list providers and touched up the GUI code slightly to deal with the changed interfaces.

  • Property svn:eol-style set to native
  • Property svn:keywords set to Author Date Id Revision
File size: 10.3 KB
Line 
1/* $Id: ExtPackManagerImpl.h 73716 2018-08-16 15:58:57Z vboxsync $ */
2/** @file
3 * VirtualBox Main - interface for Extension Packs, VBoxSVC & VBoxC.
4 */
5
6/*
7 * Copyright (C) 2010-2017 Oracle Corporation
8 *
9 * This file is part of VirtualBox Open Source Edition (OSE), as
10 * available from http://www.virtualbox.org. This file is free software;
11 * you can redistribute it and/or modify it under the terms of the GNU
12 * General Public License (GPL) as published by the Free Software
13 * Foundation, in version 2 as it comes in the "COPYING" file of the
14 * VirtualBox OSE distribution. VirtualBox OSE is distributed in the
15 * hope that it will be useful, but WITHOUT ANY WARRANTY of any kind.
16 */
17
18#ifndef ____H_EXTPACKMANAGERIMPL
19#define ____H_EXTPACKMANAGERIMPL
20
21#include "VirtualBoxBase.h"
22#include <VBox/ExtPack/ExtPack.h>
23#include "ExtPackWrap.h"
24#include "ExtPackFileWrap.h"
25#include "ExtPackManagerWrap.h"
26#include <iprt/fs.h>
27
28
29/** The name of the oracle extension back. */
30#define ORACLE_PUEL_EXTPACK_NAME "Oracle VM VirtualBox Extension Pack"
31
32
33#ifndef VBOX_COM_INPROC
34/**
35 * An extension pack file.
36 */
37class ATL_NO_VTABLE ExtPackFile :
38 public ExtPackFileWrap
39{
40public:
41 /** @name COM and internal init/term/mapping cruft.
42 * @{ */
43 DECLARE_EMPTY_CTOR_DTOR(ExtPackFile)
44
45 HRESULT FinalConstruct();
46 void FinalRelease();
47 HRESULT initWithFile(const char *a_pszFile, const char *a_pszDigest, class ExtPackManager *a_pExtPackMgr, VirtualBox *a_pVirtualBox);
48 void uninit();
49 /** @} */
50
51private:
52 /** @name Misc init helpers
53 * @{ */
54 HRESULT initFailed(const char *a_pszWhyFmt, ...);
55 /** @} */
56
57private:
58
59 // wrapped IExtPackFile properties
60 HRESULT getName(com::Utf8Str &aName);
61 HRESULT getDescription(com::Utf8Str &aDescription);
62 HRESULT getVersion(com::Utf8Str &aVersion);
63 HRESULT getRevision(ULONG *aRevision);
64 HRESULT getEdition(com::Utf8Str &aEdition);
65 HRESULT getVRDEModule(com::Utf8Str &aVRDEModule);
66 HRESULT getPlugIns(std::vector<ComPtr<IExtPackPlugIn> > &aPlugIns);
67 HRESULT getUsable(BOOL *aUsable);
68 HRESULT getWhyUnusable(com::Utf8Str &aWhyUnusable);
69 HRESULT getShowLicense(BOOL *aShowLicense);
70 HRESULT getLicense(com::Utf8Str &aLicense);
71 HRESULT getFilePath(com::Utf8Str &aFilePath);
72
73 // wrapped IExtPackFile methods
74 HRESULT queryLicense(const com::Utf8Str &aPreferredLocale,
75 const com::Utf8Str &aPreferredLanguage,
76 const com::Utf8Str &aFormat,
77 com::Utf8Str &aLicenseText);
78 HRESULT install(BOOL aReplace,
79 const com::Utf8Str &aDisplayInfo,
80 ComPtr<IProgress> &aProgess);
81
82 struct Data;
83 /** Pointer to the private instance. */
84 Data *m;
85
86 friend class ExtPackManager;
87 friend class ExtPackInstallTask;
88};
89#endif /* !VBOX_COM_INPROC */
90
91
92/**
93 * An installed extension pack.
94 */
95class ATL_NO_VTABLE ExtPack :
96 public ExtPackWrap
97{
98public:
99 /** @name COM and internal init/term/mapping cruft.
100 * @{ */
101 DECLARE_EMPTY_CTOR_DTOR(ExtPack)
102
103 HRESULT FinalConstruct();
104 void FinalRelease();
105 HRESULT initWithDir(VBOXEXTPACKCTX a_enmContext, const char *a_pszName, const char *a_pszDir);
106 void uninit();
107 RTMEMEF_NEW_AND_DELETE_OPERATORS();
108 /** @} */
109
110 /** @name Internal interfaces used by ExtPackManager.
111 * @{ */
112#ifndef VBOX_COM_INPROC
113 bool i_callInstalledHook(IVirtualBox *a_pVirtualBox, AutoWriteLock *a_pLock, PRTERRINFO pErrInfo);
114 HRESULT i_callUninstallHookAndClose(IVirtualBox *a_pVirtualBox, bool a_fForcedRemoval);
115 bool i_callVirtualBoxReadyHook(IVirtualBox *a_pVirtualBox, AutoWriteLock *a_pLock);
116#endif
117#ifdef VBOX_COM_INPROC
118 bool i_callConsoleReadyHook(IConsole *a_pConsole, AutoWriteLock *a_pLock);
119#endif
120#ifndef VBOX_COM_INPROC
121 bool i_callVmCreatedHook(IVirtualBox *a_pVirtualBox, IMachine *a_pMachine, AutoWriteLock *a_pLock);
122#endif
123#ifdef VBOX_COM_INPROC
124 bool i_callVmConfigureVmmHook(IConsole *a_pConsole, PVM a_pVM, AutoWriteLock *a_pLock, int *a_pvrc);
125 bool i_callVmPowerOnHook(IConsole *a_pConsole, PVM a_pVM, AutoWriteLock *a_pLock, int *a_pvrc);
126 bool i_callVmPowerOffHook(IConsole *a_pConsole, PVM a_pVM, AutoWriteLock *a_pLock);
127#endif
128 HRESULT i_checkVrde(void);
129 HRESULT i_getVrdpLibraryName(Utf8Str *a_pstrVrdeLibrary);
130 HRESULT i_getLibraryName(const char *a_pszModuleName, Utf8Str *a_pstrLibrary);
131 bool i_wantsToBeDefaultVrde(void) const;
132 HRESULT i_refresh(bool *pfCanDelete);
133 /** @} */
134
135protected:
136 /** @name Internal helper methods.
137 * @{ */
138 void i_probeAndLoad(void);
139 bool i_findModule(const char *a_pszName, const char *a_pszExt, VBOXEXTPACKMODKIND a_enmKind,
140 Utf8Str *a_ppStrFound, bool *a_pfNative, PRTFSOBJINFO a_pObjInfo) const;
141 static bool i_objinfoIsEqual(PCRTFSOBJINFO pObjInfo1, PCRTFSOBJINFO pObjInfo2);
142 /** @} */
143
144 /** @name Extension Pack Helpers
145 * @{ */
146 static DECLCALLBACK(int) i_hlpFindModule(PCVBOXEXTPACKHLP pHlp, const char *pszName, const char *pszExt,
147 VBOXEXTPACKMODKIND enmKind, char *pszFound, size_t cbFound, bool *pfNative);
148 static DECLCALLBACK(int) i_hlpGetFilePath(PCVBOXEXTPACKHLP pHlp, const char *pszFilename, char *pszPath, size_t cbPath);
149 static DECLCALLBACK(VBOXEXTPACKCTX) i_hlpGetContext(PCVBOXEXTPACKHLP pHlp);
150 static DECLCALLBACK(int) i_hlpLoadHGCMService(PCVBOXEXTPACKHLP pHlp, VBOXEXTPACK_IF_CS(IConsole) *pConsole, const char *pszServiceLibrary, const char *pszServiceName);
151 static DECLCALLBACK(int) i_hlpLoadVDPlugin(PCVBOXEXTPACKHLP pHlp, VBOXEXTPACK_IF_CS(IVirtualBox) *pVirtualBox, const char *pszPluginLibrary);
152 static DECLCALLBACK(int) i_hlpUnloadVDPlugin(PCVBOXEXTPACKHLP pHlp, VBOXEXTPACK_IF_CS(IVirtualBox) *pVirtualBox, const char *pszPluginLibrary);
153 static DECLCALLBACK(int) i_hlpReservedN(PCVBOXEXTPACKHLP pHlp);
154 /** @} */
155
156private:
157
158 // wrapped IExtPack properties
159 HRESULT getName(com::Utf8Str &aName);
160 HRESULT getDescription(com::Utf8Str &aDescription);
161 HRESULT getVersion(com::Utf8Str &aVersion);
162 HRESULT getRevision(ULONG *aRevision);
163 HRESULT getEdition(com::Utf8Str &aEdition);
164 HRESULT getVRDEModule(com::Utf8Str &aVRDEModule);
165 HRESULT getPlugIns(std::vector<ComPtr<IExtPackPlugIn> > &aPlugIns);
166 HRESULT getUsable(BOOL *aUsable);
167 HRESULT getWhyUnusable(com::Utf8Str &aWhyUnusable);
168 HRESULT getShowLicense(BOOL *aShowLicense);
169 HRESULT getLicense(com::Utf8Str &aLicense);
170
171 // wrapped IExtPack methods
172 HRESULT queryLicense(const com::Utf8Str &aPreferredLocale,
173 const com::Utf8Str &aPreferredLanguage,
174 const com::Utf8Str &aFormat,
175 com::Utf8Str &aLicenseText);
176 HRESULT queryObject(const com::Utf8Str &aObjUuid,
177 ComPtr<IUnknown> &aReturnInterface);
178
179
180 struct Data;
181 /** Pointer to the private instance. */
182 Data *m;
183
184 friend class ExtPackManager;
185};
186
187
188/**
189 * Extension pack manager.
190 */
191class ATL_NO_VTABLE ExtPackManager :
192 public ExtPackManagerWrap
193{
194public:
195 /** @name COM and internal init/term/mapping cruft.
196 * @{ */
197 DECLARE_EMPTY_CTOR_DTOR(ExtPackManager)
198
199 HRESULT FinalConstruct();
200 void FinalRelease();
201 HRESULT initExtPackManager(VirtualBox *a_pVirtualBox, VBOXEXTPACKCTX a_enmContext);
202 void uninit();
203 /** @} */
204
205 /** @name Internal interfaces used by other Main classes.
206 * @{ */
207#ifndef VBOX_COM_INPROC
208 HRESULT i_doInstall(ExtPackFile *a_pExtPackFile, bool a_fReplace, Utf8Str const *a_pstrDisplayInfo);
209 HRESULT i_doUninstall(const Utf8Str *a_pstrName, bool a_fForcedRemoval, const Utf8Str *a_pstrDisplayInfo);
210 void i_callAllVirtualBoxReadyHooks(void);
211 HRESULT i_queryObjects(const com::Utf8Str &aObjUuid, std::vector<ComPtr<IUnknown> > &aObjects, std::vector<com::Utf8Str> *a_pstrExtPackNames);
212#endif
213#ifdef VBOX_COM_INPROC
214 void i_callAllConsoleReadyHooks(IConsole *a_pConsole);
215#endif
216#ifndef VBOX_COM_INPROC
217 void i_callAllVmCreatedHooks(IMachine *a_pMachine);
218#endif
219#ifdef VBOX_COM_INPROC
220 int i_callAllVmConfigureVmmHooks(IConsole *a_pConsole, PVM a_pVM);
221 int i_callAllVmPowerOnHooks(IConsole *a_pConsole, PVM a_pVM);
222 void i_callAllVmPowerOffHooks(IConsole *a_pConsole, PVM a_pVM);
223#endif
224 HRESULT i_checkVrdeExtPack(Utf8Str const *a_pstrExtPack);
225 int i_getVrdeLibraryPathForExtPack(Utf8Str const *a_pstrExtPack, Utf8Str *a_pstrVrdeLibrary);
226 HRESULT i_getLibraryPathForExtPack(const char *a_pszModuleName, const char *a_pszExtPack, Utf8Str *a_pstrLibrary);
227 HRESULT i_getDefaultVrdeExtPack(Utf8Str *a_pstrExtPack);
228 bool i_isExtPackUsable(const char *a_pszExtPack);
229 void i_dumpAllToReleaseLog(void);
230 uint64_t i_getUpdateCounter(void);
231 /** @} */
232
233private:
234 // wrapped IExtPackManager properties
235 HRESULT getInstalledExtPacks(std::vector<ComPtr<IExtPack> > &aInstalledExtPacks);
236
237 // wrapped IExtPackManager methods
238 HRESULT find(const com::Utf8Str &aName,
239 ComPtr<IExtPack> &aReturnData);
240 HRESULT openExtPackFile(const com::Utf8Str &aPath,
241 ComPtr<IExtPackFile> &aFile);
242 HRESULT uninstall(const com::Utf8Str &aName,
243 BOOL aForcedRemoval,
244 const com::Utf8Str &aDisplayInfo,
245 ComPtr<IProgress> &aProgess);
246 HRESULT cleanup();
247 HRESULT queryAllPlugInsForFrontend(const com::Utf8Str &aFrontendName,
248 std::vector<com::Utf8Str> &aPlugInModules);
249 HRESULT isExtPackUsable(const com::Utf8Str &aName,
250 BOOL *aUsable);
251
252 bool i_areThereAnyRunningVMs(void) const;
253 HRESULT i_runSetUidToRootHelper(Utf8Str const *a_pstrDisplayInfo, const char *a_pszCommand, ...);
254 ExtPack *i_findExtPack(const char *a_pszName);
255 void i_removeExtPack(const char *a_pszName);
256 HRESULT i_refreshExtPack(const char *a_pszName, bool a_fUnsuableIsError, ExtPack **a_ppExtPack);
257
258private:
259 struct Data;
260 /** Pointer to the private instance. */
261 Data *m;
262
263 friend class ExtPackUninstallTask;
264};
265
266#endif
267/* vi: set tabstop=4 shiftwidth=4 expandtab: */
Note: See TracBrowser for help on using the repository browser.

© 2023 Oracle
ContactPrivacy policyTerms of Use