ConsoleImpl.h revision dd27007552cf908dc60cc544981d059beaedfab6
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync/** @file
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync *
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync * VBox Console COM Class definition
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync */
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync/*
1c94c0a63ba68be1a7b2c640e70d7a06464e4fcavboxsync * Copyright (C) 2006 InnoTek Systemberatung GmbH
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync *
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync * This file is part of VirtualBox Open Source Edition (OSE), as
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync * available from http://www.virtualbox.org. This file is free software;
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync * you can redistribute it and/or modify it under the terms of the GNU
a16eb14ad7a4b5ef91ddc22d3e8e92d930f736fcvboxsync * General Public License as published by the Free Software Foundation,
a16eb14ad7a4b5ef91ddc22d3e8e92d930f736fcvboxsync * in version 2 as it comes in the "COPYING" file of the VirtualBox OSE
a16eb14ad7a4b5ef91ddc22d3e8e92d930f736fcvboxsync * distribution. VirtualBox OSE is distributed in the hope that it will
a16eb14ad7a4b5ef91ddc22d3e8e92d930f736fcvboxsync * be useful, but WITHOUT ANY WARRANTY of any kind.
1c94c0a63ba68be1a7b2c640e70d7a06464e4fcavboxsync *
1c94c0a63ba68be1a7b2c640e70d7a06464e4fcavboxsync * If you received this file as part of a commercial VirtualBox
1c94c0a63ba68be1a7b2c640e70d7a06464e4fcavboxsync * distribution, then only the terms of your commercial VirtualBox
1c94c0a63ba68be1a7b2c640e70d7a06464e4fcavboxsync * license agreement apply instead of the previous paragraph.
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync */
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync#ifndef ____H_CONSOLEIMPL
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync#define ____H_CONSOLEIMPL
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync#include "VirtualBoxBase.h"
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync#include "ProgressImpl.h"
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsyncclass Guest;
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsyncclass Keyboard;
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsyncclass Mouse;
7e960d3a0a8a3a84d7aba2cca45d72b1c31cc97bvboxsyncclass Display;
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsyncclass MachineDebugger;
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsyncclass OUSBDevice;
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsyncclass RemoteUSBDevice;
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsyncclass SharedFolder;
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsyncclass RemoteDisplayInfo;
61fa69e2bc9fc9e7490feed1c020273f3ddb238dvboxsyncclass AudioSniffer;
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsyncclass ConsoleVRDPServer;
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsyncclass VMMDev;
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync#include <VBox/vrdpapi.h>
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync#include <VBox/pdm.h>
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsyncstruct VUSBIRHCONFIG;
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsynctypedef struct VUSBIRHCONFIG *PVUSBIRHCONFIG;
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync#include <list>
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync// defines
223cf005b18af2c21352a70693ebaf0582f68ebcvboxsync///////////////////////////////////////////////////////////////////////////////
223cf005b18af2c21352a70693ebaf0582f68ebcvboxsync
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync/**
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync * Checks the availability of the underlying VM device driver corresponding
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync * to the COM interface (IKeyboard, IMouse, IDisplay, etc.). When the driver is
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync * not available (NULL), sets error info and returns returns E_ACCESSDENIED.
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync * The translatable error message is defined in null context.
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync *
afed5ab737f4aacfae3fe73776f40e989190a7cavboxsync * Intended to used only within Console children (i,e. Keyboard, Mouse,
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync * Display, etc.).
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync *
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync * @param drv driver pointer to check (compare it with NULL)
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync */
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync#define CHECK_CONSOLE_DRV(drv) \
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync do { \
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync if (!(drv)) \
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync return setError (E_ACCESSDENIED, tr ("The console is not powered up")); \
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync } while (0)
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync/** @def VBOX_WITH_UNIXY_TAP_NETWORKING
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync * Unixy style TAP networking. This is defined in the Makefile since it's also
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync * used by NetworkAdapterImpl.h/cpp.
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync */
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync#ifdef __DOXYGEN__
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync# define VBOX_WITH_UNIXY_TAP_NETWORKING
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync#endif
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync// Console
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync///////////////////////////////////////////////////////////////////////////////
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync/** IConsole implementation class */
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsyncclass ATL_NO_VTABLE Console :
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync public VirtualBoxBaseWithChildrenNEXT,
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync public VirtualBoxSupportErrorInfoImpl <Console, IConsole>,
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync public VirtualBoxSupportTranslation <Console>,
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync public IConsole
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync{
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync Q_OBJECT
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync
7e960d3a0a8a3a84d7aba2cca45d72b1c31cc97bvboxsyncpublic:
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync DECLARE_NOT_AGGREGATABLE(Console)
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync DECLARE_PROTECT_FINAL_CONSTRUCT()
726fc44ad0bd65a178ad4c3ab46ebd6cd3208e99vboxsync
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync BEGIN_COM_MAP(Console)
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync COM_INTERFACE_ENTRY(ISupportErrorInfo)
726fc44ad0bd65a178ad4c3ab46ebd6cd3208e99vboxsync COM_INTERFACE_ENTRY(IConsole)
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync END_COM_MAP()
726fc44ad0bd65a178ad4c3ab46ebd6cd3208e99vboxsync
726fc44ad0bd65a178ad4c3ab46ebd6cd3208e99vboxsync NS_DECL_ISUPPORTS
726fc44ad0bd65a178ad4c3ab46ebd6cd3208e99vboxsync
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync Console();
726fc44ad0bd65a178ad4c3ab46ebd6cd3208e99vboxsync ~Console();
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync
7e960d3a0a8a3a84d7aba2cca45d72b1c31cc97bvboxsync HRESULT FinalConstruct();
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync void FinalRelease();
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync
3080f6c0871099df43a4e91b31894d9c2b1369a8vboxsync // public initializers/uninitializers for internal purposes only
3080f6c0871099df43a4e91b31894d9c2b1369a8vboxsync HRESULT init (IMachine *aMachine, IInternalMachineControl *aControl);
3080f6c0871099df43a4e91b31894d9c2b1369a8vboxsync void uninit();
3080f6c0871099df43a4e91b31894d9c2b1369a8vboxsync
3080f6c0871099df43a4e91b31894d9c2b1369a8vboxsync // IConsole properties
3080f6c0871099df43a4e91b31894d9c2b1369a8vboxsync STDMETHOD(COMGETTER(Machine)) (IMachine **aMachine);
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync STDMETHOD(COMGETTER(State)) (MachineState_T *aMachineState);
726fc44ad0bd65a178ad4c3ab46ebd6cd3208e99vboxsync STDMETHOD(COMGETTER(Guest)) (IGuest **aGuest);
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync STDMETHOD(COMGETTER(Keyboard)) (IKeyboard **aKeyboard);
fdea543f71872a3ec3909536a4fce37ab7aa3a8bvboxsync STDMETHOD(COMGETTER(Mouse)) (IMouse **aMouse);
726fc44ad0bd65a178ad4c3ab46ebd6cd3208e99vboxsync STDMETHOD(COMGETTER(Display)) (IDisplay **aDisplay);
fdea543f71872a3ec3909536a4fce37ab7aa3a8bvboxsync STDMETHOD(COMGETTER(Debugger)) (IMachineDebugger **aDebugger);
726fc44ad0bd65a178ad4c3ab46ebd6cd3208e99vboxsync STDMETHOD(COMGETTER(USBDevices)) (IUSBDeviceCollection **aUSBDevices);
fdea543f71872a3ec3909536a4fce37ab7aa3a8bvboxsync STDMETHOD(COMGETTER(RemoteUSBDevices)) (IHostUSBDeviceCollection **aRemoteUSBDevices);
726fc44ad0bd65a178ad4c3ab46ebd6cd3208e99vboxsync STDMETHOD(COMGETTER(RemoteDisplayInfo)) (IRemoteDisplayInfo **aRemoteDisplayInfo);
fdea543f71872a3ec3909536a4fce37ab7aa3a8bvboxsync STDMETHOD(COMGETTER(SharedFolders)) (ISharedFolderCollection **aSharedFolders);
726fc44ad0bd65a178ad4c3ab46ebd6cd3208e99vboxsync
8f7bc6ad2b7bbcb4b3b96248cd2478e45f2e3b88vboxsync // IConsole methods
726fc44ad0bd65a178ad4c3ab46ebd6cd3208e99vboxsync STDMETHOD(PowerUp) (IProgress **aProgress);
3080f6c0871099df43a4e91b31894d9c2b1369a8vboxsync STDMETHOD(PowerDown)();
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync STDMETHOD(Reset)();
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync STDMETHOD(Pause)();
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync STDMETHOD(Resume)();
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync STDMETHOD(PowerButton)();
50df3da42ff6589b0ecc4f50f2288811bc370186vboxsync STDMETHOD(SaveState) (IProgress **aProgress);
50df3da42ff6589b0ecc4f50f2288811bc370186vboxsync STDMETHOD(DiscardSavedState)();
50df3da42ff6589b0ecc4f50f2288811bc370186vboxsync STDMETHOD(GetDeviceActivity) (DeviceType_T aDeviceType,
50df3da42ff6589b0ecc4f50f2288811bc370186vboxsync DeviceActivity_T *aDeviceActivity);
50df3da42ff6589b0ecc4f50f2288811bc370186vboxsync STDMETHOD(AttachUSBDevice) (INPTR GUIDPARAM aId);
3080f6c0871099df43a4e91b31894d9c2b1369a8vboxsync STDMETHOD(DetachUSBDevice) (INPTR GUIDPARAM aId, IUSBDevice **aDevice);
3080f6c0871099df43a4e91b31894d9c2b1369a8vboxsync STDMETHOD(CreateSharedFolder) (INPTR BSTR aName, INPTR BSTR aHostPath);
3080f6c0871099df43a4e91b31894d9c2b1369a8vboxsync STDMETHOD(RemoveSharedFolder) (INPTR BSTR aName);
3080f6c0871099df43a4e91b31894d9c2b1369a8vboxsync STDMETHOD(TakeSnapshot) (INPTR BSTR aName, INPTR BSTR aDescription,
3080f6c0871099df43a4e91b31894d9c2b1369a8vboxsync IProgress **aProgress);
3080f6c0871099df43a4e91b31894d9c2b1369a8vboxsync STDMETHOD(DiscardSnapshot) (INPTR GUIDPARAM aId, IProgress **aProgress);
3080f6c0871099df43a4e91b31894d9c2b1369a8vboxsync STDMETHOD(DiscardCurrentState) (IProgress **aProgress);
3080f6c0871099df43a4e91b31894d9c2b1369a8vboxsync STDMETHOD(DiscardCurrentSnapshotAndState) (IProgress **aProgress);
3080f6c0871099df43a4e91b31894d9c2b1369a8vboxsync STDMETHOD(RegisterCallback) (IConsoleCallback *aCallback);
3080f6c0871099df43a4e91b31894d9c2b1369a8vboxsync STDMETHOD(UnregisterCallback)(IConsoleCallback *aCallback);
3080f6c0871099df43a4e91b31894d9c2b1369a8vboxsync
50df3da42ff6589b0ecc4f50f2288811bc370186vboxsync // public methods for internal purposes only
726fc44ad0bd65a178ad4c3ab46ebd6cd3208e99vboxsync
50df3da42ff6589b0ecc4f50f2288811bc370186vboxsync /*
50df3da42ff6589b0ecc4f50f2288811bc370186vboxsync * Note: the following methods do not increase refcount. intended to be
726fc44ad0bd65a178ad4c3ab46ebd6cd3208e99vboxsync * called only by the VM execution thread.
50df3da42ff6589b0ecc4f50f2288811bc370186vboxsync */
50df3da42ff6589b0ecc4f50f2288811bc370186vboxsync
726fc44ad0bd65a178ad4c3ab46ebd6cd3208e99vboxsync Guest *getGuest() { return mGuest; }
50df3da42ff6589b0ecc4f50f2288811bc370186vboxsync Keyboard *getKeyboard() { return mKeyboard; }
50df3da42ff6589b0ecc4f50f2288811bc370186vboxsync Mouse *getMouse() { return mMouse; }
726fc44ad0bd65a178ad4c3ab46ebd6cd3208e99vboxsync Display *getDisplay() { return mDisplay; }
50df3da42ff6589b0ecc4f50f2288811bc370186vboxsync MachineDebugger *getMachineDebugger() { return mDebugger; }
50df3da42ff6589b0ecc4f50f2288811bc370186vboxsync
726fc44ad0bd65a178ad4c3ab46ebd6cd3208e99vboxsync const ComPtr <IMachine> &machine() { return mMachine; }
50df3da42ff6589b0ecc4f50f2288811bc370186vboxsync
50df3da42ff6589b0ecc4f50f2288811bc370186vboxsync /** Method is called only from ConsoleVRDPServer */
726fc44ad0bd65a178ad4c3ab46ebd6cd3208e99vboxsync IVRDPServer *getVRDPServer() { return mVRDPServer; }
50df3da42ff6589b0ecc4f50f2288811bc370186vboxsync
26824086a3f6b36cd911058f1d9b4c0b944706fbvboxsync ConsoleVRDPServer *consoleVRDPServer() { return mConsoleVRDPServer; }
26824086a3f6b36cd911058f1d9b4c0b944706fbvboxsync
26824086a3f6b36cd911058f1d9b4c0b944706fbvboxsync HRESULT updateMachineState (MachineState_T aMachineState);
68ef804c4ec232c58e2c03c8fc6afe3765c5c0d1vboxsync
68ef804c4ec232c58e2c03c8fc6afe3765c5c0d1vboxsync // events from IInternalSessionControl
68ef804c4ec232c58e2c03c8fc6afe3765c5c0d1vboxsync HRESULT onDVDDriveChange();
3080f6c0871099df43a4e91b31894d9c2b1369a8vboxsync HRESULT onFloppyDriveChange();
50df3da42ff6589b0ecc4f50f2288811bc370186vboxsync HRESULT onNetworkAdapterChange(INetworkAdapter *networkAdapter);
50df3da42ff6589b0ecc4f50f2288811bc370186vboxsync HRESULT onVRDPServerChange();
50df3da42ff6589b0ecc4f50f2288811bc370186vboxsync HRESULT onUSBControllerChange();
50df3da42ff6589b0ecc4f50f2288811bc370186vboxsync HRESULT onUSBDeviceAttach(IUSBDevice *aDevice);
26824086a3f6b36cd911058f1d9b4c0b944706fbvboxsync HRESULT onUSBDeviceDetach(INPTR GUIDPARAM aId);
26824086a3f6b36cd911058f1d9b4c0b944706fbvboxsync
50df3da42ff6589b0ecc4f50f2288811bc370186vboxsync VMMDev *getVMMDev() { return mVMMDev; }
b8aaccdbdd143967110d499670605dd7ff6ecc72vboxsync AudioSniffer *getAudioSniffer () { return mAudioSniffer; }
50df3da42ff6589b0ecc4f50f2288811bc370186vboxsync
50df3da42ff6589b0ecc4f50f2288811bc370186vboxsync static VRDPSERVERCALLBACK *getVrdpServerCallback () { return &sVrdpServerCallback; };
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync
7e960d3a0a8a3a84d7aba2cca45d72b1c31cc97bvboxsync#ifdef VRDP_MC
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync void processRemoteUSBDevices (uint32_t u32ClientId, VRDPUSBDEVICEDESC *pDevList, uint32_t cbDevList);
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync#else
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync void processRemoteUSBDevices (VRDPUSBDEVICEDESC *pDevList, uint32_t cbDevList);
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync#endif /* VRDP_MC */
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync // callback callers
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync void onMousePointerShapeChange(bool fVisible, bool fAlpha,
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync uint32_t xHot, uint32_t yHot,
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync uint32_t width, uint32_t height,
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync void *pShape);
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync void onMouseCapabilityChange (BOOL supportsAbsolute, BOOL needsHostCursor);
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync void onStateChange (MachineState_T aMachineState);
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync void onAdditionsStateChange();
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync void onAdditionsOutdated();
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync void onKeyboardLedsChange (bool fNumLock, bool fCapsLock, bool fScrollLock);
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync void onRuntimeError (BOOL aFatal, INPTR BSTR aErrorID, INPTR BSTR aMessage);
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync static const PDMDRVREG DrvStatusReg;
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync void reportAuthLibraryError (const char *filename, int rc)
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync {
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync setError (E_FAIL, tr("Could not load the external authentication library '%s' (%Vrc)"), filename, rc);
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync }
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync // for VirtualBoxSupportErrorInfoImpl
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync static const wchar_t *getComponentName() { return L"Console"; }
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsyncprivate:
b1c3cdef473df2fbc621d5da81acc82dbfb8a11avboxsync
a11c569636fa6838bd423f4631a9660a5a84204bvboxsync /**
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync * Base template for AutoVMCaller and SaveVMPtr. Template arguments
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync * have the same meaning as arguments of Console::addVMCaller().
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync */
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync template <bool taQuiet = false, bool taAllowNullVM = false>
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync class AutoVMCallerBase
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync {
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync public:
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync AutoVMCallerBase (Console *aThat) : mThat (aThat), mRC (S_OK)
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync {
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync Assert (aThat);
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync mRC = aThat->addVMCaller (taQuiet, taAllowNullVM);
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync }
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync ~AutoVMCallerBase()
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync {
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync if (SUCCEEDED (mRC))
3ecf9412133496b2aeb090cfd33a286404ec59fbvboxsync mThat->releaseVMCaller();
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync }
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync /** Decreases the number of callers before the instance is destroyed. */
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync void release()
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync {
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync AssertReturnVoid (SUCCEEDED (mRC));
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync mThat->releaseVMCaller();
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync mRC = E_FAIL;
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync }
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync /** Restores the number of callers after by #release(). #rc() must be
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync * rechecked to ensure the operation succeeded. */
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync void add()
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync {
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync AssertReturnVoid (!SUCCEEDED (mRC));
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync mRC = mThat->addVMCaller (taQuiet, taAllowNullVM);
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync }
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync /** Returns the result of Console::addVMCaller() */
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync HRESULT rc() const { return mRC; }
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync /** Shortcut to SUCCEEDED (rc()) */
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync bool isOk() const { return SUCCEEDED (mRC); }
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync protected:
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync Console *mThat;
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync HRESULT mRC;
aaeb2e2f6ed5b164f1dec9a16a7adeb84f64cf31vboxsync private:
223cf005b18af2c21352a70693ebaf0582f68ebcvboxsync DECLARE_CLS_COPY_CTOR_ASSIGN_NOOP (AutoVMCallerBase)
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync DECLARE_CLS_NEW_DELETE_NOOP (AutoVMCallerBase)
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync };
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync /**
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync * Helper class that protects sections of code using the mpVM pointer by
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync * automatically calling addVMCaller() on construction and
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync * releaseVMCaller() on destruction. Intended for Console methods dealing
aaeb2e2f6ed5b164f1dec9a16a7adeb84f64cf31vboxsync * with mpVM. The usage pattern is:
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync * <code>
aaeb2e2f6ed5b164f1dec9a16a7adeb84f64cf31vboxsync * AutoVMCaller autoVMCaller (this);
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync * CheckComRCReturnRC (autoVMCaller.rc());
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync * ...
7e960d3a0a8a3a84d7aba2cca45d72b1c31cc97bvboxsync * VMR3ReqCall (mpVM, ...
78a205e3fc6719d59e8c561b3d287d3a4f879852vboxsync * </code>
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync *
50df3da42ff6589b0ecc4f50f2288811bc370186vboxsync * @sa SafeVMPtr, SafeVMPtrQuiet
50df3da42ff6589b0ecc4f50f2288811bc370186vboxsync */
6b022885f2cb6a55167609edecd89570cd80001dvboxsync typedef AutoVMCallerBase <false, false> AutoVMCaller;
50df3da42ff6589b0ecc4f50f2288811bc370186vboxsync
50df3da42ff6589b0ecc4f50f2288811bc370186vboxsync /**
50df3da42ff6589b0ecc4f50f2288811bc370186vboxsync * Base template for SaveVMPtr and SaveVMPtrQuiet.
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync */
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync template <bool taQuiet = false>
6b022885f2cb6a55167609edecd89570cd80001dvboxsync class SafeVMPtrBase : public AutoVMCallerBase <taQuiet, true>
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync {
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync typedef AutoVMCallerBase <taQuiet, true> Base;
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync public:
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync SafeVMPtrBase (Console *aThat) : Base (aThat), mpVM (NULL)
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync {
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync if (SUCCEEDED (Base::mRC))
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync mpVM = aThat->mpVM;
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync }
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync /** Smart SaveVMPtr to PVM cast operator */
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync operator PVM() const { return mpVM; }
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync /** Direct PVM access for printf()-like functions */
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync PVM raw() const { return mpVM; }
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync private:
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync PVM mpVM;
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync DECLARE_CLS_COPY_CTOR_ASSIGN_NOOP (SafeVMPtrBase)
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync DECLARE_CLS_NEW_DELETE_NOOP (SafeVMPtrBase)
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync };
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsyncpublic:
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync /**
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync * Helper class that safely manages the Console::mpVM pointer
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync * by calling addVMCaller() on construction and releaseVMCaller() on
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync * destruction. Intended for Console children. The usage pattern is:
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync * <code>
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync * Console::SaveVMPtr pVM (mParent);
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync * CheckComRCReturnRC (pVM.rc());
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync * ...
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync * VMR3ReqCall (pVM, ...
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync * ...
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync * printf ("%p\n", pVM.raw());
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync * </code>
e08de24d4792d31b7f2aac29db5cb8840d940009vboxsync *
9782b553bdb12385214a3ac596aff1476bcb7cbdvboxsync * @sa SafeVMPtrQuiet, AutoVMCaller
8a132edc1577cbe2a19cd778c1b2bea6ae5e8515vboxsync */
b1c3cdef473df2fbc621d5da81acc82dbfb8a11avboxsync typedef SafeVMPtrBase <false> SafeVMPtr;
8a132edc1577cbe2a19cd778c1b2bea6ae5e8515vboxsync
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync /**
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync * A deviation of SaveVMPtr that doesn't set the error info on failure.
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync * Intenede for pieces of code that don't need to return the VM access
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync * failure to the caller. The usage pattern is:
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync * <code>
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync * Console::SaveVMPtrQuiet pVM (mParent);
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync * if (pVM.rc())
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync * VMR3ReqCall (pVM, ...
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync * return S_OK;
f9147fe1eaa4e35287f8f39282c7f92f0d7de0b7vboxsync * </code>
585f64d6f624f9e683321dabeb21b0eb2e6aa473vboxsync *
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync * @sa SafeVMPtr, AutoVMCaller
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync */
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync typedef SafeVMPtrBase <true> SafeVMPtrQuiet;
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsyncprivate:
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync
da936e0446fb2b56b813d5d938f1dfc6e4bf8b13vboxsync typedef std::list <ComObjPtr <OUSBDevice> > USBDeviceList;
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync typedef std::list <ComObjPtr <RemoteUSBDevice> > RemoteUSBDeviceList;
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync typedef std::list <ComObjPtr <SharedFolder> > SharedFolderList;
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync HRESULT addVMCaller (bool aQuiet = false, bool aAllowNullVM = false);
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync void releaseVMCaller();
79b07d7ae28b916539c6397e010a5cc05e300551vboxsync
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync HRESULT powerDown();
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync HRESULT callTapSetupApplication(Bstr &tapDevice, Bstr &tapSetupApplication);
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync HRESULT attachToHostInterface(INetworkAdapter *networkAdapter);
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync HRESULT detachFromHostInterface(INetworkAdapter *networkAdapter);
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync HRESULT powerDownHostInterfaces();
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync HRESULT setMachineState (MachineState_T aMachineState, bool aUpdateServer = true);
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync HRESULT setMachineStateLocally (MachineState_T aMachineState)
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync {
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync return setMachineState (aMachineState, false /* aUpdateServer */);
533ffcb943c4af2c5fe6385d816d0ba3eda9383bvboxsync }
da936e0446fb2b56b813d5d938f1dfc6e4bf8b13vboxsync
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync HRESULT findSharedFolder (const BSTR aName,
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync ComObjPtr <SharedFolder> &aSharedFolder,
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync bool aSetError = false);
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync static DECLCALLBACK(int) configConstructor(PVM pVM, void *pvConsole);
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync static DECLCALLBACK(void) vmstateChangeCallback(PVM aVM, VMSTATE aState,
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync VMSTATE aOldState, void *aUser);
79b07d7ae28b916539c6397e010a5cc05e300551vboxsync HRESULT doDriveChange (const char *pszDevice, unsigned uInstance,
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync unsigned uLun, DriveState_T eState,
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync DriveState_T *peState, const char *pszPath,
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync bool fPassthrough);
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync static DECLCALLBACK(int) changeDrive (Console *pThis, const char *pszDevice,
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync unsigned uInstance, unsigned uLun,
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync DriveState_T eState, DriveState_T *peState,
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync const char *pszPath, bool fPassthrough);
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync
533ffcb943c4af2c5fe6385d816d0ba3eda9383bvboxsync HRESULT attachUSBDevice (IUSBDevice *aHostDevice, bool aManual,
533ffcb943c4af2c5fe6385d816d0ba3eda9383bvboxsync PVUSBIRHCONFIG aConfig);
533ffcb943c4af2c5fe6385d816d0ba3eda9383bvboxsync
00599f6d39cc25ca39845c2433cd75de7b9f6971vboxsync static DECLCALLBACK(int)
00599f6d39cc25ca39845c2433cd75de7b9f6971vboxsync usbAttachCallback (Console *that, IUSBDevice *aHostDevice,
00599f6d39cc25ca39845c2433cd75de7b9f6971vboxsync PVUSBIRHCONFIG aConfig, PCRTUUID aUuid, bool aRemote,
00599f6d39cc25ca39845c2433cd75de7b9f6971vboxsync const char *aAddress, void *aRemoteBackend);
533ffcb943c4af2c5fe6385d816d0ba3eda9383bvboxsync static DECLCALLBACK(int)
533ffcb943c4af2c5fe6385d816d0ba3eda9383bvboxsync usbDetachCallback (Console *that, USBDeviceList::iterator *aIt,
533ffcb943c4af2c5fe6385d816d0ba3eda9383bvboxsync bool aManual, PVUSBIRHCONFIG aConfig, PCRTUUID aUuid);
533ffcb943c4af2c5fe6385d816d0ba3eda9383bvboxsync
533ffcb943c4af2c5fe6385d816d0ba3eda9383bvboxsync static DECLCALLBACK (int)
00599f6d39cc25ca39845c2433cd75de7b9f6971vboxsync stateProgressCallback (PVM pVM, unsigned uPercent, void *pvUser);
00599f6d39cc25ca39845c2433cd75de7b9f6971vboxsync
00599f6d39cc25ca39845c2433cd75de7b9f6971vboxsync static DECLCALLBACK(void)
533ffcb943c4af2c5fe6385d816d0ba3eda9383bvboxsync setVMErrorCallback (PVM pVM, void *pvUser, int rc, RT_SRC_POS_DECL,
1843553dbdf4e46417158b4c6348c503adf10740vboxsync const char *pszFormat, va_list args);
533ffcb943c4af2c5fe6385d816d0ba3eda9383bvboxsync
1843553dbdf4e46417158b4c6348c503adf10740vboxsync static DECLCALLBACK(void)
1843553dbdf4e46417158b4c6348c503adf10740vboxsync setVMRuntimeErrorCallback (PVM pVM, void *pvUser, bool fFatal,
1843553dbdf4e46417158b4c6348c503adf10740vboxsync const char *pszErrorID,
1843553dbdf4e46417158b4c6348c503adf10740vboxsync const char *pszFormat, va_list args);
1843553dbdf4e46417158b4c6348c503adf10740vboxsync
1843553dbdf4e46417158b4c6348c503adf10740vboxsync HRESULT captureUSBDevices (PVM pVM);
1843553dbdf4e46417158b4c6348c503adf10740vboxsync void releaseAllUSBDevices (void);
1843553dbdf4e46417158b4c6348c503adf10740vboxsync
1843553dbdf4e46417158b4c6348c503adf10740vboxsync static DECLCALLBACK (int) powerUpThread (RTTHREAD Thread, void *pvUser);
1843553dbdf4e46417158b4c6348c503adf10740vboxsync static DECLCALLBACK (int) saveStateThread (RTTHREAD Thread, void *pvUser);
1843553dbdf4e46417158b4c6348c503adf10740vboxsync static DECLCALLBACK (int) powerDownThread (RTTHREAD Thread, void *pvUser);
1843553dbdf4e46417158b4c6348c503adf10740vboxsync
1843553dbdf4e46417158b4c6348c503adf10740vboxsync static DECLCALLBACK(void *) drvStatus_QueryInterface(PPDMIBASE pInterface, PDMINTERFACE enmInterface);
1843553dbdf4e46417158b4c6348c503adf10740vboxsync static DECLCALLBACK(void) drvStatus_UnitChanged(PPDMILEDCONNECTORS pInterface, unsigned iLUN);
1843553dbdf4e46417158b4c6348c503adf10740vboxsync static DECLCALLBACK(void) drvStatus_Destruct(PPDMDRVINS pDrvIns);
1843553dbdf4e46417158b4c6348c503adf10740vboxsync static DECLCALLBACK(int) drvStatus_Construct(PPDMDRVINS pDrvIns, PCFGMNODE pCfgHandle);
ebbb1f6c7e8bae363a4efda4b35b58c8467d24bcvboxsync
1843553dbdf4e46417158b4c6348c503adf10740vboxsync#ifdef VRDP_MC
1843553dbdf4e46417158b4c6348c503adf10740vboxsync int m_cAudioRefs;
1843553dbdf4e46417158b4c6348c503adf10740vboxsync
1843553dbdf4e46417158b4c6348c503adf10740vboxsync static DECLCALLBACK(int) vrdp_ClientLogon (void *pvUser, uint32_t u32ClientId, const char *pszUser, const char *pszPassword, const char *pszDomain);
533ffcb943c4af2c5fe6385d816d0ba3eda9383bvboxsync static DECLCALLBACK(void) vrdp_ClientConnect (void *pvUser, uint32_t u32ClientId);
1843553dbdf4e46417158b4c6348c503adf10740vboxsync static DECLCALLBACK(void) vrdp_ClientDisconnect (void *pvUser, uint32_t u32ClientId, uint32_t fu32Intercepted);
1843553dbdf4e46417158b4c6348c503adf10740vboxsync static DECLCALLBACK(void) vrdp_InterceptAudio (void *pvUser, uint32_t u32ClientId);
ebbb1f6c7e8bae363a4efda4b35b58c8467d24bcvboxsync static DECLCALLBACK(void) vrdp_InterceptUSB (void *pvUser, uint32_t u32ClientId, PFNVRDPUSBCALLBACK *ppfn, void **ppv);
1843553dbdf4e46417158b4c6348c503adf10740vboxsync static DECLCALLBACK(void) vrdp_InterceptClipboard (void *pvUser, uint32_t u32ClientId, PFNVRDPCLIPBOARDCALLBACK *ppfn, void **ppv);
1843553dbdf4e46417158b4c6348c503adf10740vboxsync#else
1843553dbdf4e46417158b4c6348c503adf10740vboxsync static DECLCALLBACK(int) vrdp_ClientLogon (void *pvUser, const char *pszUser, const char *pszPassword, const char *pszDomain);
1843553dbdf4e46417158b4c6348c503adf10740vboxsync static DECLCALLBACK(void) vrdp_ClientConnect (void *pvUser, uint32_t fu32SupportedOrders);
1843553dbdf4e46417158b4c6348c503adf10740vboxsync static DECLCALLBACK(void) vrdp_ClientDisconnect (void *pvUser);
1843553dbdf4e46417158b4c6348c503adf10740vboxsync static DECLCALLBACK(void) vrdp_InterceptAudio (void *pvUser, bool keepHostAudio);
1843553dbdf4e46417158b4c6348c503adf10740vboxsync static DECLCALLBACK(void) vrdp_InterceptUSB (void *pvUser, PFNVRDPUSBCALLBACK *ppfn, void **ppv);
1843553dbdf4e46417158b4c6348c503adf10740vboxsync static DECLCALLBACK(void) vrdp_InterceptClipboard (void *pvUser, PFNVRDPCLIPBOARDCALLBACK *ppfn, void **ppv);
1843553dbdf4e46417158b4c6348c503adf10740vboxsync#endif /* VRDP_MC */
1843553dbdf4e46417158b4c6348c503adf10740vboxsync
1843553dbdf4e46417158b4c6348c503adf10740vboxsync static VRDPSERVERCALLBACK sVrdpServerCallback;
1843553dbdf4e46417158b4c6348c503adf10740vboxsync
1843553dbdf4e46417158b4c6348c503adf10740vboxsync static const char *sSSMConsoleUnit;
1843553dbdf4e46417158b4c6348c503adf10740vboxsync static uint32_t sSSMConsoleVer;
1843553dbdf4e46417158b4c6348c503adf10740vboxsync
1843553dbdf4e46417158b4c6348c503adf10740vboxsync HRESULT loadDataFromSavedState();
ebbb1f6c7e8bae363a4efda4b35b58c8467d24bcvboxsync
533ffcb943c4af2c5fe6385d816d0ba3eda9383bvboxsync static DECLCALLBACK(void) saveStateFileExec (PSSMHANDLE pSSM, void *pvUser);
533ffcb943c4af2c5fe6385d816d0ba3eda9383bvboxsync static DECLCALLBACK(int) loadStateFileExec (PSSMHANDLE pSSM, void *pvUser, uint32_t u32Version);
533ffcb943c4af2c5fe6385d816d0ba3eda9383bvboxsync
533ffcb943c4af2c5fe6385d816d0ba3eda9383bvboxsync bool mSavedStateDataLoaded : 1;
533ffcb943c4af2c5fe6385d816d0ba3eda9383bvboxsync
533ffcb943c4af2c5fe6385d816d0ba3eda9383bvboxsync const ComPtr <IMachine> mMachine;
533ffcb943c4af2c5fe6385d816d0ba3eda9383bvboxsync const ComPtr <IInternalMachineControl> mControl;
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync const ComPtr <IVRDPServer> mVRDPServer;
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync const ComPtr <IDVDDrive> mDVDDrive;
da936e0446fb2b56b813d5d938f1dfc6e4bf8b13vboxsync const ComPtr <IFloppyDrive> mFloppyDrive;
e52f819639386db020b2a635b47a415248c7fbf9vboxsync
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync ConsoleVRDPServer * const mConsoleVRDPServer;
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync const ComObjPtr <Guest> mGuest;
e02db9e0d46f862430895b82b10e8ecde075cf11vboxsync const ComObjPtr <Keyboard> mKeyboard;
79b07d7ae28b916539c6397e010a5cc05e300551vboxsync const ComObjPtr <Mouse> mMouse;
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync const ComObjPtr <Display> mDisplay;
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync const ComObjPtr <MachineDebugger> mDebugger;
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync const ComObjPtr <RemoteDisplayInfo> mRemoteDisplayInfo;
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync USBDeviceList mUSBDevices;
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync RemoteUSBDeviceList mRemoteUSBDevices;
0e77737b0ba913683e614db11463b31ca67aacbevboxsync SharedFolderList mSharedFolders;
0e77737b0ba913683e614db11463b31ca67aacbevboxsync
0e77737b0ba913683e614db11463b31ca67aacbevboxsync /** The VM instance handle. */
0e77737b0ba913683e614db11463b31ca67aacbevboxsync PVM mpVM;
e08de24d4792d31b7f2aac29db5cb8840d940009vboxsync /** Holds the number of "readonly" mpVM callers (users) */
0e77737b0ba913683e614db11463b31ca67aacbevboxsync uint32_t mVMCallers;
e08de24d4792d31b7f2aac29db5cb8840d940009vboxsync /** Semaphore posted when the number of mpVM callers drops to zero */
e4ea543752422f1139923e3e506c625b0a1827c5vboxsync RTSEMEVENT mVMZeroCallersSem;
e9a217d585085a6a6d129d27ca0d96a1b8e6d0eevboxsync /** true when Console has entered the mpVM destruction phase */
2d53f6e472561965d363674e17f48d3bdffc24d3vboxsync bool mVMDestroying : 1;
2d53f6e472561965d363674e17f48d3bdffc24d3vboxsync
e9a217d585085a6a6d129d27ca0d96a1b8e6d0eevboxsync /** The current DVD drive state in the VM.
2d53f6e472561965d363674e17f48d3bdffc24d3vboxsync * This does not have to match the state maintained in the DVD. */
79b07d7ae28b916539c6397e010a5cc05e300551vboxsync DriveState_T meDVDState;
2d53f6e472561965d363674e17f48d3bdffc24d3vboxsync /** The current Floppy drive state in the VM.
2d53f6e472561965d363674e17f48d3bdffc24d3vboxsync * This does not have to match the state maintained in the Floppy. */
2d53f6e472561965d363674e17f48d3bdffc24d3vboxsync DriveState_T meFloppyState;
e9a217d585085a6a6d129d27ca0d96a1b8e6d0eevboxsync
2d53f6e472561965d363674e17f48d3bdffc24d3vboxsync VMMDev * const mVMMDev;
2d53f6e472561965d363674e17f48d3bdffc24d3vboxsync AudioSniffer * const mAudioSniffer;
0e77737b0ba913683e614db11463b31ca67aacbevboxsync
0e77737b0ba913683e614db11463b31ca67aacbevboxsync PPDMLED mapFDLeds[2];
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync PPDMLED mapIDELeds[4];
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync PPDMLED mapNetworkLeds[8];
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync#ifdef VBOX_WITH_UNIXY_TAP_NETWORKING
3080f6c0871099df43a4e91b31894d9c2b1369a8vboxsync Utf8Str maTAPDeviceName[8];
3080f6c0871099df43a4e91b31894d9c2b1369a8vboxsync RTFILE maTapFD[8];
3080f6c0871099df43a4e91b31894d9c2b1369a8vboxsync#endif
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync
3080f6c0871099df43a4e91b31894d9c2b1369a8vboxsync bool mVMStateChangeCallbackDisabled;
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync
da936e0446fb2b56b813d5d938f1dfc6e4bf8b13vboxsync /* Local machine state value */
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync MachineState_T mMachineState;
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync typedef std::list <ComPtr <IConsoleCallback> > CallbackList;
6b022885f2cb6a55167609edecd89570cd80001dvboxsync CallbackList mCallbacks;
6b022885f2cb6a55167609edecd89570cd80001dvboxsync
86b687e7808a36be33c43ae58adc8ab22d378feavboxsync struct
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync {
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync /** OnMousePointerShapeChange() cache */
d98e61ba075ed7d0b567a5d884bc85d643fe3de7vboxsync struct
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync {
e98b0df488a9ec7732b1d5c2e735ce707842e975vboxsync bool valid;
e08de24d4792d31b7f2aac29db5cb8840d940009vboxsync bool visible;
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync bool alpha;
e08de24d4792d31b7f2aac29db5cb8840d940009vboxsync uint32_t xHot;
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync uint32_t yHot;
e4ea543752422f1139923e3e506c625b0a1827c5vboxsync uint32_t width;
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync uint32_t height;
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync BYTE *shape;
6b022885f2cb6a55167609edecd89570cd80001dvboxsync size_t shapeSize;
86b687e7808a36be33c43ae58adc8ab22d378feavboxsync }
6b022885f2cb6a55167609edecd89570cd80001dvboxsync mpsc;
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync /** OnMouseCapabilityChange() cache */
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync struct
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync {
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync bool valid;
6b022885f2cb6a55167609edecd89570cd80001dvboxsync BOOL supportsAbsolute;
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync BOOL needsHostCursor;
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync }
7e960d3a0a8a3a84d7aba2cca45d72b1c31cc97bvboxsync mcc;
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync /** OnKeyboardLedsChange() cache */
6b022885f2cb6a55167609edecd89570cd80001dvboxsync struct
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync {
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync bool valid;
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync bool numLock;
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync bool capsLock;
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync bool scrollLock;
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync }
533ffcb943c4af2c5fe6385d816d0ba3eda9383bvboxsync klc;
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync }
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync mCallbackData;
858aad6160628a88d8a273db0344fc3ba7dcc9abvboxsync
65eb75d34c65a45c0945358715253950d63e440cvboxsync friend struct VMTask;
65eb75d34c65a45c0945358715253950d63e440cvboxsync};
da936e0446fb2b56b813d5d938f1dfc6e4bf8b13vboxsync
858aad6160628a88d8a273db0344fc3ba7dcc9abvboxsync#endif // ____H_CONSOLEIMPL
858aad6160628a88d8a273db0344fc3ba7dcc9abvboxsync