HostImpl.h revision 538ed51248ec8dbb4de3197f160656c43e88a5f1
78a072e1b56619e3230735ae073668311232ec94vboxsync/** @file
78a072e1b56619e3230735ae073668311232ec94vboxsync *
78a072e1b56619e3230735ae073668311232ec94vboxsync * VirtualBox COM class implementation
78a072e1b56619e3230735ae073668311232ec94vboxsync */
78a072e1b56619e3230735ae073668311232ec94vboxsync
78a072e1b56619e3230735ae073668311232ec94vboxsync/*
85668909c68b5d0e67c89d6042535b41c4bffeccvboxsync * Copyright (C) 2006 InnoTek Systemberatung GmbH
78a072e1b56619e3230735ae073668311232ec94vboxsync *
2f139cbf73f9adba01382892f33558ad7bcb40cbvboxsync * This file is part of VirtualBox Open Source Edition (OSE), as
2f139cbf73f9adba01382892f33558ad7bcb40cbvboxsync * available from http://www.virtualbox.org. This file is free software;
2f139cbf73f9adba01382892f33558ad7bcb40cbvboxsync * you can redistribute it and/or modify it under the terms of the GNU
2f139cbf73f9adba01382892f33558ad7bcb40cbvboxsync * General Public License as published by the Free Software Foundation,
2f139cbf73f9adba01382892f33558ad7bcb40cbvboxsync * in version 2 as it comes in the "COPYING" file of the VirtualBox OSE
2f139cbf73f9adba01382892f33558ad7bcb40cbvboxsync * distribution. VirtualBox OSE is distributed in the hope that it will
2f139cbf73f9adba01382892f33558ad7bcb40cbvboxsync * be useful, but WITHOUT ANY WARRANTY of any kind.
78a072e1b56619e3230735ae073668311232ec94vboxsync *
78a072e1b56619e3230735ae073668311232ec94vboxsync * If you received this file as part of a commercial VirtualBox
78a072e1b56619e3230735ae073668311232ec94vboxsync * distribution, then only the terms of your commercial VirtualBox
78a072e1b56619e3230735ae073668311232ec94vboxsync * license agreement apply instead of the previous paragraph.
78a072e1b56619e3230735ae073668311232ec94vboxsync */
78a072e1b56619e3230735ae073668311232ec94vboxsync
78a072e1b56619e3230735ae073668311232ec94vboxsync#ifndef ____H_HOSTIMPL
dc2db4623ff57b4efcc4033875d3d7176a69f5d3vboxsync#define ____H_HOSTIMPL
78a072e1b56619e3230735ae073668311232ec94vboxsync
78a072e1b56619e3230735ae073668311232ec94vboxsync#include "VirtualBoxBase.h"
78a072e1b56619e3230735ae073668311232ec94vboxsync#include "HostUSBDeviceImpl.h"
78a072e1b56619e3230735ae073668311232ec94vboxsync#include "USBDeviceFilterImpl.h"
dc2db4623ff57b4efcc4033875d3d7176a69f5d3vboxsync
78a072e1b56619e3230735ae073668311232ec94vboxsync#ifdef __WIN__
78a072e1b56619e3230735ae073668311232ec94vboxsync#include "win32/svchlp.h"
78a072e1b56619e3230735ae073668311232ec94vboxsync#endif
78a072e1b56619e3230735ae073668311232ec94vboxsync
78a072e1b56619e3230735ae073668311232ec94vboxsync#include <VBox/cfgldr.h>
78a072e1b56619e3230735ae073668311232ec94vboxsync
78a072e1b56619e3230735ae073668311232ec94vboxsyncclass VirtualBox;
e068057c82b010bc7cc663e8f57ac3ef1890a33cvboxsyncclass SessionMachine;
e068057c82b010bc7cc663e8f57ac3ef1890a33cvboxsyncclass HostDVDDrive;
93dce14edf71c2ea850ed63b2ba81740f145757bvboxsyncclass Progress;
78a072e1b56619e3230735ae073668311232ec94vboxsync
78a072e1b56619e3230735ae073668311232ec94vboxsync#include <list>
78a072e1b56619e3230735ae073668311232ec94vboxsync
78a072e1b56619e3230735ae073668311232ec94vboxsyncclass ATL_NO_VTABLE Host :
78a072e1b56619e3230735ae073668311232ec94vboxsync public VirtualBoxBaseWithChildren,
78a072e1b56619e3230735ae073668311232ec94vboxsync public VirtualBoxSupportErrorInfoImpl <Host, IHost>,
78a072e1b56619e3230735ae073668311232ec94vboxsync public VirtualBoxSupportTranslation <Host>,
78a072e1b56619e3230735ae073668311232ec94vboxsync public IHost
78a072e1b56619e3230735ae073668311232ec94vboxsync{
78a072e1b56619e3230735ae073668311232ec94vboxsyncpublic:
78a072e1b56619e3230735ae073668311232ec94vboxsync
78a072e1b56619e3230735ae073668311232ec94vboxsync DECLARE_NOT_AGGREGATABLE(Host)
78a072e1b56619e3230735ae073668311232ec94vboxsync
78a072e1b56619e3230735ae073668311232ec94vboxsync DECLARE_PROTECT_FINAL_CONSTRUCT()
78a072e1b56619e3230735ae073668311232ec94vboxsync
78a072e1b56619e3230735ae073668311232ec94vboxsync BEGIN_COM_MAP(Host)
78a072e1b56619e3230735ae073668311232ec94vboxsync COM_INTERFACE_ENTRY(ISupportErrorInfo)
78a072e1b56619e3230735ae073668311232ec94vboxsync COM_INTERFACE_ENTRY(IHost)
78a072e1b56619e3230735ae073668311232ec94vboxsync END_COM_MAP()
78a072e1b56619e3230735ae073668311232ec94vboxsync
78a072e1b56619e3230735ae073668311232ec94vboxsync NS_DECL_ISUPPORTS
78a072e1b56619e3230735ae073668311232ec94vboxsync
78a072e1b56619e3230735ae073668311232ec94vboxsync HRESULT FinalConstruct();
78a072e1b56619e3230735ae073668311232ec94vboxsync void FinalRelease();
78a072e1b56619e3230735ae073668311232ec94vboxsync
78a072e1b56619e3230735ae073668311232ec94vboxsync // public initializer/uninitializer for internal purposes only
78a072e1b56619e3230735ae073668311232ec94vboxsync HRESULT init (VirtualBox *parent);
3b3bc8a9383a065307e540b83fc3a3d6c548a082vboxsync void uninit();
78a072e1b56619e3230735ae073668311232ec94vboxsync
3b3bc8a9383a065307e540b83fc3a3d6c548a082vboxsync // IHost properties
3b3bc8a9383a065307e540b83fc3a3d6c548a082vboxsync STDMETHOD(COMGETTER(DVDDrives))(IHostDVDDriveCollection **drives);
78a072e1b56619e3230735ae073668311232ec94vboxsync STDMETHOD(COMGETTER(FloppyDrives))(IHostFloppyDriveCollection **drives);
78a072e1b56619e3230735ae073668311232ec94vboxsync STDMETHOD(COMGETTER(USBDevices))(IHostUSBDeviceCollection **aUSBDevices);
3b3bc8a9383a065307e540b83fc3a3d6c548a082vboxsync STDMETHOD(COMGETTER(USBDeviceFilters))(IHostUSBDeviceFilterCollection ** aUSBDeviceFilters);
3b3bc8a9383a065307e540b83fc3a3d6c548a082vboxsync#ifdef __WIN__
3b3bc8a9383a065307e540b83fc3a3d6c548a082vboxsync STDMETHOD(COMGETTER(NetworkInterfaces))(IHostNetworkInterfaceCollection **networkInterfaces);
3b3bc8a9383a065307e540b83fc3a3d6c548a082vboxsync#endif
3b3bc8a9383a065307e540b83fc3a3d6c548a082vboxsync STDMETHOD(COMGETTER(ProcessorCount))(ULONG *count);
3b3bc8a9383a065307e540b83fc3a3d6c548a082vboxsync STDMETHOD(COMGETTER(ProcessorSpeed))(ULONG *speed);
3b3bc8a9383a065307e540b83fc3a3d6c548a082vboxsync STDMETHOD(COMGETTER(ProcessorDescription))(BSTR *description);
3b3bc8a9383a065307e540b83fc3a3d6c548a082vboxsync STDMETHOD(COMGETTER(MemorySize))(ULONG *size);
3b3bc8a9383a065307e540b83fc3a3d6c548a082vboxsync STDMETHOD(COMGETTER(MemoryAvailable))(ULONG *available);
3b3bc8a9383a065307e540b83fc3a3d6c548a082vboxsync STDMETHOD(COMGETTER(OperatingSystem))(BSTR *os);
3b3bc8a9383a065307e540b83fc3a3d6c548a082vboxsync STDMETHOD(COMGETTER(OSVersion))(BSTR *version);
3b3bc8a9383a065307e540b83fc3a3d6c548a082vboxsync STDMETHOD(COMGETTER(UTCTime))(LONG64 *aUTCTime);
78a072e1b56619e3230735ae073668311232ec94vboxsync
78a072e1b56619e3230735ae073668311232ec94vboxsync // IHost methods
3b3bc8a9383a065307e540b83fc3a3d6c548a082vboxsync#ifdef __WIN__
3b3bc8a9383a065307e540b83fc3a3d6c548a082vboxsync STDMETHOD(CreateHostNetworkInterface) (INPTR BSTR aName,
78a072e1b56619e3230735ae073668311232ec94vboxsync IHostNetworkInterface **aHostNetworkInterface,
78a072e1b56619e3230735ae073668311232ec94vboxsync IProgress **aProgress);
3b3bc8a9383a065307e540b83fc3a3d6c548a082vboxsync STDMETHOD(RemoveHostNetworkInterface) (INPTR GUIDPARAM aId,
3b3bc8a9383a065307e540b83fc3a3d6c548a082vboxsync IHostNetworkInterface **aHostNetworkInterface,
78a072e1b56619e3230735ae073668311232ec94vboxsync IProgress **aProgress);
78a072e1b56619e3230735ae073668311232ec94vboxsync#endif
3b3bc8a9383a065307e540b83fc3a3d6c548a082vboxsync STDMETHOD(CreateUSBDeviceFilter) (INPTR BSTR aName, IHostUSBDeviceFilter **aFilter);
3b3bc8a9383a065307e540b83fc3a3d6c548a082vboxsync STDMETHOD(InsertUSBDeviceFilter) (ULONG aPosition, IHostUSBDeviceFilter *aFilter);
78a072e1b56619e3230735ae073668311232ec94vboxsync STDMETHOD(RemoveUSBDeviceFilter) (ULONG aPosition, IHostUSBDeviceFilter **aFilter);
78a072e1b56619e3230735ae073668311232ec94vboxsync
78a072e1b56619e3230735ae073668311232ec94vboxsync // public methods only for internal purposes
3b3bc8a9383a065307e540b83fc3a3d6c548a082vboxsync
3b3bc8a9383a065307e540b83fc3a3d6c548a082vboxsync HRESULT onUSBDeviceFilterChange (HostUSBDeviceFilter *aFilter,
3b3bc8a9383a065307e540b83fc3a3d6c548a082vboxsync BOOL aActiveChanged = FALSE);
3b3bc8a9383a065307e540b83fc3a3d6c548a082vboxsync
3b3bc8a9383a065307e540b83fc3a3d6c548a082vboxsync HRESULT loadSettings (CFGNODE aGlobal);
3b3bc8a9383a065307e540b83fc3a3d6c548a082vboxsync HRESULT saveSettings (CFGNODE aGlobal);
3b3bc8a9383a065307e540b83fc3a3d6c548a082vboxsync
3b3bc8a9383a065307e540b83fc3a3d6c548a082vboxsync HRESULT captureUSBDevice (SessionMachine *aMachine, INPTR GUIDPARAM aId,
3b3bc8a9383a065307e540b83fc3a3d6c548a082vboxsync IUSBDevice **aHostDevice);
3b3bc8a9383a065307e540b83fc3a3d6c548a082vboxsync HRESULT releaseUSBDevice (SessionMachine *aMachine, INPTR GUIDPARAM aId);
2d86fd6bcfe35a4bb83bb8a4fe68090693cdce95vboxsync HRESULT autoCaptureUSBDevices (SessionMachine *aMachine,
2d86fd6bcfe35a4bb83bb8a4fe68090693cdce95vboxsync IUSBDeviceCollection **aHostDevices);
3b3bc8a9383a065307e540b83fc3a3d6c548a082vboxsync HRESULT releaseAllUSBDevices (SessionMachine *aMachine);
2d86fd6bcfe35a4bb83bb8a4fe68090693cdce95vboxsync
78a072e1b56619e3230735ae073668311232ec94vboxsync void onUSBDeviceAttached (HostUSBDevice *aDevice);
af15e739afe91d46d418e5844cf3d4e540b9f74avboxsync void onUSBDeviceDetached (HostUSBDevice *aDevice);
af15e739afe91d46d418e5844cf3d4e540b9f74avboxsync void onUSBDeviceStateChanged (HostUSBDevice *aDevice);
af15e739afe91d46d418e5844cf3d4e540b9f74avboxsync
78a072e1b56619e3230735ae073668311232ec94vboxsync HRESULT checkUSBProxyService();
78a072e1b56619e3230735ae073668311232ec94vboxsync
78a072e1b56619e3230735ae073668311232ec94vboxsync /* must be called from under this object's lock */
78a072e1b56619e3230735ae073668311232ec94vboxsync USBProxyService *usbProxyService() { return mUSBProxyService; }
78a072e1b56619e3230735ae073668311232ec94vboxsync
78a072e1b56619e3230735ae073668311232ec94vboxsync#ifdef __WIN__
2d86fd6bcfe35a4bb83bb8a4fe68090693cdce95vboxsync static int networkInterfaceHelperServer (SVCHlpClient *aClient,
2d86fd6bcfe35a4bb83bb8a4fe68090693cdce95vboxsync SVCHlpMsg::Code aMsgCode);
2d86fd6bcfe35a4bb83bb8a4fe68090693cdce95vboxsync#endif
af15e739afe91d46d418e5844cf3d4e540b9f74avboxsync
2d86fd6bcfe35a4bb83bb8a4fe68090693cdce95vboxsync // for VirtualBoxSupportErrorInfoImpl
da7dd3061cddf2c716ec50849c4f23a597e82f68vboxsync static const wchar_t *getComponentName() { return L"Host"; }
78a072e1b56619e3230735ae073668311232ec94vboxsync
78a072e1b56619e3230735ae073668311232ec94vboxsyncprivate:
db3acd7622a07fad2fdcefdbc1d7b34c75ffccf1vboxsync
0614bee07b5f88aa8803df43fde6d7185a9a7fffvboxsync#ifdef __LINUX__
3b3bc8a9383a065307e540b83fc3a3d6c548a082vboxsync# ifdef VBOX_USE_LIBHAL
3b3bc8a9383a065307e540b83fc3a3d6c548a082vboxsync bool getDVDInfoFromHal(std::list <ComObjPtr <HostDVDDrive> > &list);
3b3bc8a9383a065307e540b83fc3a3d6c548a082vboxsync# endif
67927207a2d6bb545eb655ef14cdb090b1957120vboxsync void parseMountTable(char *mountTable, std::list <ComObjPtr <HostDVDDrive> > &list);
67927207a2d6bb545eb655ef14cdb090b1957120vboxsync bool validateDevice(const char *deviceNode, bool isCDROM);
3b3bc8a9383a065307e540b83fc3a3d6c548a082vboxsync#endif
3b3bc8a9383a065307e540b83fc3a3d6c548a082vboxsync
67927207a2d6bb545eb655ef14cdb090b1957120vboxsync /** specialization for IHostUSBDeviceFilter */
67927207a2d6bb545eb655ef14cdb090b1957120vboxsync ComObjPtr <HostUSBDeviceFilter> getDependentChild (IHostUSBDeviceFilter *aFilter)
59df2cb2a321833cae02c6bc6c436db90b85c17avboxsync {
3b3bc8a9383a065307e540b83fc3a3d6c548a082vboxsync VirtualBoxBase *child = VirtualBoxBaseWithChildren::
67927207a2d6bb545eb655ef14cdb090b1957120vboxsync getDependentChild (ComPtr <IUnknown> (aFilter));
67927207a2d6bb545eb655ef14cdb090b1957120vboxsync return child ? dynamic_cast <HostUSBDeviceFilter *> (child)
67927207a2d6bb545eb655ef14cdb090b1957120vboxsync : NULL;
3b3bc8a9383a065307e540b83fc3a3d6c548a082vboxsync }
67927207a2d6bb545eb655ef14cdb090b1957120vboxsync
67927207a2d6bb545eb655ef14cdb090b1957120vboxsync HRESULT applyAllUSBFilters (ComObjPtr <HostUSBDevice> &aDevice,
3b3bc8a9383a065307e540b83fc3a3d6c548a082vboxsync SessionMachine *aMachine = NULL);
3b3bc8a9383a065307e540b83fc3a3d6c548a082vboxsync void applyMachineUSBFilters (SessionMachine *aMachine,
3b3bc8a9383a065307e540b83fc3a3d6c548a082vboxsync ComObjPtr <HostUSBDevice> &aDevice);
3b3bc8a9383a065307e540b83fc3a3d6c548a082vboxsync
3b3bc8a9383a065307e540b83fc3a3d6c548a082vboxsync#ifdef __WIN__
3b3bc8a9383a065307e540b83fc3a3d6c548a082vboxsync static int createNetworkInterface (SVCHlpClient *aClient,
3b3bc8a9383a065307e540b83fc3a3d6c548a082vboxsync const Utf8Str &aName,
3b3bc8a9383a065307e540b83fc3a3d6c548a082vboxsync Guid &aGUID, Utf8Str &aErrMsg);
3b3bc8a9383a065307e540b83fc3a3d6c548a082vboxsync static int removeNetworkInterface (SVCHlpClient *aClient,
59df2cb2a321833cae02c6bc6c436db90b85c17avboxsync const Guid &aGUID,
0614bee07b5f88aa8803df43fde6d7185a9a7fffvboxsync Utf8Str &aErrMsg);
0614bee07b5f88aa8803df43fde6d7185a9a7fffvboxsync static HRESULT networkInterfaceHelperClient (SVCHlpClient *aClient,
78a072e1b56619e3230735ae073668311232ec94vboxsync Progress *aProgress,
78a072e1b56619e3230735ae073668311232ec94vboxsync void *aUser, int *aVrc);
78a072e1b56619e3230735ae073668311232ec94vboxsync#endif
78a072e1b56619e3230735ae073668311232ec94vboxsync
dc2db4623ff57b4efcc4033875d3d7176a69f5d3vboxsync ComObjPtr <VirtualBox, ComWeakRef> mParent;
78a072e1b56619e3230735ae073668311232ec94vboxsync
c3d2b15ad840b405062f4c2c6b127d6fc107c7b2vboxsync typedef std::list <ComObjPtr <HostUSBDevice> > USBDeviceList;
78a072e1b56619e3230735ae073668311232ec94vboxsync USBDeviceList mUSBDevices;
78a072e1b56619e3230735ae073668311232ec94vboxsync
78a072e1b56619e3230735ae073668311232ec94vboxsync typedef std::list <ComObjPtr <HostUSBDeviceFilter> > USBDeviceFilterList;
78a072e1b56619e3230735ae073668311232ec94vboxsync USBDeviceFilterList mUSBDeviceFilters;
78a072e1b56619e3230735ae073668311232ec94vboxsync
85668909c68b5d0e67c89d6042535b41c4bffeccvboxsync /** Pointer to the USBProxyService object. */
78a072e1b56619e3230735ae073668311232ec94vboxsync USBProxyService *mUSBProxyService;
78a072e1b56619e3230735ae073668311232ec94vboxsync};
78a072e1b56619e3230735ae073668311232ec94vboxsync
78a072e1b56619e3230735ae073668311232ec94vboxsync#endif // ____H_HOSTIMPL
78a072e1b56619e3230735ae073668311232ec94vboxsync