VirtualBox

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

Last change on this file since 14949 was 14949, checked in by vboxsync, 16 years ago

Appended vim modeline to set tabstop and expand tabs (in the way
suggested by our coding guidelines).

  • Property svn:eol-style set to native
  • Property svn:keywords set to Author Date Id Revision
File size: 6.7 KB
Line 
1/* $Id: HostImpl.h 14949 2008-12-03 15:17:16Z vboxsync $ */
2/** @file
3 * Implemenation of IHost.
4 */
5
6/*
7 * Copyright (C) 2006-2007 Sun Microsystems, Inc.
8 *
9 * This file is part of VirtualBox Open Source Edition (OSE), as
10 * available from http://www.215389.xyz. 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 * Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa
18 * Clara, CA 95054 USA or visit http://www.sun.com if you need
19 * additional information or have any questions.
20 */
21
22#ifndef ____H_HOSTIMPL
23#define ____H_HOSTIMPL
24
25#include "VirtualBoxBase.h"
26#ifdef VBOX_WITH_USB
27# include "HostUSBDeviceImpl.h"
28# include "USBDeviceFilterImpl.h"
29# include "USBProxyService.h"
30# include "VirtualBoxImpl.h"
31#else
32class USBProxyService;
33#endif
34#include "HostPower.h"
35
36#ifdef RT_OS_WINDOWS
37# include "win/svchlp.h"
38#endif
39
40#ifdef VBOX_WITH_RESOURCE_USAGE_API
41# include "PerformanceImpl.h"
42#endif /* VBOX_WITH_RESOURCE_USAGE_API */
43
44class VirtualBox;
45class SessionMachine;
46class HostDVDDrive;
47class HostFloppyDrive;
48class Progress;
49
50#include <list>
51
52class ATL_NO_VTABLE Host :
53 public VirtualBoxBaseWithChildren,
54 public VirtualBoxSupportErrorInfoImpl <Host, IHost>,
55 public VirtualBoxSupportTranslation <Host>,
56 public IHost
57{
58public:
59
60 DECLARE_NOT_AGGREGATABLE(Host)
61
62 DECLARE_PROTECT_FINAL_CONSTRUCT()
63
64 BEGIN_COM_MAP(Host)
65 COM_INTERFACE_ENTRY(ISupportErrorInfo)
66 COM_INTERFACE_ENTRY(IHost)
67 END_COM_MAP()
68
69 NS_DECL_ISUPPORTS
70
71 HRESULT FinalConstruct();
72 void FinalRelease();
73
74 // public initializer/uninitializer for internal purposes only
75 HRESULT init (VirtualBox *aParent);
76 void uninit();
77
78 // IHost properties
79 STDMETHOD(COMGETTER(DVDDrives))(IHostDVDDriveCollection **drives);
80 STDMETHOD(COMGETTER(FloppyDrives))(IHostFloppyDriveCollection **drives);
81 STDMETHOD(COMGETTER(USBDevices))(IHostUSBDeviceCollection **aUSBDevices);
82 STDMETHOD(COMGETTER(USBDeviceFilters))(IHostUSBDeviceFilterCollection ** aUSBDeviceFilters);
83 STDMETHOD(COMGETTER(NetworkInterfaces))(IHostNetworkInterfaceCollection **networkInterfaces);
84 STDMETHOD(COMGETTER(ProcessorCount))(ULONG *count);
85 STDMETHOD(COMGETTER(ProcessorOnlineCount))(ULONG *count);
86 STDMETHOD(GetProcessorSpeed)(ULONG cpuId, ULONG *speed);
87 STDMETHOD(GetProcessorDescription)(ULONG cpuId, BSTR *description);
88 STDMETHOD(GetProcessorFeature) (ProcessorFeature_T feature, BOOL *supported);
89 STDMETHOD(COMGETTER(MemorySize))(ULONG *size);
90 STDMETHOD(COMGETTER(MemoryAvailable))(ULONG *available);
91 STDMETHOD(COMGETTER(OperatingSystem))(BSTR *os);
92 STDMETHOD(COMGETTER(OSVersion))(BSTR *version);
93 STDMETHOD(COMGETTER(UTCTime))(LONG64 *aUTCTime);
94
95 // IHost methods
96#ifdef RT_OS_WINDOWS
97 STDMETHOD(CreateHostNetworkInterface) (INPTR BSTR aName,
98 IHostNetworkInterface **aHostNetworkInterface,
99 IProgress **aProgress);
100 STDMETHOD(RemoveHostNetworkInterface) (INPTR GUIDPARAM aId,
101 IHostNetworkInterface **aHostNetworkInterface,
102 IProgress **aProgress);
103#endif
104 STDMETHOD(CreateUSBDeviceFilter) (INPTR BSTR aName, IHostUSBDeviceFilter **aFilter);
105 STDMETHOD(InsertUSBDeviceFilter) (ULONG aPosition, IHostUSBDeviceFilter *aFilter);
106 STDMETHOD(RemoveUSBDeviceFilter) (ULONG aPosition, IHostUSBDeviceFilter **aFilter);
107
108 // public methods only for internal purposes
109
110 HRESULT loadSettings (const settings::Key &aGlobal);
111 HRESULT saveSettings (settings::Key &aGlobal);
112
113#ifdef VBOX_WITH_USB
114 typedef std::list <ComObjPtr <HostUSBDeviceFilter> > USBDeviceFilterList;
115
116 /** Must be called from under this object's lock. */
117 USBProxyService *usbProxyService() { return mUSBProxyService; }
118
119 HRESULT onUSBDeviceFilterChange (HostUSBDeviceFilter *aFilter, BOOL aActiveChanged = FALSE);
120 void getUSBFilters(USBDeviceFilterList *aGlobalFiltes, VirtualBox::SessionMachineVector *aMachines);
121 HRESULT checkUSBProxyService();
122#endif /* !VBOX_WITH_USB */
123
124#ifdef RT_OS_WINDOWS
125 static int networkInterfaceHelperServer (SVCHlpClient *aClient,
126 SVCHlpMsg::Code aMsgCode);
127#endif
128
129 // for VirtualBoxSupportErrorInfoImpl
130 static const wchar_t *getComponentName() { return L"Host"; }
131
132private:
133
134#if defined(RT_OS_LINUX) || defined(RT_OS_SOLARIS)
135# if defined(VBOX_WITH_LIBHAL) || defined(VBOX_USE_LIBHAL)
136 bool getDVDInfoFromHal(std::list <ComObjPtr <HostDVDDrive> > &list);
137 bool getFloppyInfoFromHal(std::list <ComObjPtr <HostFloppyDrive> > &list);
138# endif
139 void parseMountTable(char *mountTable, std::list <ComObjPtr <HostDVDDrive> > &list);
140 bool validateDevice(const char *deviceNode, bool isCDROM);
141#endif
142
143#ifdef VBOX_WITH_USB
144 /** specialization for IHostUSBDeviceFilter */
145 ComObjPtr <HostUSBDeviceFilter> getDependentChild (IHostUSBDeviceFilter *aFilter)
146 {
147 VirtualBoxBase *child = VirtualBoxBaseWithChildren::
148 getDependentChild (ComPtr <IUnknown> (aFilter));
149 return child ? dynamic_cast <HostUSBDeviceFilter *> (child)
150 : NULL;
151 }
152#endif /* VBOX_WITH_USB */
153
154#ifdef RT_OS_WINDOWS
155 static int createNetworkInterface (SVCHlpClient *aClient,
156 const Utf8Str &aName,
157 Guid &aGUID, Utf8Str &aErrMsg);
158 static int removeNetworkInterface (SVCHlpClient *aClient,
159 const Guid &aGUID,
160 Utf8Str &aErrMsg);
161 static HRESULT networkInterfaceHelperClient (SVCHlpClient *aClient,
162 Progress *aProgress,
163 void *aUser, int *aVrc);
164#endif
165
166#ifdef VBOX_WITH_RESOURCE_USAGE_API
167 void registerMetrics (PerformanceCollector *aCollector);
168 void unregisterMetrics (PerformanceCollector *aCollector);
169#endif /* VBOX_WITH_RESOURCE_USAGE_API */
170
171 ComObjPtr <VirtualBox, ComWeakRef> mParent;
172
173#ifdef VBOX_WITH_USB
174 USBDeviceFilterList mUSBDeviceFilters;
175
176 /** Pointer to the USBProxyService object. */
177 USBProxyService *mUSBProxyService;
178#endif /* VBOX_WITH_USB */
179
180 /* Features that can be queried with GetProcessorFeature */
181 BOOL fVTxAMDVSupported, fLongModeSupported, fPAESupported;
182
183 HostPowerService *mHostPowerService;
184};
185
186#endif // ____H_HOSTIMPL
187/* vi: set tabstop=4 shiftwidth=4 expandtab: */
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