VirtualBox

source: vbox/trunk/src/VBox/Main/include/VirtualBoxImpl.h@ 108832

Last change on this file since 108832 was 108046, checked in by vboxsync, 2 months ago

doc/manual,include/VBox,Frontends/{VBoxManage,VirtualBox/src},Main/{include,SharedFolder,Console,Machine,VirtualBox,VirtualBox.xidl}: Added global shared folders and adjusted fetching and handling of folders between shared folder types bugref:3544

  • Property svn:eol-style set to native
  • Property svn:keywords set to Author Date Id Revision
File size: 23.3 KB
Line 
1/* $Id: VirtualBoxImpl.h 108046 2025-02-04 05:24:54Z vboxsync $ */
2/** @file
3 * VirtualBox COM class implementation
4 */
5
6/*
7 * Copyright (C) 2006-2024 Oracle and/or its affiliates.
8 *
9 * This file is part of VirtualBox base platform packages, as
10 * available from https://www.virtualbox.org.
11 *
12 * This program is free software; you can redistribute it and/or
13 * modify it under the terms of the GNU General Public License
14 * as published by the Free Software Foundation, in version 3 of the
15 * License.
16 *
17 * This program is distributed in the hope that it will be useful, but
18 * WITHOUT ANY WARRANTY; without even the implied warranty of
19 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
20 * General Public License for more details.
21 *
22 * You should have received a copy of the GNU General Public License
23 * along with this program; if not, see <https://www.gnu.org/licenses>.
24 *
25 * SPDX-License-Identifier: GPL-3.0-only
26 */
27
28#ifndef MAIN_INCLUDED_VirtualBoxImpl_h
29#define MAIN_INCLUDED_VirtualBoxImpl_h
30#ifndef RT_WITHOUT_PRAGMA_ONCE
31# pragma once
32#endif
33
34#include <VBox/VBoxCryptoIf.h>
35
36#include "VirtualBoxBase.h"
37#include "objectslist.h"
38#include "VirtualBoxWrap.h"
39
40#ifdef RT_OS_WINDOWS
41# include "win/resource.h"
42#endif
43
44//#ifdef DEBUG_bird
45//# define VBOXSVC_WITH_CLIENT_WATCHER
46//#endif
47
48namespace com
49{
50 class Event;
51 class EventQueue;
52}
53
54class SessionMachine;
55class GuestOSType;
56class Progress;
57class Host;
58class SystemProperties;
59class DHCPServer;
60class PerformanceCollector;
61class CloudProviderManager;
62#ifdef VBOX_WITH_EXTPACK
63class ExtPackManager;
64#endif
65class AutostartDb;
66class NATNetwork;
67#ifdef VBOX_WITH_CLOUD_NET
68class CloudNetwork;
69#endif /* VBOX_WITH_CLOUD_NET */
70
71typedef std::list<ComObjPtr<SessionMachine> > SessionMachinesList;
72
73#ifdef RT_OS_WINDOWS
74class SVCHlpClient;
75#endif
76
77namespace settings
78{
79 class MainConfigFile;
80 struct MediaRegistry;
81}
82
83#if defined(VBOX_WITH_SDS) && !defined(VBOX_WITH_XPCOM)
84class VirtualBoxClassFactory; /* See ../src-server/win/svcmain.cpp */
85#endif
86
87class ATL_NO_VTABLE VirtualBox :
88 public VirtualBoxWrap
89#ifdef RT_OS_WINDOWS
90 , public ATL::CComCoClass<VirtualBox, &CLSID_VirtualBox>
91#endif
92{
93
94public:
95
96 typedef std::list<ComPtr<IInternalSessionControl> > InternalControlList;
97 typedef ObjectsList<Machine> MachinesOList;
98
99#if 0 /* obsoleted by AsyncEvent */
100 class CallbackEvent;
101 friend class CallbackEvent;
102#endif
103 class AsyncEvent;
104 friend class AsyncEvent;
105
106#ifndef VBOX_WITH_XPCOM
107# ifdef VBOX_WITH_SDS
108 DECLARE_CLASSFACTORY_EX(VirtualBoxClassFactory)
109# else
110 DECLARE_CLASSFACTORY_SINGLETON(VirtualBox)
111# endif
112#endif
113
114 // Do not use any ATL registry support.
115 //DECLARE_REGISTRY_RESOURCEID(IDR_VIRTUALBOX)
116
117 // Kind of redundant (VirtualBoxWrap declares itself not aggregatable and
118 // CComCoClass<VirtualBox, &CLSID_VirtualBox> as aggregatable, the former
119 // is the first inheritance), but the C++ multiple inheritance rules and
120 // the class factory in svcmain.cpp needs this to disambiguate.
121 DECLARE_NOT_AGGREGATABLE(VirtualBox)
122
123 // to postpone generation of the default ctor/dtor
124 DECLARE_COMMON_CLASS_METHODS(VirtualBox)
125
126 HRESULT FinalConstruct();
127 void FinalRelease();
128
129 // public initializer/uninitializer for internal purposes only
130 HRESULT init();
131 HRESULT initMachines();
132 HRESULT initMedia(const Guid &uuidMachineRegistry,
133 const settings::MediaRegistry &mediaRegistry,
134 const Utf8Str &strMachineFolder);
135 void uninit();
136
137 // public methods only for internal purposes
138
139 /**
140 * Override of the default locking class to be used for validating lock
141 * order with the standard member lock handle.
142 */
143 virtual VBoxLockingClass getLockingClass() const
144 {
145 return LOCKCLASS_VIRTUALBOXOBJECT;
146 }
147
148#ifdef DEBUG
149 void i_dumpAllBackRefs();
150#endif
151
152 HRESULT i_postEvent(Event *event);
153
154 HRESULT i_addProgress(IProgress *aProgress);
155 HRESULT i_removeProgress(IN_GUID aId);
156
157#ifdef RT_OS_WINDOWS
158 typedef HRESULT (*PFN_SVC_HELPER_CLIENT_T)(SVCHlpClient *aClient, Progress *aProgress, void *aUser, int *aVrc);
159 HRESULT i_startSVCHelperClient(bool aPrivileged,
160 PFN_SVC_HELPER_CLIENT_T aFunc,
161 void *aUser, Progress *aProgress);
162#endif
163
164 void i_addProcessToReap(RTPROCESS pid);
165 void i_updateClientWatcher();
166
167 int i_loadVDPlugin(const char *pszPluginLibrary);
168 int i_unloadVDPlugin(const char *pszPluginLibrary);
169
170 void i_onMediumRegistered(const Guid &aMediumId, const DeviceType_T aDevType, BOOL aRegistered);
171 void i_onMediumConfigChanged(IMedium *aMedium);
172 void i_onMediumChanged(IMediumAttachment* aMediumAttachment);
173 void i_onSharedFolderChanged();
174 void i_onStorageControllerChanged(const Guid &aMachineId, const com::Utf8Str &aControllerName);
175 void i_onStorageDeviceChanged(IMediumAttachment* aStorageDevice, BOOL fRemoved, BOOL fSilent);
176 void i_onMachineStateChanged(const Guid &aId, MachineState_T aState);
177 void i_onMachineDataChanged(const Guid &aId, BOOL aTemporary = FALSE);
178 void i_onMachineGroupsChanged(const Guid &aId);
179 BOOL i_onExtraDataCanChange(const Guid &aId, const Utf8Str &aKey, const Utf8Str &aValue, Bstr &aError);
180 void i_onExtraDataChanged(const Guid &aId, const Utf8Str &aKey, const Utf8Str &aValue);
181 void i_onMachineRegistered(const Guid &aId, BOOL aRegistered);
182 void i_onSessionStateChanged(const Guid &aId, SessionState_T aState);
183
184 void i_onSnapshotTaken(const Guid &aMachineId, const Guid &aSnapshotId);
185 void i_onSnapshotDeleted(const Guid &aMachineId, const Guid &aSnapshotId);
186 void i_onSnapshotRestored(const Guid &aMachineId, const Guid &aSnapshotId);
187 void i_onSnapshotChanged(const Guid &aMachineId, const Guid &aSnapshotId);
188
189 void i_onGuestPropertyChanged(const Guid &aMachineId, const Utf8Str &aName, const Utf8Str &aValue, const Utf8Str &aFlags,
190 const BOOL fWasDeleted);
191 void i_onNatRedirectChanged(const Guid &aMachineId, ULONG ulSlot, bool fRemove, const Utf8Str &aName,
192 NATProtocol_T aProto, const Utf8Str &aHostIp, uint16_t aHostPort,
193 const Utf8Str &aGuestIp, uint16_t aGuestPort);
194 void i_onNATNetworkChanged(const Utf8Str &aNetworkName);
195 void i_onNATNetworkStartStop(const Utf8Str &aNetworkName, BOOL aStart);
196 void i_onNATNetworkSetting(const Utf8Str &aNetworkName, BOOL aEnabled, const Utf8Str &aNetwork,
197 const Utf8Str &aGateway, BOOL aAdvertiseDefaultIpv6RouteEnabled,
198 BOOL fNeedDhcpServer);
199 void i_onNATNetworkPortForward(const Utf8Str &aNetworkName, BOOL create, BOOL fIpv6,
200 const Utf8Str &aRuleName, NATProtocol_T proto,
201 const Utf8Str &aHostIp, LONG aHostPort,
202 const Utf8Str &aGuestIp, LONG aGuestPort);
203 void i_onHostNameResolutionConfigurationChange();
204
205 int i_natNetworkRefInc(const Utf8Str &aNetworkName);
206 int i_natNetworkRefDec(const Utf8Str &aNetworkName);
207
208 RWLockHandle *i_getNatNetLock() const;
209 bool i_isNatNetStarted(const Utf8Str &aNetworkName) const;
210
211 void i_onCloudProviderListChanged(BOOL aRegistered);
212 void i_onCloudProviderRegistered(const Utf8Str &aProviderId, BOOL aRegistered);
213 void i_onCloudProviderUninstall(const Utf8Str &aProviderId);
214
215 void i_onProgressCreated(const Guid &aId, BOOL aCreated);
216
217 void i_onLanguageChanged(const Utf8Str &aLanguageId);
218
219#ifdef VBOX_WITH_UPDATE_AGENT
220 void i_onUpdateAgentAvailable(IUpdateAgent *aAgent,
221 const Utf8Str &aVer, UpdateChannel_T aChannel, UpdateSeverity_T aSev,
222 const Utf8Str &aDownloadURL, const Utf8Str &aWebURL, const Utf8Str &aReleaseNotes);
223 void i_onUpdateAgentError(IUpdateAgent *aAgent, const Utf8Str &aErrMsg, LONG aRc);
224 void i_onUpdateAgentStateChanged(IUpdateAgent *aAgent, UpdateState_T aState);
225 void i_onUpdateAgentSettingsChanged(IUpdateAgent *aAgent, const Utf8Str &aAttributeHint);
226#endif /* VBOX_WITH_UPDATE_AGENT */
227
228#ifdef VBOX_WITH_EXTPACK
229 void i_onExtPackInstalled(const Utf8Str &aExtPackName);
230 void i_onExtPackUninstalled(const Utf8Str &aExtPackName);
231#endif
232
233#ifdef VBOX_WITH_CLOUD_NET
234 HRESULT i_findCloudNetworkByName(const com::Utf8Str &aNetworkName,
235 ComObjPtr<CloudNetwork> *aNetwork = NULL);
236 HRESULT i_getEventSource(ComPtr<IEventSource>& aSource);
237#endif /* VBOX_WITH_CLOUD_NET */
238
239 ComObjPtr<GuestOSType> i_getUnknownOSType();
240
241 void i_getOpenedMachines(SessionMachinesList &aMachines,
242 InternalControlList *aControls = NULL);
243 MachinesOList &i_getMachinesList();
244
245 HRESULT i_findMachine(const Guid &aId,
246 bool fPermitInaccessible,
247 bool aSetError,
248 ComObjPtr<Machine> *aMachine = NULL);
249
250 HRESULT i_findMachineByName(const Utf8Str &aName,
251 bool aSetError,
252 ComObjPtr<Machine> *aMachine = NULL);
253
254 HRESULT i_validateMachineGroup(const com::Utf8Str &aGroup, bool fPrimary);
255 HRESULT i_convertMachineGroups(const std::vector<com::Utf8Str> aMachineGroups, StringsList *pllMachineGroups);
256
257 HRESULT i_findHardDiskById(const Guid &id,
258 bool aSetError,
259 ComObjPtr<Medium> *aHardDisk = NULL);
260 HRESULT i_findHardDiskByLocation(const Utf8Str &strLocation,
261 bool aSetError,
262 ComObjPtr<Medium> *aHardDisk = NULL);
263 HRESULT i_findDVDOrFloppyImage(DeviceType_T mediumType,
264 const Guid *aId,
265 const Utf8Str &aLocation,
266 bool aSetError,
267 ComObjPtr<Medium> *aImage = NULL);
268 HRESULT i_findRemoveableMedium(DeviceType_T mediumType,
269 const Guid &uuid,
270 bool fRefresh,
271 bool aSetError,
272 ComObjPtr<Medium> &pMedium);
273 HRESULT i_findSharedFolder(const Utf8Str &aName,
274 ComPtr<ISharedFolder> &aSharedFolder);
275
276 HRESULT i_findGuestOSType(const Utf8Str &strOSType,
277 ComObjPtr<GuestOSType> &guestOSType);
278
279 const Guid &i_getGlobalRegistryId() const;
280
281 const ComObjPtr<Host> &i_host() const;
282 SystemProperties *i_getSystemProperties() const;
283 CloudProviderManager *i_getCloudProviderManager() const;
284#ifdef VBOX_WITH_EXTPACK
285 ExtPackManager *i_getExtPackManager() const;
286#endif
287#ifdef VBOX_WITH_RESOURCE_USAGE_API
288 const ComObjPtr<PerformanceCollector> &i_performanceCollector() const;
289#endif /* VBOX_WITH_RESOURCE_USAGE_API */
290
291 void i_getDefaultMachineFolder(Utf8Str &str) const;
292 void i_getDefaultHardDiskFormat(Utf8Str &str) const;
293
294 /** Returns the VirtualBox home directory */
295 const Utf8Str &i_homeDir() const;
296 int i_calculateFullPath(const Utf8Str &strPath, Utf8Str &aResult);
297 void i_copyPathRelativeToConfig(const Utf8Str &strSource, Utf8Str &strTarget);
298 HRESULT i_registerMedium(const ComObjPtr<Medium> &pMedium, ComObjPtr<Medium> *ppMedium,
299 AutoWriteLock &mediaTreeLock, bool fCalledFromMediumInit = false);
300 HRESULT i_unregisterMedium(Medium *pMedium);
301 HRESULT i_unregisterMachineMedia(const Guid &id);
302 HRESULT i_unregisterMachine(Machine *pMachine, CleanupMode_T aCleanupMode, const Guid &id);
303 void i_rememberMachineNameChangeForMedia(const Utf8Str &strOldConfigDir,
304 const Utf8Str &strNewConfigDir);
305 void i_saveMediaRegistry(settings::MediaRegistry &mediaRegistry,
306 const Guid &uuidRegistry,
307 const Utf8Str &strMachineFolder);
308 HRESULT i_saveSettings();
309 void i_markRegistryModified(const Guid &uuid);
310 void i_unmarkRegistryModified(const Guid &uuid);
311 void i_saveModifiedRegistries();
312 static const com::Utf8Str &i_getVersionNormalized();
313 static HRESULT i_ensureFilePathExists(const Utf8Str &strFileName, bool fCreate);
314 const Utf8Str& i_settingsFilePath();
315 AutostartDb* i_getAutostartDb() const;
316 RWLockHandle& i_getMachinesListLockHandle();
317 RWLockHandle& i_getMediaTreeLockHandle();
318 int i_encryptSetting(const Utf8Str &aPlaintext, Utf8Str *aCiphertext);
319 int i_decryptSetting(Utf8Str *aPlaintext, const Utf8Str &aCiphertext);
320 void i_storeSettingsKey(const Utf8Str &aKey);
321 bool i_isMediaUuidInUse(const Guid &aId, DeviceType_T deviceType);
322 HRESULT i_retainCryptoIf(PCVBOXCRYPTOIF *ppCryptoIf);
323 HRESULT i_releaseCryptoIf(PCVBOXCRYPTOIF pCryptoIf);
324 HRESULT i_unloadCryptoIfModule(void);
325 HRESULT i_getSupportedGuestOSTypes(std::vector<PlatformArchitecture_T> aArchitectures,
326 std::vector<ComPtr<IGuestOSType> > &aGuestOSTypes);
327
328private:
329 class ClientWatcher;
330
331 // wrapped IVirtualBox properties
332 HRESULT getVersion(com::Utf8Str &aVersion);
333 HRESULT getVersionNormalized(com::Utf8Str &aVersionNormalized);
334 HRESULT getRevision(ULONG *aRevision);
335 HRESULT getPackageType(com::Utf8Str &aPackageType);
336 HRESULT getAPIVersion(com::Utf8Str &aAPIVersion);
337 HRESULT getAPIRevision(LONG64 *aAPIRevision);
338 HRESULT getHomeFolder(com::Utf8Str &aHomeFolder);
339 HRESULT getSettingsFilePath(com::Utf8Str &aSettingsFilePath);
340 HRESULT getHost(ComPtr<IHost> &aHost);
341 HRESULT getPlatformProperties(PlatformArchitecture_T platformArchitecture, ComPtr<IPlatformProperties> &aPlatformProperties);
342 HRESULT getSystemProperties(ComPtr<ISystemProperties> &aSystemProperties);
343 HRESULT getMachines(std::vector<ComPtr<IMachine> > &aMachines);
344 HRESULT getMachineGroups(std::vector<com::Utf8Str> &aMachineGroups);
345 HRESULT getHardDisks(std::vector<ComPtr<IMedium> > &aHardDisks);
346 HRESULT getDVDImages(std::vector<ComPtr<IMedium> > &aDVDImages);
347 HRESULT getFloppyImages(std::vector<ComPtr<IMedium> > &aFloppyImages);
348 HRESULT getProgressOperations(std::vector<ComPtr<IProgress> > &aProgressOperations);
349 HRESULT getGuestOSFamilies(std::vector<com::Utf8Str> &aOSFamilies);
350 HRESULT getGuestOSTypes(std::vector<ComPtr<IGuestOSType> > &aGuestOSTypes);
351 HRESULT getSharedFolders(std::vector<ComPtr<ISharedFolder> > &aSharedFolders);
352 HRESULT getPerformanceCollector(ComPtr<IPerformanceCollector> &aPerformanceCollector);
353 HRESULT getDHCPServers(std::vector<ComPtr<IDHCPServer> > &aDHCPServers);
354 HRESULT getNATNetworks(std::vector<ComPtr<INATNetwork> > &aNATNetworks);
355 HRESULT getEventSource(ComPtr<IEventSource> &aEventSource);
356 HRESULT getExtensionPackManager(ComPtr<IExtPackManager> &aExtensionPackManager);
357 HRESULT getHostOnlyNetworks(std::vector<ComPtr<IHostOnlyNetwork> > &aHostOnlyNetworks);
358 HRESULT getInternalNetworks(std::vector<com::Utf8Str> &aInternalNetworks);
359 HRESULT getGenericNetworkDrivers(std::vector<com::Utf8Str> &aGenericNetworkDrivers);
360 HRESULT getCloudNetworks(std::vector<ComPtr<ICloudNetwork> > &aCloudNetworks);
361 HRESULT getCloudProviderManager(ComPtr<ICloudProviderManager> &aCloudProviderManager);
362
363 // wrapped IVirtualBox methods
364 HRESULT composeMachineFilename(const com::Utf8Str &aName,
365 const com::Utf8Str &aGroup,
366 const com::Utf8Str &aCreateFlags,
367 const com::Utf8Str &aBaseFolder,
368 com::Utf8Str &aFile);
369 HRESULT createMachine(const com::Utf8Str &aSettingsFile,
370 const com::Utf8Str &aName,
371 PlatformArchitecture_T aArchitecture,
372 const std::vector<com::Utf8Str> &aGroups,
373 const com::Utf8Str &aOsTypeId,
374 const com::Utf8Str &aFlags,
375 const com::Utf8Str &aCipher,
376 const com::Utf8Str &aPasswordId,
377 const com::Utf8Str &aPassword,
378 ComPtr<IMachine> &aMachine);
379 HRESULT openMachine(const com::Utf8Str &aSettingsFile,
380 const com::Utf8Str &aPassword,
381 ComPtr<IMachine> &aMachine);
382 HRESULT registerMachine(const ComPtr<IMachine> &aMachine);
383 HRESULT findMachine(const com::Utf8Str &aNameOrId,
384 ComPtr<IMachine> &aMachine);
385 HRESULT getMachinesByGroups(const std::vector<com::Utf8Str> &aGroups,
386 std::vector<ComPtr<IMachine> > &aMachines);
387 HRESULT getMachineStates(const std::vector<ComPtr<IMachine> > &aMachines,
388 std::vector<MachineState_T> &aStates);
389 HRESULT createAppliance(ComPtr<IAppliance> &aAppliance);
390 HRESULT createUnattendedInstaller(ComPtr<IUnattended> &aUnattended);
391 HRESULT createMedium(const com::Utf8Str &aFormat,
392 const com::Utf8Str &aLocation,
393 AccessMode_T aAccessMode,
394 DeviceType_T aDeviceType,
395 ComPtr<IMedium> &aMedium);
396 HRESULT openMedium(const com::Utf8Str &aLocation,
397 DeviceType_T aDeviceType,
398 AccessMode_T aAccessMode,
399 BOOL aForceNewUuid,
400 ComPtr<IMedium> &aMedium);
401 HRESULT getGuestOSType(const com::Utf8Str &aId,
402 ComPtr<IGuestOSType> &aType);
403 HRESULT getGuestOSSubtypesByFamilyId(const Utf8Str &strOSFamily,
404 std::vector<com::Utf8Str> &aOSSubtypes);
405 HRESULT getGuestOSDescsBySubtype(const Utf8Str &strOSSubtype,
406 std::vector<com::Utf8Str> &aGuestOSDescs);
407 HRESULT createSharedFolder(const com::Utf8Str &aName,
408 const com::Utf8Str &aHostPath,
409 BOOL aWritable,
410 BOOL aAutomount,
411 const com::Utf8Str &aAutoMountPoint);
412 HRESULT removeSharedFolder(const com::Utf8Str &aName);
413 HRESULT getExtraDataKeys(std::vector<com::Utf8Str> &aKeys);
414 HRESULT getExtraData(const com::Utf8Str &aKey,
415 com::Utf8Str &aValue);
416 HRESULT setExtraData(const com::Utf8Str &aKey,
417 const com::Utf8Str &aValue);
418 HRESULT setSettingsSecret(const com::Utf8Str &aPassword);
419 HRESULT createDHCPServer(const com::Utf8Str &aName,
420 ComPtr<IDHCPServer> &aServer);
421 HRESULT findDHCPServerByNetworkName(const com::Utf8Str &aName,
422 ComPtr<IDHCPServer> &aServer);
423 HRESULT removeDHCPServer(const ComPtr<IDHCPServer> &aServer);
424 HRESULT createNATNetwork(const com::Utf8Str &aNetworkName,
425 ComPtr<INATNetwork> &aNetwork);
426 HRESULT findNATNetworkByName(const com::Utf8Str &aNetworkName,
427 ComPtr<INATNetwork> &aNetwork);
428 HRESULT removeNATNetwork(const ComPtr<INATNetwork> &aNetwork);
429 HRESULT createHostOnlyNetwork(const com::Utf8Str &aNetworkName,
430 ComPtr<IHostOnlyNetwork> &aNetwork);
431 HRESULT findHostOnlyNetworkByName(const com::Utf8Str &aNetworkName,
432 ComPtr<IHostOnlyNetwork> &aNetwork);
433 HRESULT findHostOnlyNetworkById(const com::Guid &aId,
434 ComPtr<IHostOnlyNetwork> &aNetwork);
435 HRESULT removeHostOnlyNetwork(const ComPtr<IHostOnlyNetwork> &aNetwork);
436 HRESULT createCloudNetwork(const com::Utf8Str &aNetworkName,
437 ComPtr<ICloudNetwork> &aNetwork);
438 HRESULT findCloudNetworkByName(const com::Utf8Str &aNetworkName,
439 ComPtr<ICloudNetwork> &aNetwork);
440 HRESULT removeCloudNetwork(const ComPtr<ICloudNetwork> &aNetwork);
441 HRESULT checkFirmwarePresent(PlatformArchitecture_T aPlatformArchitecture,
442 FirmwareType_T aFirmwareType,
443 const com::Utf8Str &aVersion,
444 com::Utf8Str &aUrl,
445 com::Utf8Str &aFile,
446 BOOL *aResult);
447 HRESULT findProgressById(const com::Guid &aId,
448 ComPtr<IProgress> &aProgressObject);
449 HRESULT getTrackedObject(const com::Utf8Str &aTrObjId,
450 ComPtr<IUnknown> &aPIface,
451 TrackedObjectState_T *aState,
452 LONG64 *aCreationTime,
453 LONG64 *aDeletionTime);
454 HRESULT getTrackedObjectIds (const com::Utf8Str& aName,
455 std::vector<com::Utf8Str> &aObjIdsList);
456
457 static HRESULT i_setErrorStaticBoth(HRESULT aResultCode, int vrc, const char *aText, ...)
458 {
459 va_list va;
460 va_start (va, aText);
461 HRESULT hrc = setErrorInternalV(aResultCode, getStaticClassIID(), getStaticComponentName(), aText, va, false, true, vrc);
462 va_end(va);
463 return hrc;
464 }
465
466 HRESULT i_registerMachine(Machine *aMachine);
467 HRESULT i_registerDHCPServer(DHCPServer *aDHCPServer,
468 bool aSaveRegistry = true);
469 HRESULT i_unregisterDHCPServer(DHCPServer *aDHCPServer);
470 HRESULT i_registerNATNetwork(NATNetwork *aNATNetwork,
471 bool aSaveRegistry = true);
472 HRESULT i_unregisterNATNetwork(NATNetwork *aNATNetwork,
473 bool aSaveRegistry = true);
474 HRESULT i_checkMediaForConflicts(const Guid &aId,
475 const Utf8Str &aLocation,
476 Utf8Str &aConflictType,
477 ComObjPtr<Medium> *pDupMedium);
478 int i_decryptSettings();
479 int i_decryptMediumSettings(Medium *pMedium);
480 int i_decryptSettingBytes(uint8_t *aPlaintext,
481 const uint8_t *aCiphertext,
482 size_t aCiphertextSize) const;
483 int i_encryptSettingBytes(const uint8_t *aPlaintext,
484 uint8_t *aCiphertext,
485 size_t aPlaintextSize,
486 size_t aCiphertextSize) const;
487 void i_reportDriverVersions(void);
488
489 struct Data; // opaque data structure, defined in VirtualBoxImpl.cpp
490
491 Data *m;
492
493 /* static variables (defined in VirtualBoxImpl.cpp) */
494 static com::Utf8Str sVersion;
495 static com::Utf8Str sVersionNormalized;
496 static ULONG sRevision;
497 static com::Utf8Str sPackageType;
498 static com::Utf8Str sAPIVersion;
499 static std::map<com::Utf8Str, int> sNatNetworkNameToRefCount;
500 static RWLockHandle* spMtxNatNetworkNameToRefCountLock;
501
502 static DECLCALLBACK(int) AsyncEventHandler(RTTHREAD thread, void *pvUser);
503
504#ifdef RT_OS_WINDOWS
505 friend class StartSVCHelperClientData;
506 static void i_SVCHelperClientThreadTask(StartSVCHelperClientData *pTask);
507#endif
508
509#if defined(RT_OS_WINDOWS) && defined(VBOXSVC_WITH_CLIENT_WATCHER)
510protected:
511 void i_callHook(const char *a_pszFunction) RT_OVERRIDE;
512 bool i_watchClientProcess(RTPROCESS a_pidClient, const char *a_pszFunction);
513public:
514 static void i_logCaller(const char *a_pszFormat, ...);
515private:
516
517#endif
518};
519
520////////////////////////////////////////////////////////////////////////////////
521
522#endif /* !MAIN_INCLUDED_VirtualBoxImpl_h */
Note: See TracBrowser for help on using the repository browser.

© 2025 Oracle Support Privacy / Do Not Sell My Info Terms of Use Trademark Policy Automated Access Etiquette