ConsoleImpl.h revision a5b0b691c49d35639207d4539753eaebf3f05275
6728a36898fd2be125a28e84d2115d19aa4923edvboxsync/* $Id$ */
6728a36898fd2be125a28e84d2115d19aa4923edvboxsync
6728a36898fd2be125a28e84d2115d19aa4923edvboxsync/** @file
6728a36898fd2be125a28e84d2115d19aa4923edvboxsync *
9562e2d410460d8fae06fa24297f172fee1d1995vboxsync * VBox Console COM Class definition
6728a36898fd2be125a28e84d2115d19aa4923edvboxsync */
6728a36898fd2be125a28e84d2115d19aa4923edvboxsync
9562e2d410460d8fae06fa24297f172fee1d1995vboxsync/*
6728a36898fd2be125a28e84d2115d19aa4923edvboxsync * Copyright (C) 2006-2008 Sun Microsystems, Inc.
6728a36898fd2be125a28e84d2115d19aa4923edvboxsync *
6728a36898fd2be125a28e84d2115d19aa4923edvboxsync * This file is part of VirtualBox Open Source Edition (OSE), as
6728a36898fd2be125a28e84d2115d19aa4923edvboxsync * available from http://www.virtualbox.org. This file is free software;
9562e2d410460d8fae06fa24297f172fee1d1995vboxsync * you can redistribute it and/or modify it under the terms of the GNU
9562e2d410460d8fae06fa24297f172fee1d1995vboxsync * General Public License (GPL) as published by the Free Software
9562e2d410460d8fae06fa24297f172fee1d1995vboxsync * Foundation, in version 2 as it comes in the "COPYING" file of the
9562e2d410460d8fae06fa24297f172fee1d1995vboxsync * VirtualBox OSE distribution. VirtualBox OSE is distributed in the
9562e2d410460d8fae06fa24297f172fee1d1995vboxsync * hope that it will be useful, but WITHOUT ANY WARRANTY of any kind.
9562e2d410460d8fae06fa24297f172fee1d1995vboxsync *
9562e2d410460d8fae06fa24297f172fee1d1995vboxsync * Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa
6728a36898fd2be125a28e84d2115d19aa4923edvboxsync * Clara, CA 95054 USA or visit http://www.sun.com if you need
6728a36898fd2be125a28e84d2115d19aa4923edvboxsync * additional information or have any questions.
9562e2d410460d8fae06fa24297f172fee1d1995vboxsync */
9562e2d410460d8fae06fa24297f172fee1d1995vboxsync
9562e2d410460d8fae06fa24297f172fee1d1995vboxsync#ifndef ____H_CONSOLEIMPL
9562e2d410460d8fae06fa24297f172fee1d1995vboxsync#define ____H_CONSOLEIMPL
6728a36898fd2be125a28e84d2115d19aa4923edvboxsync
6728a36898fd2be125a28e84d2115d19aa4923edvboxsync#include "VirtualBoxBase.h"
6728a36898fd2be125a28e84d2115d19aa4923edvboxsync#include "ProgressImpl.h"
6728a36898fd2be125a28e84d2115d19aa4923edvboxsync
6728a36898fd2be125a28e84d2115d19aa4923edvboxsyncclass Guest;
6728a36898fd2be125a28e84d2115d19aa4923edvboxsyncclass Keyboard;
6728a36898fd2be125a28e84d2115d19aa4923edvboxsyncclass Mouse;
6728a36898fd2be125a28e84d2115d19aa4923edvboxsyncclass Display;
9562e2d410460d8fae06fa24297f172fee1d1995vboxsyncclass MachineDebugger;
9562e2d410460d8fae06fa24297f172fee1d1995vboxsyncclass OUSBDevice;
9562e2d410460d8fae06fa24297f172fee1d1995vboxsyncclass RemoteUSBDevice;
6728a36898fd2be125a28e84d2115d19aa4923edvboxsyncclass SharedFolder;
9562e2d410460d8fae06fa24297f172fee1d1995vboxsyncclass RemoteDisplayInfo;
9562e2d410460d8fae06fa24297f172fee1d1995vboxsyncclass AudioSniffer;
9562e2d410460d8fae06fa24297f172fee1d1995vboxsyncclass ConsoleVRDPServer;
6728a36898fd2be125a28e84d2115d19aa4923edvboxsyncclass VMMDev;
6728a36898fd2be125a28e84d2115d19aa4923edvboxsync
6728a36898fd2be125a28e84d2115d19aa4923edvboxsync#include <VBox/vrdpapi.h>
9562e2d410460d8fae06fa24297f172fee1d1995vboxsync#include <VBox/pdmdrv.h>
9562e2d410460d8fae06fa24297f172fee1d1995vboxsync#ifdef VBOX_WITH_GUEST_PROPS
9562e2d410460d8fae06fa24297f172fee1d1995vboxsync# include <VBox/HostServices/GuestPropertySvc.h> /* For the property notification callback */
9562e2d410460d8fae06fa24297f172fee1d1995vboxsync#endif
9562e2d410460d8fae06fa24297f172fee1d1995vboxsync
9562e2d410460d8fae06fa24297f172fee1d1995vboxsyncstruct VUSBIRHCONFIG;
9562e2d410460d8fae06fa24297f172fee1d1995vboxsynctypedef struct VUSBIRHCONFIG *PVUSBIRHCONFIG;
9562e2d410460d8fae06fa24297f172fee1d1995vboxsync
9562e2d410460d8fae06fa24297f172fee1d1995vboxsync#include <list>
9562e2d410460d8fae06fa24297f172fee1d1995vboxsync
9562e2d410460d8fae06fa24297f172fee1d1995vboxsync// defines
9562e2d410460d8fae06fa24297f172fee1d1995vboxsync///////////////////////////////////////////////////////////////////////////////
9562e2d410460d8fae06fa24297f172fee1d1995vboxsync
9562e2d410460d8fae06fa24297f172fee1d1995vboxsync/**
9562e2d410460d8fae06fa24297f172fee1d1995vboxsync * Checks the availability of the underlying VM device driver corresponding
9562e2d410460d8fae06fa24297f172fee1d1995vboxsync * to the COM interface (IKeyboard, IMouse, IDisplay, etc.). When the driver is
9562e2d410460d8fae06fa24297f172fee1d1995vboxsync * not available (NULL), sets error info and returns returns E_ACCESSDENIED.
9562e2d410460d8fae06fa24297f172fee1d1995vboxsync * The translatable error message is defined in null context.
9562e2d410460d8fae06fa24297f172fee1d1995vboxsync *
9562e2d410460d8fae06fa24297f172fee1d1995vboxsync * Intended to used only within Console children (i,e. Keyboard, Mouse,
9562e2d410460d8fae06fa24297f172fee1d1995vboxsync * Display, etc.).
6728a36898fd2be125a28e84d2115d19aa4923edvboxsync *
6728a36898fd2be125a28e84d2115d19aa4923edvboxsync * @param drv driver pointer to check (compare it with NULL)
6728a36898fd2be125a28e84d2115d19aa4923edvboxsync */
9562e2d410460d8fae06fa24297f172fee1d1995vboxsync#define CHECK_CONSOLE_DRV(drv) \
9562e2d410460d8fae06fa24297f172fee1d1995vboxsync do { \
9562e2d410460d8fae06fa24297f172fee1d1995vboxsync if (!(drv)) \
9562e2d410460d8fae06fa24297f172fee1d1995vboxsync return setError (E_ACCESSDENIED, tr ("The console is not powered up")); \
9562e2d410460d8fae06fa24297f172fee1d1995vboxsync } while (0)
9562e2d410460d8fae06fa24297f172fee1d1995vboxsync
9562e2d410460d8fae06fa24297f172fee1d1995vboxsync/** @def VBOX_WITH_UNIXY_TAP_NETWORKING
9562e2d410460d8fae06fa24297f172fee1d1995vboxsync * Unixy style TAP networking. This is defined in the Makefile since it's also
9562e2d410460d8fae06fa24297f172fee1d1995vboxsync * used by NetworkAdapterImpl.h/cpp.
9562e2d410460d8fae06fa24297f172fee1d1995vboxsync */
9562e2d410460d8fae06fa24297f172fee1d1995vboxsync#ifdef __DOXYGEN__
9562e2d410460d8fae06fa24297f172fee1d1995vboxsync# define VBOX_WITH_UNIXY_TAP_NETWORKING
9562e2d410460d8fae06fa24297f172fee1d1995vboxsync#endif
9562e2d410460d8fae06fa24297f172fee1d1995vboxsync
9562e2d410460d8fae06fa24297f172fee1d1995vboxsync// Console
9562e2d410460d8fae06fa24297f172fee1d1995vboxsync///////////////////////////////////////////////////////////////////////////////
9562e2d410460d8fae06fa24297f172fee1d1995vboxsync
9562e2d410460d8fae06fa24297f172fee1d1995vboxsync/** IConsole implementation class */
9562e2d410460d8fae06fa24297f172fee1d1995vboxsyncclass ATL_NO_VTABLE Console :
9562e2d410460d8fae06fa24297f172fee1d1995vboxsync public VirtualBoxBaseWithChildrenNEXT,
9562e2d410460d8fae06fa24297f172fee1d1995vboxsync public VirtualBoxSupportErrorInfoImpl <Console, IConsole>,
9562e2d410460d8fae06fa24297f172fee1d1995vboxsync public VirtualBoxSupportTranslation <Console>,
6728a36898fd2be125a28e84d2115d19aa4923edvboxsync public IConsole
6728a36898fd2be125a28e84d2115d19aa4923edvboxsync{
6728a36898fd2be125a28e84d2115d19aa4923edvboxsync Q_OBJECT
9562e2d410460d8fae06fa24297f172fee1d1995vboxsync
9562e2d410460d8fae06fa24297f172fee1d1995vboxsyncpublic:
9562e2d410460d8fae06fa24297f172fee1d1995vboxsync
6728a36898fd2be125a28e84d2115d19aa4923edvboxsync DECLARE_NOT_AGGREGATABLE(Console)
6728a36898fd2be125a28e84d2115d19aa4923edvboxsync
6728a36898fd2be125a28e84d2115d19aa4923edvboxsync DECLARE_PROTECT_FINAL_CONSTRUCT()
6728a36898fd2be125a28e84d2115d19aa4923edvboxsync
9562e2d410460d8fae06fa24297f172fee1d1995vboxsync BEGIN_COM_MAP(Console)
9562e2d410460d8fae06fa24297f172fee1d1995vboxsync COM_INTERFACE_ENTRY(ISupportErrorInfo)
9562e2d410460d8fae06fa24297f172fee1d1995vboxsync COM_INTERFACE_ENTRY(IConsole)
6728a36898fd2be125a28e84d2115d19aa4923edvboxsync END_COM_MAP()
9562e2d410460d8fae06fa24297f172fee1d1995vboxsync
9562e2d410460d8fae06fa24297f172fee1d1995vboxsync NS_DECL_ISUPPORTS
9562e2d410460d8fae06fa24297f172fee1d1995vboxsync
9562e2d410460d8fae06fa24297f172fee1d1995vboxsync Console();
6728a36898fd2be125a28e84d2115d19aa4923edvboxsync ~Console();
6728a36898fd2be125a28e84d2115d19aa4923edvboxsync
6728a36898fd2be125a28e84d2115d19aa4923edvboxsync HRESULT FinalConstruct();
6728a36898fd2be125a28e84d2115d19aa4923edvboxsync void FinalRelease();
9562e2d410460d8fae06fa24297f172fee1d1995vboxsync
9562e2d410460d8fae06fa24297f172fee1d1995vboxsync // public initializers/uninitializers for internal purposes only
9562e2d410460d8fae06fa24297f172fee1d1995vboxsync HRESULT init (IMachine *aMachine, IInternalMachineControl *aControl);
9562e2d410460d8fae06fa24297f172fee1d1995vboxsync void uninit();
9562e2d410460d8fae06fa24297f172fee1d1995vboxsync
9562e2d410460d8fae06fa24297f172fee1d1995vboxsync // IConsole properties
9562e2d410460d8fae06fa24297f172fee1d1995vboxsync STDMETHOD(COMGETTER(Machine)) (IMachine **aMachine);
9562e2d410460d8fae06fa24297f172fee1d1995vboxsync STDMETHOD(COMGETTER(State)) (MachineState_T *aMachineState);
9562e2d410460d8fae06fa24297f172fee1d1995vboxsync STDMETHOD(COMGETTER(Guest)) (IGuest **aGuest);
9562e2d410460d8fae06fa24297f172fee1d1995vboxsync STDMETHOD(COMGETTER(Keyboard)) (IKeyboard **aKeyboard);
9562e2d410460d8fae06fa24297f172fee1d1995vboxsync STDMETHOD(COMGETTER(Mouse)) (IMouse **aMouse);
9562e2d410460d8fae06fa24297f172fee1d1995vboxsync STDMETHOD(COMGETTER(Display)) (IDisplay **aDisplay);
9562e2d410460d8fae06fa24297f172fee1d1995vboxsync STDMETHOD(COMGETTER(Debugger)) (IMachineDebugger **aDebugger);
6728a36898fd2be125a28e84d2115d19aa4923edvboxsync STDMETHOD(COMGETTER(USBDevices)) (IUSBDeviceCollection **aUSBDevices);
6728a36898fd2be125a28e84d2115d19aa4923edvboxsync STDMETHOD(COMGETTER(RemoteUSBDevices)) (IHostUSBDeviceCollection **aRemoteUSBDevices);
6728a36898fd2be125a28e84d2115d19aa4923edvboxsync STDMETHOD(COMGETTER(RemoteDisplayInfo)) (IRemoteDisplayInfo **aRemoteDisplayInfo);
6728a36898fd2be125a28e84d2115d19aa4923edvboxsync STDMETHOD(COMGETTER(SharedFolders)) (ISharedFolderCollection **aSharedFolders);
6728a36898fd2be125a28e84d2115d19aa4923edvboxsync
6728a36898fd2be125a28e84d2115d19aa4923edvboxsync // IConsole methods
6728a36898fd2be125a28e84d2115d19aa4923edvboxsync STDMETHOD(PowerUp) (IProgress **aProgress);
9562e2d410460d8fae06fa24297f172fee1d1995vboxsync STDMETHOD(PowerUpPaused) (IProgress **aProgress);
6728a36898fd2be125a28e84d2115d19aa4923edvboxsync STDMETHOD(PowerDown)();
9562e2d410460d8fae06fa24297f172fee1d1995vboxsync STDMETHOD(PowerDownAsync) (IProgress **aProgress);
9562e2d410460d8fae06fa24297f172fee1d1995vboxsync STDMETHOD(Reset)();
6728a36898fd2be125a28e84d2115d19aa4923edvboxsync STDMETHOD(Pause)();
9562e2d410460d8fae06fa24297f172fee1d1995vboxsync STDMETHOD(Resume)();
9562e2d410460d8fae06fa24297f172fee1d1995vboxsync STDMETHOD(PowerButton)();
9562e2d410460d8fae06fa24297f172fee1d1995vboxsync STDMETHOD(SleepButton)();
9562e2d410460d8fae06fa24297f172fee1d1995vboxsync STDMETHOD(GetPowerButtonHandled)(BOOL *aHandled);
9562e2d410460d8fae06fa24297f172fee1d1995vboxsync STDMETHOD(GetGuestEnteredACPIMode)(BOOL *aEntered);
9562e2d410460d8fae06fa24297f172fee1d1995vboxsync STDMETHOD(SaveState) (IProgress **aProgress);
6728a36898fd2be125a28e84d2115d19aa4923edvboxsync STDMETHOD(AdoptSavedState) (INPTR BSTR aSavedStateFile);
6728a36898fd2be125a28e84d2115d19aa4923edvboxsync STDMETHOD(DiscardSavedState)();
9562e2d410460d8fae06fa24297f172fee1d1995vboxsync STDMETHOD(GetDeviceActivity) (DeviceType_T aDeviceType,
9562e2d410460d8fae06fa24297f172fee1d1995vboxsync DeviceActivity_T *aDeviceActivity);
9562e2d410460d8fae06fa24297f172fee1d1995vboxsync STDMETHOD(AttachUSBDevice) (INPTR GUIDPARAM aId);
9562e2d410460d8fae06fa24297f172fee1d1995vboxsync STDMETHOD(DetachUSBDevice) (INPTR GUIDPARAM aId, IUSBDevice **aDevice);
9562e2d410460d8fae06fa24297f172fee1d1995vboxsync STDMETHOD(CreateSharedFolder) (INPTR BSTR aName, INPTR BSTR aHostPath, BOOL aWritable);
9562e2d410460d8fae06fa24297f172fee1d1995vboxsync STDMETHOD(RemoveSharedFolder) (INPTR BSTR aName);
9562e2d410460d8fae06fa24297f172fee1d1995vboxsync STDMETHOD(TakeSnapshot) (INPTR BSTR aName, INPTR BSTR aDescription,
9562e2d410460d8fae06fa24297f172fee1d1995vboxsync IProgress **aProgress);
9562e2d410460d8fae06fa24297f172fee1d1995vboxsync STDMETHOD(DiscardSnapshot) (INPTR GUIDPARAM aId, IProgress **aProgress);
9562e2d410460d8fae06fa24297f172fee1d1995vboxsync STDMETHOD(DiscardCurrentState) (IProgress **aProgress);
9562e2d410460d8fae06fa24297f172fee1d1995vboxsync STDMETHOD(DiscardCurrentSnapshotAndState) (IProgress **aProgress);
9562e2d410460d8fae06fa24297f172fee1d1995vboxsync STDMETHOD(RegisterCallback) (IConsoleCallback *aCallback);
9562e2d410460d8fae06fa24297f172fee1d1995vboxsync STDMETHOD(UnregisterCallback)(IConsoleCallback *aCallback);
9562e2d410460d8fae06fa24297f172fee1d1995vboxsync
9562e2d410460d8fae06fa24297f172fee1d1995vboxsync // public methods for internal purposes only
9562e2d410460d8fae06fa24297f172fee1d1995vboxsync
9562e2d410460d8fae06fa24297f172fee1d1995vboxsync /*
9562e2d410460d8fae06fa24297f172fee1d1995vboxsync * Note: the following methods do not increase refcount. intended to be
9562e2d410460d8fae06fa24297f172fee1d1995vboxsync * called only by the VM execution thread.
9562e2d410460d8fae06fa24297f172fee1d1995vboxsync */
9562e2d410460d8fae06fa24297f172fee1d1995vboxsync
9562e2d410460d8fae06fa24297f172fee1d1995vboxsync Guest *getGuest() const { return mGuest; }
9562e2d410460d8fae06fa24297f172fee1d1995vboxsync Keyboard *getKeyboard() const { return mKeyboard; }
6728a36898fd2be125a28e84d2115d19aa4923edvboxsync Mouse *getMouse() const { return mMouse; }
ac153c99053f1edf42b00bf3a13475923bc4fcf1vboxsync Display *getDisplay() const { return mDisplay; }
9562e2d410460d8fae06fa24297f172fee1d1995vboxsync MachineDebugger *getMachineDebugger() const { return mDebugger; }
9562e2d410460d8fae06fa24297f172fee1d1995vboxsync
9562e2d410460d8fae06fa24297f172fee1d1995vboxsync const ComPtr <IMachine> &machine() const { return mMachine; }
9562e2d410460d8fae06fa24297f172fee1d1995vboxsync
ac153c99053f1edf42b00bf3a13475923bc4fcf1vboxsync /** Method is called only from ConsoleVRDPServer */
6728a36898fd2be125a28e84d2115d19aa4923edvboxsync IVRDPServer *getVRDPServer() const { return mVRDPServer; }
9562e2d410460d8fae06fa24297f172fee1d1995vboxsync
9562e2d410460d8fae06fa24297f172fee1d1995vboxsync ConsoleVRDPServer *consoleVRDPServer() const { return mConsoleVRDPServer; }
9562e2d410460d8fae06fa24297f172fee1d1995vboxsync
9562e2d410460d8fae06fa24297f172fee1d1995vboxsync HRESULT updateMachineState (MachineState_T aMachineState);
9562e2d410460d8fae06fa24297f172fee1d1995vboxsync
9562e2d410460d8fae06fa24297f172fee1d1995vboxsync // events from IInternalSessionControl
6728a36898fd2be125a28e84d2115d19aa4923edvboxsync HRESULT onDVDDriveChange();
6728a36898fd2be125a28e84d2115d19aa4923edvboxsync HRESULT onFloppyDriveChange();
6728a36898fd2be125a28e84d2115d19aa4923edvboxsync HRESULT onNetworkAdapterChange (INetworkAdapter *aNetworkAdapter);
6728a36898fd2be125a28e84d2115d19aa4923edvboxsync HRESULT onSerialPortChange (ISerialPort *aSerialPort);
6728a36898fd2be125a28e84d2115d19aa4923edvboxsync HRESULT onParallelPortChange (IParallelPort *aParallelPort);
6728a36898fd2be125a28e84d2115d19aa4923edvboxsync HRESULT onVRDPServerChange();
9562e2d410460d8fae06fa24297f172fee1d1995vboxsync HRESULT onUSBControllerChange();
9562e2d410460d8fae06fa24297f172fee1d1995vboxsync HRESULT onSharedFolderChange (BOOL aGlobal);
9562e2d410460d8fae06fa24297f172fee1d1995vboxsync HRESULT onUSBDeviceAttach (IUSBDevice *aDevice, IVirtualBoxErrorInfo *aError, ULONG aMaskedIfs);
9562e2d410460d8fae06fa24297f172fee1d1995vboxsync HRESULT onUSBDeviceDetach (INPTR GUIDPARAM aId, IVirtualBoxErrorInfo *aError);
9562e2d410460d8fae06fa24297f172fee1d1995vboxsync HRESULT getGuestProperty (INPTR BSTR aKey, BSTR *aValue, ULONG64 *aTimestamp, BSTR *aFlags);
6728a36898fd2be125a28e84d2115d19aa4923edvboxsync HRESULT setGuestProperty (INPTR BSTR aKey, INPTR BSTR aValue, INPTR BSTR aFlags);
9562e2d410460d8fae06fa24297f172fee1d1995vboxsync HRESULT enumerateGuestProperties (INPTR BSTR aPatterns, ComSafeArrayOut(BSTR, aNames), ComSafeArrayOut(BSTR, aValues), ComSafeArrayOut(ULONG64, aTimestamps), ComSafeArrayOut(BSTR, aFlags));
9562e2d410460d8fae06fa24297f172fee1d1995vboxsync VMMDev *getVMMDev() { return mVMMDev; }
6728a36898fd2be125a28e84d2115d19aa4923edvboxsync AudioSniffer *getAudioSniffer () { return mAudioSniffer; }
6728a36898fd2be125a28e84d2115d19aa4923edvboxsync
6728a36898fd2be125a28e84d2115d19aa4923edvboxsync int VRDPClientLogon (uint32_t u32ClientId, const char *pszUser, const char *pszPassword, const char *pszDomain);
9562e2d410460d8fae06fa24297f172fee1d1995vboxsync void VRDPClientConnect (uint32_t u32ClientId);
9562e2d410460d8fae06fa24297f172fee1d1995vboxsync void VRDPClientDisconnect (uint32_t u32ClientId, uint32_t fu32Intercepted);
9562e2d410460d8fae06fa24297f172fee1d1995vboxsync void VRDPInterceptAudio (uint32_t u32ClientId);
9562e2d410460d8fae06fa24297f172fee1d1995vboxsync void VRDPInterceptUSB (uint32_t u32ClientId, void **ppvIntercept);
9562e2d410460d8fae06fa24297f172fee1d1995vboxsync void VRDPInterceptClipboard (uint32_t u32ClientId);
9562e2d410460d8fae06fa24297f172fee1d1995vboxsync
9562e2d410460d8fae06fa24297f172fee1d1995vboxsync void processRemoteUSBDevices (uint32_t u32ClientId, VRDPUSBDEVICEDESC *pDevList, uint32_t cbDevList);
9562e2d410460d8fae06fa24297f172fee1d1995vboxsync
9562e2d410460d8fae06fa24297f172fee1d1995vboxsync // callback callers (partly; for some events console callbacks are notified
9562e2d410460d8fae06fa24297f172fee1d1995vboxsync // directly from IInternalSessionControl event handlers declared above)
9562e2d410460d8fae06fa24297f172fee1d1995vboxsync void onMousePointerShapeChange(bool fVisible, bool fAlpha,
9562e2d410460d8fae06fa24297f172fee1d1995vboxsync uint32_t xHot, uint32_t yHot,
9562e2d410460d8fae06fa24297f172fee1d1995vboxsync uint32_t width, uint32_t height,
9562e2d410460d8fae06fa24297f172fee1d1995vboxsync void *pShape);
9562e2d410460d8fae06fa24297f172fee1d1995vboxsync void onMouseCapabilityChange (BOOL supportsAbsolute, BOOL needsHostCursor);
9562e2d410460d8fae06fa24297f172fee1d1995vboxsync void onStateChange (MachineState_T aMachineState);
9562e2d410460d8fae06fa24297f172fee1d1995vboxsync void onAdditionsStateChange();
6728a36898fd2be125a28e84d2115d19aa4923edvboxsync void onAdditionsOutdated();
9562e2d410460d8fae06fa24297f172fee1d1995vboxsync void onKeyboardLedsChange (bool fNumLock, bool fCapsLock, bool fScrollLock);
9562e2d410460d8fae06fa24297f172fee1d1995vboxsync void onUSBDeviceStateChange (IUSBDevice *aDevice, bool aAttached,
9562e2d410460d8fae06fa24297f172fee1d1995vboxsync IVirtualBoxErrorInfo *aError);
9562e2d410460d8fae06fa24297f172fee1d1995vboxsync void onRuntimeError (BOOL aFatal, INPTR BSTR aErrorID, INPTR BSTR aMessage);
9562e2d410460d8fae06fa24297f172fee1d1995vboxsync HRESULT onShowWindow (BOOL aCheck, BOOL *aCanShow, ULONG64 *aWinId);
6728a36898fd2be125a28e84d2115d19aa4923edvboxsync
6728a36898fd2be125a28e84d2115d19aa4923edvboxsync static const PDMDRVREG DrvStatusReg;
6728a36898fd2be125a28e84d2115d19aa4923edvboxsync
9562e2d410460d8fae06fa24297f172fee1d1995vboxsync void reportAuthLibraryError (const char *filename, int rc)
9562e2d410460d8fae06fa24297f172fee1d1995vboxsync {
9562e2d410460d8fae06fa24297f172fee1d1995vboxsync setError (E_FAIL, tr("Could not load the external authentication library '%s' (%Vrc)"), filename, rc);
9562e2d410460d8fae06fa24297f172fee1d1995vboxsync }
9562e2d410460d8fae06fa24297f172fee1d1995vboxsync
9562e2d410460d8fae06fa24297f172fee1d1995vboxsync // for VirtualBoxSupportErrorInfoImpl
9562e2d410460d8fae06fa24297f172fee1d1995vboxsync static const wchar_t *getComponentName() { return L"Console"; }
9562e2d410460d8fae06fa24297f172fee1d1995vboxsync
9562e2d410460d8fae06fa24297f172fee1d1995vboxsyncprivate:
9562e2d410460d8fae06fa24297f172fee1d1995vboxsync
9562e2d410460d8fae06fa24297f172fee1d1995vboxsync /**
6728a36898fd2be125a28e84d2115d19aa4923edvboxsync * Base template for AutoVMCaller and SaveVMPtr. Template arguments
ac153c99053f1edf42b00bf3a13475923bc4fcf1vboxsync * have the same meaning as arguments of Console::addVMCaller().
ac153c99053f1edf42b00bf3a13475923bc4fcf1vboxsync */
9562e2d410460d8fae06fa24297f172fee1d1995vboxsync template <bool taQuiet = false, bool taAllowNullVM = false>
9562e2d410460d8fae06fa24297f172fee1d1995vboxsync class AutoVMCallerBase
9562e2d410460d8fae06fa24297f172fee1d1995vboxsync {
9562e2d410460d8fae06fa24297f172fee1d1995vboxsync public:
9562e2d410460d8fae06fa24297f172fee1d1995vboxsync AutoVMCallerBase (Console *aThat) : mThat (aThat), mRC (S_OK)
9562e2d410460d8fae06fa24297f172fee1d1995vboxsync {
ac153c99053f1edf42b00bf3a13475923bc4fcf1vboxsync Assert (aThat);
6728a36898fd2be125a28e84d2115d19aa4923edvboxsync mRC = aThat->addVMCaller (taQuiet, taAllowNullVM);
6728a36898fd2be125a28e84d2115d19aa4923edvboxsync }
9562e2d410460d8fae06fa24297f172fee1d1995vboxsync ~AutoVMCallerBase()
9562e2d410460d8fae06fa24297f172fee1d1995vboxsync {
9562e2d410460d8fae06fa24297f172fee1d1995vboxsync if (SUCCEEDED (mRC))
9562e2d410460d8fae06fa24297f172fee1d1995vboxsync mThat->releaseVMCaller();
9562e2d410460d8fae06fa24297f172fee1d1995vboxsync }
9562e2d410460d8fae06fa24297f172fee1d1995vboxsync /** Decreases the number of callers before the instance is destroyed. */
6728a36898fd2be125a28e84d2115d19aa4923edvboxsync void release()
6728a36898fd2be125a28e84d2115d19aa4923edvboxsync {
6728a36898fd2be125a28e84d2115d19aa4923edvboxsync AssertReturnVoid (SUCCEEDED (mRC));
9562e2d410460d8fae06fa24297f172fee1d1995vboxsync mThat->releaseVMCaller();
9562e2d410460d8fae06fa24297f172fee1d1995vboxsync mRC = E_FAIL;
9562e2d410460d8fae06fa24297f172fee1d1995vboxsync }
9562e2d410460d8fae06fa24297f172fee1d1995vboxsync /** Restores the number of callers after by #release(). #rc() must be
9562e2d410460d8fae06fa24297f172fee1d1995vboxsync * rechecked to ensure the operation succeeded. */
9562e2d410460d8fae06fa24297f172fee1d1995vboxsync void add()
9562e2d410460d8fae06fa24297f172fee1d1995vboxsync {
9562e2d410460d8fae06fa24297f172fee1d1995vboxsync AssertReturnVoid (!SUCCEEDED (mRC));
9562e2d410460d8fae06fa24297f172fee1d1995vboxsync mRC = mThat->addVMCaller (taQuiet, taAllowNullVM);
9562e2d410460d8fae06fa24297f172fee1d1995vboxsync }
9562e2d410460d8fae06fa24297f172fee1d1995vboxsync /** Returns the result of Console::addVMCaller() */
9562e2d410460d8fae06fa24297f172fee1d1995vboxsync HRESULT rc() const { return mRC; }
9562e2d410460d8fae06fa24297f172fee1d1995vboxsync /** Shortcut to SUCCEEDED (rc()) */
9562e2d410460d8fae06fa24297f172fee1d1995vboxsync bool isOk() const { return SUCCEEDED (mRC); }
9562e2d410460d8fae06fa24297f172fee1d1995vboxsync protected:
9562e2d410460d8fae06fa24297f172fee1d1995vboxsync Console *mThat;
9562e2d410460d8fae06fa24297f172fee1d1995vboxsync HRESULT mRC;
9562e2d410460d8fae06fa24297f172fee1d1995vboxsync private:
9562e2d410460d8fae06fa24297f172fee1d1995vboxsync DECLARE_CLS_COPY_CTOR_ASSIGN_NOOP (AutoVMCallerBase)
9562e2d410460d8fae06fa24297f172fee1d1995vboxsync DECLARE_CLS_NEW_DELETE_NOOP (AutoVMCallerBase)
9562e2d410460d8fae06fa24297f172fee1d1995vboxsync };
6728a36898fd2be125a28e84d2115d19aa4923edvboxsync
6728a36898fd2be125a28e84d2115d19aa4923edvboxsync /**
9562e2d410460d8fae06fa24297f172fee1d1995vboxsync * Helper class that protects sections of code using the mpVM pointer by
9562e2d410460d8fae06fa24297f172fee1d1995vboxsync * automatically calling addVMCaller() on construction and
9562e2d410460d8fae06fa24297f172fee1d1995vboxsync * releaseVMCaller() on destruction. Intended for Console methods dealing
9562e2d410460d8fae06fa24297f172fee1d1995vboxsync * with mpVM. The usage pattern is:
9562e2d410460d8fae06fa24297f172fee1d1995vboxsync * <code>
6728a36898fd2be125a28e84d2115d19aa4923edvboxsync * AutoVMCaller autoVMCaller (this);
6728a36898fd2be125a28e84d2115d19aa4923edvboxsync * CheckComRCReturnRC (autoVMCaller.rc());
9562e2d410460d8fae06fa24297f172fee1d1995vboxsync * ...
9562e2d410460d8fae06fa24297f172fee1d1995vboxsync * VMR3ReqCall (mpVM, ...
9562e2d410460d8fae06fa24297f172fee1d1995vboxsync * </code>
6728a36898fd2be125a28e84d2115d19aa4923edvboxsync *
9562e2d410460d8fae06fa24297f172fee1d1995vboxsync * @note Temporarily locks the argument for writing.
9562e2d410460d8fae06fa24297f172fee1d1995vboxsync *
9562e2d410460d8fae06fa24297f172fee1d1995vboxsync * @sa SafeVMPtr, SafeVMPtrQuiet
9562e2d410460d8fae06fa24297f172fee1d1995vboxsync */
9562e2d410460d8fae06fa24297f172fee1d1995vboxsync typedef AutoVMCallerBase <false, false> AutoVMCaller;
6728a36898fd2be125a28e84d2115d19aa4923edvboxsync
9562e2d410460d8fae06fa24297f172fee1d1995vboxsync /**
9562e2d410460d8fae06fa24297f172fee1d1995vboxsync * Same as AutoVMCaller but doesn't set extended error info on failure.
9562e2d410460d8fae06fa24297f172fee1d1995vboxsync *
9562e2d410460d8fae06fa24297f172fee1d1995vboxsync * @note Temporarily locks the argument for writing.
6728a36898fd2be125a28e84d2115d19aa4923edvboxsync */
6728a36898fd2be125a28e84d2115d19aa4923edvboxsync typedef AutoVMCallerBase <true, false> AutoVMCallerQuiet;
6728a36898fd2be125a28e84d2115d19aa4923edvboxsync
9562e2d410460d8fae06fa24297f172fee1d1995vboxsync /**
9562e2d410460d8fae06fa24297f172fee1d1995vboxsync * Same as AutoVMCaller but allows a null VM pointer (to trigger an error
6728a36898fd2be125a28e84d2115d19aa4923edvboxsync * instead of assertion).
6728a36898fd2be125a28e84d2115d19aa4923edvboxsync *
6728a36898fd2be125a28e84d2115d19aa4923edvboxsync * @note Temporarily locks the argument for writing.
6728a36898fd2be125a28e84d2115d19aa4923edvboxsync */
9562e2d410460d8fae06fa24297f172fee1d1995vboxsync typedef AutoVMCallerBase <false, true> AutoVMCallerWeak;
9562e2d410460d8fae06fa24297f172fee1d1995vboxsync
9562e2d410460d8fae06fa24297f172fee1d1995vboxsync /**
9562e2d410460d8fae06fa24297f172fee1d1995vboxsync * Same as AutoVMCaller but doesn't set extended error info on failure
9562e2d410460d8fae06fa24297f172fee1d1995vboxsync * and allows a null VM pointer (to trigger an error instead of
9562e2d410460d8fae06fa24297f172fee1d1995vboxsync * assertion).
9562e2d410460d8fae06fa24297f172fee1d1995vboxsync *
6728a36898fd2be125a28e84d2115d19aa4923edvboxsync * @note Temporarily locks the argument for writing.
6728a36898fd2be125a28e84d2115d19aa4923edvboxsync */
6728a36898fd2be125a28e84d2115d19aa4923edvboxsync typedef AutoVMCallerBase <true, true> AutoVMCallerQuietWeak;
6728a36898fd2be125a28e84d2115d19aa4923edvboxsync
9562e2d410460d8fae06fa24297f172fee1d1995vboxsync /**
9562e2d410460d8fae06fa24297f172fee1d1995vboxsync * Base template for SaveVMPtr and SaveVMPtrQuiet.
9562e2d410460d8fae06fa24297f172fee1d1995vboxsync */
9562e2d410460d8fae06fa24297f172fee1d1995vboxsync template <bool taQuiet = false>
9562e2d410460d8fae06fa24297f172fee1d1995vboxsync class SafeVMPtrBase : public AutoVMCallerBase <taQuiet, true>
9562e2d410460d8fae06fa24297f172fee1d1995vboxsync {
9562e2d410460d8fae06fa24297f172fee1d1995vboxsync typedef AutoVMCallerBase <taQuiet, true> Base;
9562e2d410460d8fae06fa24297f172fee1d1995vboxsync public:
9562e2d410460d8fae06fa24297f172fee1d1995vboxsync SafeVMPtrBase (Console *aThat) : Base (aThat), mpVM (NULL)
9562e2d410460d8fae06fa24297f172fee1d1995vboxsync {
9562e2d410460d8fae06fa24297f172fee1d1995vboxsync if (SUCCEEDED (Base::mRC))
9562e2d410460d8fae06fa24297f172fee1d1995vboxsync mpVM = aThat->mpVM;
9562e2d410460d8fae06fa24297f172fee1d1995vboxsync }
9562e2d410460d8fae06fa24297f172fee1d1995vboxsync /** Smart SaveVMPtr to PVM cast operator */
6728a36898fd2be125a28e84d2115d19aa4923edvboxsync operator PVM() const { return mpVM; }
6728a36898fd2be125a28e84d2115d19aa4923edvboxsync /** Direct PVM access for printf()-like functions */
6728a36898fd2be125a28e84d2115d19aa4923edvboxsync PVM raw() const { return mpVM; }
6728a36898fd2be125a28e84d2115d19aa4923edvboxsync private:
9562e2d410460d8fae06fa24297f172fee1d1995vboxsync PVM mpVM;
9562e2d410460d8fae06fa24297f172fee1d1995vboxsync DECLARE_CLS_COPY_CTOR_ASSIGN_NOOP (SafeVMPtrBase)
6728a36898fd2be125a28e84d2115d19aa4923edvboxsync DECLARE_CLS_NEW_DELETE_NOOP (SafeVMPtrBase)
6728a36898fd2be125a28e84d2115d19aa4923edvboxsync };
9562e2d410460d8fae06fa24297f172fee1d1995vboxsync
9562e2d410460d8fae06fa24297f172fee1d1995vboxsyncpublic:
9562e2d410460d8fae06fa24297f172fee1d1995vboxsync
9562e2d410460d8fae06fa24297f172fee1d1995vboxsync /**
9562e2d410460d8fae06fa24297f172fee1d1995vboxsync * Helper class that safely manages the Console::mpVM pointer
9562e2d410460d8fae06fa24297f172fee1d1995vboxsync * by calling addVMCaller() on construction and releaseVMCaller() on
9562e2d410460d8fae06fa24297f172fee1d1995vboxsync * destruction. Intended for Console children. The usage pattern is:
9562e2d410460d8fae06fa24297f172fee1d1995vboxsync * <code>
9562e2d410460d8fae06fa24297f172fee1d1995vboxsync * Console::SaveVMPtr pVM (mParent);
9562e2d410460d8fae06fa24297f172fee1d1995vboxsync * CheckComRCReturnRC (pVM.rc());
9562e2d410460d8fae06fa24297f172fee1d1995vboxsync * ...
9562e2d410460d8fae06fa24297f172fee1d1995vboxsync * VMR3ReqCall (pVM, ...
9562e2d410460d8fae06fa24297f172fee1d1995vboxsync * ...
6728a36898fd2be125a28e84d2115d19aa4923edvboxsync * printf ("%p\n", pVM.raw());
9562e2d410460d8fae06fa24297f172fee1d1995vboxsync * </code>
9562e2d410460d8fae06fa24297f172fee1d1995vboxsync *
9562e2d410460d8fae06fa24297f172fee1d1995vboxsync * @note Temporarily locks the argument for writing.
9562e2d410460d8fae06fa24297f172fee1d1995vboxsync *
9562e2d410460d8fae06fa24297f172fee1d1995vboxsync * @sa SafeVMPtrQuiet, AutoVMCaller
9562e2d410460d8fae06fa24297f172fee1d1995vboxsync */
9562e2d410460d8fae06fa24297f172fee1d1995vboxsync typedef SafeVMPtrBase <false> SafeVMPtr;
9562e2d410460d8fae06fa24297f172fee1d1995vboxsync
9562e2d410460d8fae06fa24297f172fee1d1995vboxsync /**
9562e2d410460d8fae06fa24297f172fee1d1995vboxsync * A deviation of SaveVMPtr that doesn't set the error info on failure.
9562e2d410460d8fae06fa24297f172fee1d1995vboxsync * Intenede for pieces of code that don't need to return the VM access
9562e2d410460d8fae06fa24297f172fee1d1995vboxsync * failure to the caller. The usage pattern is:
9562e2d410460d8fae06fa24297f172fee1d1995vboxsync * <code>
9562e2d410460d8fae06fa24297f172fee1d1995vboxsync * Console::SaveVMPtrQuiet pVM (mParent);
9562e2d410460d8fae06fa24297f172fee1d1995vboxsync * if (pVM.rc())
9562e2d410460d8fae06fa24297f172fee1d1995vboxsync * VMR3ReqCall (pVM, ...
9562e2d410460d8fae06fa24297f172fee1d1995vboxsync * return S_OK;
9562e2d410460d8fae06fa24297f172fee1d1995vboxsync * </code>
9562e2d410460d8fae06fa24297f172fee1d1995vboxsync *
9562e2d410460d8fae06fa24297f172fee1d1995vboxsync * @note Temporarily locks the argument for writing.
9562e2d410460d8fae06fa24297f172fee1d1995vboxsync *
9562e2d410460d8fae06fa24297f172fee1d1995vboxsync * @sa SafeVMPtr, AutoVMCaller
9562e2d410460d8fae06fa24297f172fee1d1995vboxsync */
9562e2d410460d8fae06fa24297f172fee1d1995vboxsync typedef SafeVMPtrBase <true> SafeVMPtrQuiet;
9562e2d410460d8fae06fa24297f172fee1d1995vboxsync
9562e2d410460d8fae06fa24297f172fee1d1995vboxsync class SharedFolderData
9562e2d410460d8fae06fa24297f172fee1d1995vboxsync {
9562e2d410460d8fae06fa24297f172fee1d1995vboxsync public:
9562e2d410460d8fae06fa24297f172fee1d1995vboxsync SharedFolderData() {}
9562e2d410460d8fae06fa24297f172fee1d1995vboxsync SharedFolderData(Bstr aHostPath, BOOL aWritable)
9562e2d410460d8fae06fa24297f172fee1d1995vboxsync : mHostPath (aHostPath)
9562e2d410460d8fae06fa24297f172fee1d1995vboxsync , mWritable (aWritable) {}
9562e2d410460d8fae06fa24297f172fee1d1995vboxsync SharedFolderData(const SharedFolderData& aThat)
9562e2d410460d8fae06fa24297f172fee1d1995vboxsync : mHostPath (aThat.mHostPath)
9562e2d410460d8fae06fa24297f172fee1d1995vboxsync , mWritable (aThat.mWritable) {}
9562e2d410460d8fae06fa24297f172fee1d1995vboxsync Bstr mHostPath;
9562e2d410460d8fae06fa24297f172fee1d1995vboxsync BOOL mWritable;
9562e2d410460d8fae06fa24297f172fee1d1995vboxsync };
9562e2d410460d8fae06fa24297f172fee1d1995vboxsync typedef std::map <Bstr, ComObjPtr <SharedFolder> > SharedFolderMap;
9562e2d410460d8fae06fa24297f172fee1d1995vboxsync typedef std::map <Bstr, SharedFolderData> SharedFolderDataMap;
9562e2d410460d8fae06fa24297f172fee1d1995vboxsync
9562e2d410460d8fae06fa24297f172fee1d1995vboxsyncprivate:
9562e2d410460d8fae06fa24297f172fee1d1995vboxsync
9562e2d410460d8fae06fa24297f172fee1d1995vboxsync typedef std::list <ComObjPtr <OUSBDevice> > USBDeviceList;
9562e2d410460d8fae06fa24297f172fee1d1995vboxsync typedef std::list <ComObjPtr <RemoteUSBDevice> > RemoteUSBDeviceList;
9562e2d410460d8fae06fa24297f172fee1d1995vboxsync
9562e2d410460d8fae06fa24297f172fee1d1995vboxsync HRESULT addVMCaller (bool aQuiet = false, bool aAllowNullVM = false);
9562e2d410460d8fae06fa24297f172fee1d1995vboxsync void releaseVMCaller();
9562e2d410460d8fae06fa24297f172fee1d1995vboxsync
9562e2d410460d8fae06fa24297f172fee1d1995vboxsync HRESULT consoleInitReleaseLog (const ComPtr <IMachine> aMachine);
9562e2d410460d8fae06fa24297f172fee1d1995vboxsync
9562e2d410460d8fae06fa24297f172fee1d1995vboxsync HRESULT powerUp (IProgress **aProgress, bool aPaused);
9562e2d410460d8fae06fa24297f172fee1d1995vboxsync HRESULT powerDown (Progress *aProgress = NULL);
9562e2d410460d8fae06fa24297f172fee1d1995vboxsync
9562e2d410460d8fae06fa24297f172fee1d1995vboxsync HRESULT callTapSetupApplication(bool isStatic, RTFILE tapFD, Bstr &tapDevice,
9562e2d410460d8fae06fa24297f172fee1d1995vboxsync Bstr &tapSetupApplication);
9562e2d410460d8fae06fa24297f172fee1d1995vboxsync HRESULT attachToHostInterface(INetworkAdapter *networkAdapter);
9562e2d410460d8fae06fa24297f172fee1d1995vboxsync HRESULT detachFromHostInterface(INetworkAdapter *networkAdapter);
9562e2d410460d8fae06fa24297f172fee1d1995vboxsync HRESULT powerDownHostInterfaces();
9562e2d410460d8fae06fa24297f172fee1d1995vboxsync
9562e2d410460d8fae06fa24297f172fee1d1995vboxsync HRESULT setMachineState (MachineState_T aMachineState, bool aUpdateServer = true);
9562e2d410460d8fae06fa24297f172fee1d1995vboxsync HRESULT setMachineStateLocally (MachineState_T aMachineState)
9562e2d410460d8fae06fa24297f172fee1d1995vboxsync {
9562e2d410460d8fae06fa24297f172fee1d1995vboxsync return setMachineState (aMachineState, false /* aUpdateServer */);
9562e2d410460d8fae06fa24297f172fee1d1995vboxsync }
9562e2d410460d8fae06fa24297f172fee1d1995vboxsync
9562e2d410460d8fae06fa24297f172fee1d1995vboxsync HRESULT findSharedFolder (const BSTR aName,
9562e2d410460d8fae06fa24297f172fee1d1995vboxsync ComObjPtr <SharedFolder> &aSharedFolder,
9562e2d410460d8fae06fa24297f172fee1d1995vboxsync bool aSetError = false);
9562e2d410460d8fae06fa24297f172fee1d1995vboxsync
9562e2d410460d8fae06fa24297f172fee1d1995vboxsync HRESULT fetchSharedFolders (BOOL aGlobal);
9562e2d410460d8fae06fa24297f172fee1d1995vboxsync bool findOtherSharedFolder (INPTR BSTR aName,
9562e2d410460d8fae06fa24297f172fee1d1995vboxsync SharedFolderDataMap::const_iterator &aIt);
9562e2d410460d8fae06fa24297f172fee1d1995vboxsync
9562e2d410460d8fae06fa24297f172fee1d1995vboxsync HRESULT createSharedFolder (INPTR BSTR aName, SharedFolderData aData);
9562e2d410460d8fae06fa24297f172fee1d1995vboxsync HRESULT removeSharedFolder (INPTR BSTR aName);
9562e2d410460d8fae06fa24297f172fee1d1995vboxsync
9562e2d410460d8fae06fa24297f172fee1d1995vboxsync static DECLCALLBACK(int) configConstructor(PVM pVM, void *pvConsole);
9562e2d410460d8fae06fa24297f172fee1d1995vboxsync static DECLCALLBACK(void) vmstateChangeCallback(PVM aVM, VMSTATE aState,
9562e2d410460d8fae06fa24297f172fee1d1995vboxsync VMSTATE aOldState, void *aUser);
9562e2d410460d8fae06fa24297f172fee1d1995vboxsync HRESULT doDriveChange (const char *pszDevice, unsigned uInstance,
9562e2d410460d8fae06fa24297f172fee1d1995vboxsync unsigned uLun, DriveState_T eState,
9562e2d410460d8fae06fa24297f172fee1d1995vboxsync DriveState_T *peState, const char *pszPath,
9562e2d410460d8fae06fa24297f172fee1d1995vboxsync bool fPassthrough);
9562e2d410460d8fae06fa24297f172fee1d1995vboxsync static DECLCALLBACK(int) changeDrive (Console *pThis, const char *pszDevice,
9562e2d410460d8fae06fa24297f172fee1d1995vboxsync unsigned uInstance, unsigned uLun,
9562e2d410460d8fae06fa24297f172fee1d1995vboxsync DriveState_T eState, DriveState_T *peState,
9562e2d410460d8fae06fa24297f172fee1d1995vboxsync const char *pszPath, bool fPassthrough);
9562e2d410460d8fae06fa24297f172fee1d1995vboxsync
9562e2d410460d8fae06fa24297f172fee1d1995vboxsync#ifdef VBOX_WITH_USB
9562e2d410460d8fae06fa24297f172fee1d1995vboxsync HRESULT attachUSBDevice (IUSBDevice *aHostDevice, ULONG aMaskedIfs);
9562e2d410460d8fae06fa24297f172fee1d1995vboxsync HRESULT detachUSBDevice (USBDeviceList::iterator &aIt);
9562e2d410460d8fae06fa24297f172fee1d1995vboxsync
9562e2d410460d8fae06fa24297f172fee1d1995vboxsync static DECLCALLBACK(int)
9562e2d410460d8fae06fa24297f172fee1d1995vboxsync usbAttachCallback (Console *that, IUSBDevice *aHostDevice, PCRTUUID aUuid,
9562e2d410460d8fae06fa24297f172fee1d1995vboxsync bool aRemote, const char *aAddress, ULONG aMaskedIfs);
9562e2d410460d8fae06fa24297f172fee1d1995vboxsync static DECLCALLBACK(int)
9562e2d410460d8fae06fa24297f172fee1d1995vboxsync usbDetachCallback (Console *that, USBDeviceList::iterator *aIt, PCRTUUID aUuid);
9562e2d410460d8fae06fa24297f172fee1d1995vboxsync#endif
9562e2d410460d8fae06fa24297f172fee1d1995vboxsync
9562e2d410460d8fae06fa24297f172fee1d1995vboxsync static DECLCALLBACK (int)
9562e2d410460d8fae06fa24297f172fee1d1995vboxsync stateProgressCallback (PVM pVM, unsigned uPercent, void *pvUser);
9562e2d410460d8fae06fa24297f172fee1d1995vboxsync
9562e2d410460d8fae06fa24297f172fee1d1995vboxsync static DECLCALLBACK(void)
9562e2d410460d8fae06fa24297f172fee1d1995vboxsync setVMErrorCallback (PVM pVM, void *pvUser, int rc, RT_SRC_POS_DECL,
9562e2d410460d8fae06fa24297f172fee1d1995vboxsync const char *pszFormat, va_list args);
9562e2d410460d8fae06fa24297f172fee1d1995vboxsync
9562e2d410460d8fae06fa24297f172fee1d1995vboxsync static DECLCALLBACK(void)
9562e2d410460d8fae06fa24297f172fee1d1995vboxsync setVMRuntimeErrorCallback (PVM pVM, void *pvUser, bool fFatal,
9562e2d410460d8fae06fa24297f172fee1d1995vboxsync const char *pszErrorID,
9562e2d410460d8fae06fa24297f172fee1d1995vboxsync const char *pszFormat, va_list args);
9562e2d410460d8fae06fa24297f172fee1d1995vboxsync
9562e2d410460d8fae06fa24297f172fee1d1995vboxsync HRESULT captureUSBDevices (PVM pVM);
9562e2d410460d8fae06fa24297f172fee1d1995vboxsync void detachAllUSBDevices (bool aDone);
9562e2d410460d8fae06fa24297f172fee1d1995vboxsync
9562e2d410460d8fae06fa24297f172fee1d1995vboxsync static DECLCALLBACK (int) powerUpThread (RTTHREAD Thread, void *pvUser);
9562e2d410460d8fae06fa24297f172fee1d1995vboxsync static DECLCALLBACK (int) saveStateThread (RTTHREAD Thread, void *pvUser);
9562e2d410460d8fae06fa24297f172fee1d1995vboxsync static DECLCALLBACK (int) powerDownThread (RTTHREAD Thread, void *pvUser);
9562e2d410460d8fae06fa24297f172fee1d1995vboxsync
9562e2d410460d8fae06fa24297f172fee1d1995vboxsync static DECLCALLBACK(void *) drvStatus_QueryInterface(PPDMIBASE pInterface, PDMINTERFACE enmInterface);
9562e2d410460d8fae06fa24297f172fee1d1995vboxsync static DECLCALLBACK(void) drvStatus_UnitChanged(PPDMILEDCONNECTORS pInterface, unsigned iLUN);
9562e2d410460d8fae06fa24297f172fee1d1995vboxsync static DECLCALLBACK(void) drvStatus_Destruct(PPDMDRVINS pDrvIns);
9562e2d410460d8fae06fa24297f172fee1d1995vboxsync static DECLCALLBACK(int) drvStatus_Construct(PPDMDRVINS pDrvIns, PCFGMNODE pCfgHandle);
9562e2d410460d8fae06fa24297f172fee1d1995vboxsync
9562e2d410460d8fae06fa24297f172fee1d1995vboxsync int mcAudioRefs;
9562e2d410460d8fae06fa24297f172fee1d1995vboxsync volatile uint32_t mcVRDPClients;
9562e2d410460d8fae06fa24297f172fee1d1995vboxsync uint32_t mu32SingleRDPClientId; /* The id of a connected client in the single connection mode. */
9562e2d410460d8fae06fa24297f172fee1d1995vboxsync
9562e2d410460d8fae06fa24297f172fee1d1995vboxsync static const char *sSSMConsoleUnit;
9562e2d410460d8fae06fa24297f172fee1d1995vboxsync static uint32_t sSSMConsoleVer;
9562e2d410460d8fae06fa24297f172fee1d1995vboxsync
9562e2d410460d8fae06fa24297f172fee1d1995vboxsync HRESULT loadDataFromSavedState();
9562e2d410460d8fae06fa24297f172fee1d1995vboxsync
9562e2d410460d8fae06fa24297f172fee1d1995vboxsync static DECLCALLBACK(void) saveStateFileExec (PSSMHANDLE pSSM, void *pvUser);
9562e2d410460d8fae06fa24297f172fee1d1995vboxsync static DECLCALLBACK(int) loadStateFileExec (PSSMHANDLE pSSM, void *pvUser, uint32_t u32Version);
9562e2d410460d8fae06fa24297f172fee1d1995vboxsync
9562e2d410460d8fae06fa24297f172fee1d1995vboxsync#ifdef VBOX_WITH_GUEST_PROPS
9562e2d410460d8fae06fa24297f172fee1d1995vboxsync static DECLCALLBACK(int) doGuestPropNotification (void *pvExtension, uint32_t,
9562e2d410460d8fae06fa24297f172fee1d1995vboxsync void *pvParms, uint32_t cbParms);
9562e2d410460d8fae06fa24297f172fee1d1995vboxsync HRESULT doEnumerateGuestProperties (INPTR BSTR aPatterns,
9562e2d410460d8fae06fa24297f172fee1d1995vboxsync ComSafeArrayOut(BSTR, aNames),
9562e2d410460d8fae06fa24297f172fee1d1995vboxsync ComSafeArrayOut(BSTR, aValues),
9562e2d410460d8fae06fa24297f172fee1d1995vboxsync ComSafeArrayOut(ULONG64, aTimestamps),
9562e2d410460d8fae06fa24297f172fee1d1995vboxsync ComSafeArrayOut(BSTR, aFlags));
9562e2d410460d8fae06fa24297f172fee1d1995vboxsync#endif
9562e2d410460d8fae06fa24297f172fee1d1995vboxsync
9562e2d410460d8fae06fa24297f172fee1d1995vboxsync bool mSavedStateDataLoaded : 1;
9562e2d410460d8fae06fa24297f172fee1d1995vboxsync
9562e2d410460d8fae06fa24297f172fee1d1995vboxsync const ComPtr <IMachine> mMachine;
9562e2d410460d8fae06fa24297f172fee1d1995vboxsync const ComPtr <IInternalMachineControl> mControl;
9562e2d410460d8fae06fa24297f172fee1d1995vboxsync
9562e2d410460d8fae06fa24297f172fee1d1995vboxsync const ComPtr <IVRDPServer> mVRDPServer;
9562e2d410460d8fae06fa24297f172fee1d1995vboxsync const ComPtr <IDVDDrive> mDVDDrive;
9562e2d410460d8fae06fa24297f172fee1d1995vboxsync const ComPtr <IFloppyDrive> mFloppyDrive;
9562e2d410460d8fae06fa24297f172fee1d1995vboxsync
9562e2d410460d8fae06fa24297f172fee1d1995vboxsync ConsoleVRDPServer * const mConsoleVRDPServer;
9562e2d410460d8fae06fa24297f172fee1d1995vboxsync
9562e2d410460d8fae06fa24297f172fee1d1995vboxsync const ComObjPtr <Guest> mGuest;
9562e2d410460d8fae06fa24297f172fee1d1995vboxsync const ComObjPtr <Keyboard> mKeyboard;
9562e2d410460d8fae06fa24297f172fee1d1995vboxsync const ComObjPtr <Mouse> mMouse;
9562e2d410460d8fae06fa24297f172fee1d1995vboxsync const ComObjPtr <Display> mDisplay;
9562e2d410460d8fae06fa24297f172fee1d1995vboxsync const ComObjPtr <MachineDebugger> mDebugger;
9562e2d410460d8fae06fa24297f172fee1d1995vboxsync const ComObjPtr <RemoteDisplayInfo> mRemoteDisplayInfo;
9562e2d410460d8fae06fa24297f172fee1d1995vboxsync
9562e2d410460d8fae06fa24297f172fee1d1995vboxsync USBDeviceList mUSBDevices;
9562e2d410460d8fae06fa24297f172fee1d1995vboxsync RemoteUSBDeviceList mRemoteUSBDevices;
9562e2d410460d8fae06fa24297f172fee1d1995vboxsync
9562e2d410460d8fae06fa24297f172fee1d1995vboxsync SharedFolderMap mSharedFolders;
9562e2d410460d8fae06fa24297f172fee1d1995vboxsync SharedFolderDataMap mMachineSharedFolders;
9562e2d410460d8fae06fa24297f172fee1d1995vboxsync SharedFolderDataMap mGlobalSharedFolders;
9562e2d410460d8fae06fa24297f172fee1d1995vboxsync
9562e2d410460d8fae06fa24297f172fee1d1995vboxsync /** The VM instance handle. */
9562e2d410460d8fae06fa24297f172fee1d1995vboxsync PVM mpVM;
9562e2d410460d8fae06fa24297f172fee1d1995vboxsync /** Holds the number of "readonly" mpVM callers (users) */
9562e2d410460d8fae06fa24297f172fee1d1995vboxsync uint32_t mVMCallers;
9562e2d410460d8fae06fa24297f172fee1d1995vboxsync /** Semaphore posted when the number of mpVM callers drops to zero */
9562e2d410460d8fae06fa24297f172fee1d1995vboxsync RTSEMEVENT mVMZeroCallersSem;
9562e2d410460d8fae06fa24297f172fee1d1995vboxsync /** true when Console has entered the mpVM destruction phase */
9562e2d410460d8fae06fa24297f172fee1d1995vboxsync bool mVMDestroying : 1;
9562e2d410460d8fae06fa24297f172fee1d1995vboxsync /** true when power down is initiated by vmstateChangeCallback (EMT) */
9562e2d410460d8fae06fa24297f172fee1d1995vboxsync bool mVMPoweredOff : 1;
9562e2d410460d8fae06fa24297f172fee1d1995vboxsync
9562e2d410460d8fae06fa24297f172fee1d1995vboxsync /** The current DVD drive state in the VM.
9562e2d410460d8fae06fa24297f172fee1d1995vboxsync * This does not have to match the state maintained in the DVD. */
9562e2d410460d8fae06fa24297f172fee1d1995vboxsync DriveState_T meDVDState;
9562e2d410460d8fae06fa24297f172fee1d1995vboxsync /** The current Floppy drive state in the VM.
6728a36898fd2be125a28e84d2115d19aa4923edvboxsync * This does not have to match the state maintained in the Floppy. */
6728a36898fd2be125a28e84d2115d19aa4923edvboxsync DriveState_T meFloppyState;
6728a36898fd2be125a28e84d2115d19aa4923edvboxsync
6728a36898fd2be125a28e84d2115d19aa4923edvboxsync VMMDev * const mVMMDev;
9562e2d410460d8fae06fa24297f172fee1d1995vboxsync AudioSniffer * const mAudioSniffer;
6728a36898fd2be125a28e84d2115d19aa4923edvboxsync
6728a36898fd2be125a28e84d2115d19aa4923edvboxsync PPDMLED mapFDLeds[2];
9562e2d410460d8fae06fa24297f172fee1d1995vboxsync PPDMLED mapIDELeds[4];
9562e2d410460d8fae06fa24297f172fee1d1995vboxsync PPDMLED mapSATALeds[30];
9562e2d410460d8fae06fa24297f172fee1d1995vboxsync PPDMLED mapNetworkLeds[8];
9562e2d410460d8fae06fa24297f172fee1d1995vboxsync PPDMLED mapSharedFolderLed;
9562e2d410460d8fae06fa24297f172fee1d1995vboxsync PPDMLED mapUSBLed[2];
9562e2d410460d8fae06fa24297f172fee1d1995vboxsync#ifdef VBOX_WITH_UNIXY_TAP_NETWORKING
9562e2d410460d8fae06fa24297f172fee1d1995vboxsync Utf8Str maTAPDeviceName[8];
9562e2d410460d8fae06fa24297f172fee1d1995vboxsync RTFILE maTapFD[8];
9562e2d410460d8fae06fa24297f172fee1d1995vboxsync#endif
9562e2d410460d8fae06fa24297f172fee1d1995vboxsync
9562e2d410460d8fae06fa24297f172fee1d1995vboxsync bool mVMStateChangeCallbackDisabled;
9562e2d410460d8fae06fa24297f172fee1d1995vboxsync
9562e2d410460d8fae06fa24297f172fee1d1995vboxsync /* Local machine state value */
9562e2d410460d8fae06fa24297f172fee1d1995vboxsync MachineState_T mMachineState;
9562e2d410460d8fae06fa24297f172fee1d1995vboxsync
9562e2d410460d8fae06fa24297f172fee1d1995vboxsync typedef std::list <ComPtr <IConsoleCallback> > CallbackList;
9562e2d410460d8fae06fa24297f172fee1d1995vboxsync CallbackList mCallbacks;
9562e2d410460d8fae06fa24297f172fee1d1995vboxsync
9562e2d410460d8fae06fa24297f172fee1d1995vboxsync struct
9562e2d410460d8fae06fa24297f172fee1d1995vboxsync {
9562e2d410460d8fae06fa24297f172fee1d1995vboxsync /** OnMousePointerShapeChange() cache */
6728a36898fd2be125a28e84d2115d19aa4923edvboxsync struct
6728a36898fd2be125a28e84d2115d19aa4923edvboxsync {
9562e2d410460d8fae06fa24297f172fee1d1995vboxsync bool valid;
9562e2d410460d8fae06fa24297f172fee1d1995vboxsync bool visible;
9562e2d410460d8fae06fa24297f172fee1d1995vboxsync bool alpha;
6728a36898fd2be125a28e84d2115d19aa4923edvboxsync uint32_t xHot;
6728a36898fd2be125a28e84d2115d19aa4923edvboxsync uint32_t yHot;
9562e2d410460d8fae06fa24297f172fee1d1995vboxsync uint32_t width;
6728a36898fd2be125a28e84d2115d19aa4923edvboxsync uint32_t height;
6728a36898fd2be125a28e84d2115d19aa4923edvboxsync BYTE *shape;
6728a36898fd2be125a28e84d2115d19aa4923edvboxsync size_t shapeSize;
6728a36898fd2be125a28e84d2115d19aa4923edvboxsync }
9562e2d410460d8fae06fa24297f172fee1d1995vboxsync mpsc;
6728a36898fd2be125a28e84d2115d19aa4923edvboxsync
9562e2d410460d8fae06fa24297f172fee1d1995vboxsync /** OnMouseCapabilityChange() cache */
9562e2d410460d8fae06fa24297f172fee1d1995vboxsync struct
6728a36898fd2be125a28e84d2115d19aa4923edvboxsync {
6728a36898fd2be125a28e84d2115d19aa4923edvboxsync bool valid;
6728a36898fd2be125a28e84d2115d19aa4923edvboxsync BOOL supportsAbsolute;
6728a36898fd2be125a28e84d2115d19aa4923edvboxsync BOOL needsHostCursor;
ac153c99053f1edf42b00bf3a13475923bc4fcf1vboxsync }
9562e2d410460d8fae06fa24297f172fee1d1995vboxsync mcc;
ac153c99053f1edf42b00bf3a13475923bc4fcf1vboxsync
9562e2d410460d8fae06fa24297f172fee1d1995vboxsync /** OnKeyboardLedsChange() cache */
9562e2d410460d8fae06fa24297f172fee1d1995vboxsync struct
9562e2d410460d8fae06fa24297f172fee1d1995vboxsync {
9562e2d410460d8fae06fa24297f172fee1d1995vboxsync bool valid;
9562e2d410460d8fae06fa24297f172fee1d1995vboxsync bool numLock;
9562e2d410460d8fae06fa24297f172fee1d1995vboxsync bool capsLock;
9562e2d410460d8fae06fa24297f172fee1d1995vboxsync bool scrollLock;
9562e2d410460d8fae06fa24297f172fee1d1995vboxsync }
9562e2d410460d8fae06fa24297f172fee1d1995vboxsync klc;
9562e2d410460d8fae06fa24297f172fee1d1995vboxsync }
9562e2d410460d8fae06fa24297f172fee1d1995vboxsync mCallbackData;
9562e2d410460d8fae06fa24297f172fee1d1995vboxsync
9562e2d410460d8fae06fa24297f172fee1d1995vboxsync friend struct VMTask;
9562e2d410460d8fae06fa24297f172fee1d1995vboxsync};
9562e2d410460d8fae06fa24297f172fee1d1995vboxsync
9562e2d410460d8fae06fa24297f172fee1d1995vboxsync#endif // ____H_CONSOLEIMPL
9562e2d410460d8fae06fa24297f172fee1d1995vboxsync