VirtualBox

source: vbox/trunk/src/VBox/Main/include/HostImpl.h@ 100762

Last change on this file since 100762 was 98103, checked in by vboxsync, 2 years ago

Copyright year updates by scm.

  • Property svn:eol-style set to native
  • Property svn:keywords set to Author Date Id Revision
File size: 9.2 KB
Line 
1/* $Id: HostImpl.h 98103 2023-01-17 14:15:46Z vboxsync $ */
2/** @file
3 * Implementation of IHost.
4 */
5
6/*
7 * Copyright (C) 2006-2023 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_HostImpl_h
29#define MAIN_INCLUDED_HostImpl_h
30#ifndef RT_WITHOUT_PRAGMA_ONCE
31# pragma once
32#endif
33
34#include "HostWrap.h"
35
36class HostUSBDeviceFilter;
37class USBProxyService;
38class SessionMachine;
39class Progress;
40class PerformanceCollector;
41class HostDrive;
42class HostDrivePartition;
43
44namespace settings
45{
46 struct Host;
47}
48
49#include <list>
50
51class ATL_NO_VTABLE Host :
52 public HostWrap
53{
54public:
55
56 DECLARE_COMMON_CLASS_METHODS(Host)
57
58 HRESULT FinalConstruct();
59 void FinalRelease();
60
61 // public initializer/uninitializer for internal purposes only
62 HRESULT init(VirtualBox *aParent);
63 void uninit();
64
65 // public methods only for internal purposes
66
67 /**
68 * Override of the default locking class to be used for validating lock
69 * order with the standard member lock handle.
70 */
71 virtual VBoxLockingClass getLockingClass() const
72 {
73 return LOCKCLASS_HOSTOBJECT;
74 }
75
76 HRESULT i_loadSettings(const settings::Host &data);
77 HRESULT i_saveSettings(settings::Host &data);
78
79 void i_updateProcessorFeatures();
80
81 HRESULT i_getDrives(DeviceType_T mediumType, bool fRefresh, MediaList *&pll, AutoWriteLock &treeLock);
82 HRESULT i_findHostDriveById(DeviceType_T mediumType, const Guid &uuid, bool fRefresh, ComObjPtr<Medium> &pMedium);
83 HRESULT i_findHostDriveByName(DeviceType_T mediumType, const Utf8Str &strLocationFull, bool fRefresh, ComObjPtr<Medium> &pMedium);
84
85#ifdef VBOX_WITH_USB
86 typedef std::list< ComObjPtr<HostUSBDeviceFilter> > USBDeviceFilterList;
87
88 /** Must be called from under this object's lock. */
89 USBProxyService* i_usbProxyService();
90
91 HRESULT i_addChild(HostUSBDeviceFilter *pChild);
92 HRESULT i_removeChild(HostUSBDeviceFilter *pChild);
93 VirtualBox* i_parent();
94
95 HRESULT i_onUSBDeviceFilterChange(HostUSBDeviceFilter *aFilter, BOOL aActiveChanged = FALSE);
96 void i_getUSBFilters(USBDeviceFilterList *aGlobalFiltes);
97 HRESULT i_checkUSBProxyService();
98#endif /* !VBOX_WITH_USB */
99
100 static void i_generateMACAddress(Utf8Str &mac);
101
102#ifdef RT_OS_WINDOWS
103 HRESULT i_updatePersistentConfigForHostOnlyAdapters(void);
104 HRESULT i_removePersistentConfig(const Bstr &bstrGuid);
105#endif /* RT_OS_WINDOWS */
106
107
108private:
109
110 // wrapped IHost properties
111 HRESULT getDVDDrives(std::vector<ComPtr<IMedium> > &aDVDDrives);
112 HRESULT getFloppyDrives(std::vector<ComPtr<IMedium> > &aFloppyDrives);
113 HRESULT getAudioDevices(std::vector<ComPtr<IHostAudioDevice> > &aAudioDevices);
114 HRESULT getUSBDevices(std::vector<ComPtr<IHostUSBDevice> > &aUSBDevices);
115 HRESULT getUSBDeviceFilters(std::vector<ComPtr<IHostUSBDeviceFilter> > &aUSBDeviceFilters);
116 HRESULT getNetworkInterfaces(std::vector<ComPtr<IHostNetworkInterface> > &aNetworkInterfaces);
117 HRESULT getNameServers(std::vector<com::Utf8Str> &aNameServers);
118 HRESULT getDomainName(com::Utf8Str &aDomainName);
119 HRESULT getSearchStrings(std::vector<com::Utf8Str> &aSearchStrings);
120 HRESULT getProcessorCount(ULONG *aProcessorCount);
121 HRESULT getProcessorOnlineCount(ULONG *aProcessorOnlineCount);
122 HRESULT getProcessorCoreCount(ULONG *aProcessorCoreCount);
123 HRESULT getProcessorOnlineCoreCount(ULONG *aProcessorOnlineCoreCount);
124 HRESULT getHostDrives(std::vector<ComPtr<IHostDrive> > &aHostDrives);
125 HRESULT getMemorySize(ULONG *aMemorySize);
126 HRESULT getMemoryAvailable(ULONG *aMemoryAvailable);
127 HRESULT getOperatingSystem(com::Utf8Str &aOperatingSystem);
128 HRESULT getOSVersion(com::Utf8Str &aOSVersion);
129 HRESULT getUTCTime(LONG64 *aUTCTime);
130 HRESULT getAcceleration3DAvailable(BOOL *aAcceleration3DAvailable);
131 HRESULT getVideoInputDevices(std::vector<ComPtr<IHostVideoInputDevice> > &aVideoInputDevices);
132 HRESULT getUpdateHost(ComPtr<IUpdateAgent> &aUpdate);
133 HRESULT getUpdateExtPack(ComPtr<IUpdateAgent> &aUpdate);
134 HRESULT getUpdateGuestAdditions(ComPtr<IUpdateAgent> &aUpdate);
135 HRESULT getUpdateResponse(BOOL *aUpdateNeeded);
136 HRESULT getUpdateVersion(com::Utf8Str &aUpdateVersion);
137 HRESULT getUpdateURL(com::Utf8Str &aUpdateURL);
138 HRESULT getUpdateCheckNeeded(BOOL *aUpdateCheckNeeded);
139
140 // wrapped IHost methods
141 HRESULT getProcessorSpeed(ULONG aCpuId,
142 ULONG *aSpeed);
143 HRESULT getProcessorFeature(ProcessorFeature_T aFeature,
144 BOOL *aSupported);
145 HRESULT getProcessorDescription(ULONG aCpuId,
146 com::Utf8Str &aDescription);
147 HRESULT getProcessorCPUIDLeaf(ULONG aCpuId,
148 ULONG aLeaf,
149 ULONG aSubLeaf,
150 ULONG *aValEax,
151 ULONG *aValEbx,
152 ULONG *aValEcx,
153 ULONG *aValEdx);
154 HRESULT createHostOnlyNetworkInterface(ComPtr<IHostNetworkInterface> &aHostInterface,
155 ComPtr<IProgress> &aProgress);
156 HRESULT removeHostOnlyNetworkInterface(const com::Guid &aId,
157 ComPtr<IProgress> &aProgress);
158 HRESULT createUSBDeviceFilter(const com::Utf8Str &aName,
159 ComPtr<IHostUSBDeviceFilter> &aFilter);
160 HRESULT insertUSBDeviceFilter(ULONG aPosition,
161 const ComPtr<IHostUSBDeviceFilter> &aFilter);
162 HRESULT removeUSBDeviceFilter(ULONG aPosition);
163 HRESULT findHostDVDDrive(const com::Utf8Str &aName,
164 ComPtr<IMedium> &aDrive);
165 HRESULT findHostFloppyDrive(const com::Utf8Str &aName,
166 ComPtr<IMedium> &aDrive);
167 HRESULT findHostNetworkInterfaceByName(const com::Utf8Str &aName,
168 ComPtr<IHostNetworkInterface> &aNetworkInterface);
169 HRESULT findHostNetworkInterfaceById(const com::Guid &aId,
170 ComPtr<IHostNetworkInterface> &aNetworkInterface);
171 HRESULT findHostNetworkInterfacesOfType(HostNetworkInterfaceType_T aType,
172 std::vector<ComPtr<IHostNetworkInterface> > &aNetworkInterfaces);
173 HRESULT findUSBDeviceById(const com::Guid &aId,
174 ComPtr<IHostUSBDevice> &aDevice);
175 HRESULT findUSBDeviceByAddress(const com::Utf8Str &aName,
176 ComPtr<IHostUSBDevice> &aDevice);
177 HRESULT generateMACAddress(com::Utf8Str &aAddress);
178
179 HRESULT addUSBDeviceSource(const com::Utf8Str &aBackend, const com::Utf8Str &aId, const com::Utf8Str &aAddress,
180 const std::vector<com::Utf8Str> &aPropertyNames, const std::vector<com::Utf8Str> &aPropertyValues);
181
182 HRESULT removeUSBDeviceSource(const com::Utf8Str &aId);
183
184 // Internal Methods.
185
186 HRESULT i_buildDVDDrivesList(MediaList &list);
187 HRESULT i_buildFloppyDrivesList(MediaList &list);
188 HRESULT i_findHostDriveByNameOrId(DeviceType_T mediumType, const Utf8Str &strNameOrId, ComObjPtr<Medium> &pMedium);
189
190#if defined(RT_OS_SOLARIS) && defined(VBOX_USE_LIBHAL)
191 bool i_getDVDInfoFromHal(std::list< ComObjPtr<Medium> > &list);
192 bool i_getFloppyInfoFromHal(std::list< ComObjPtr<Medium> > &list);
193 HRESULT i_getFixedDrivesFromHal(std::list<std::pair<com::Utf8Str, com::Utf8Str> > &list) RT_NOEXCEPT;
194#endif
195
196#if defined(RT_OS_SOLARIS)
197 void i_getDVDInfoFromDevTree(std::list< ComObjPtr<Medium> > &list);
198 void i_parseMountTable(char *mountTable, std::list< ComObjPtr<Medium> > &list);
199 bool i_validateDevice(const char *deviceNode, bool isCDROM);
200 HRESULT i_getFixedDrivesFromDevTree(std::list<std::pair<com::Utf8Str, com::Utf8Str> > &list) RT_NOEXCEPT;
201#endif
202
203 HRESULT i_updateNetIfList();
204
205#ifndef RT_OS_WINDOWS
206 HRESULT i_parseResolvConf();
207#else
208 HRESULT i_fetchNameResolvingInformation();
209#endif
210
211#ifdef VBOX_WITH_RESOURCE_USAGE_API
212 void i_registerMetrics(PerformanceCollector *aCollector);
213 void i_registerDiskMetrics(PerformanceCollector *aCollector);
214 void i_unregisterMetrics(PerformanceCollector *aCollector);
215#endif /* VBOX_WITH_RESOURCE_USAGE_API */
216
217#ifdef RT_OS_WINDOWS
218 HRESULT i_getFixedDrivesFromGlobalNamespace(std::list<std::pair<com::Utf8Str, com::Utf8Str> > &aDriveList) RT_NOEXCEPT;
219#endif
220 HRESULT i_getDrivesPathsList(std::list<std::pair<com::Utf8Str, com::Utf8Str> > &aDriveList) RT_NOEXCEPT;
221
222 struct Data; // opaque data structure, defined in HostImpl.cpp
223 Data *m;
224};
225
226#endif /* !MAIN_INCLUDED_HostImpl_h */
227
Note: See TracBrowser for help on using the repository browser.

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