ConsoleImpl.h revision 96660292fc1310c7afc8ef68c10c990858693638
5b281ba489ca18f0380d7efc7a5108b606cce449vboxsync * VBox Console COM Class definition
1c94c0a63ba68be1a7b2c640e70d7a06464e4fcavboxsync * Copyright (C) 2006-2007 innotek GmbH
ababd7e83ee3d23c5191a0d3802f10764df69e36vboxsync * This file is part of VirtualBox Open Source Edition (OSE), as
ababd7e83ee3d23c5191a0d3802f10764df69e36vboxsync * available from http://www.virtualbox.org. This file is free software;
ababd7e83ee3d23c5191a0d3802f10764df69e36vboxsync * 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.
a16eb14ad7a4b5ef91ddc22d3e8e92d930f736fcvboxsync * If you received this file as part of a commercial VirtualBox
a16eb14ad7a4b5ef91ddc22d3e8e92d930f736fcvboxsync * distribution, then only the terms of your commercial VirtualBox
a16eb14ad7a4b5ef91ddc22d3e8e92d930f736fcvboxsync * license agreement apply instead of the previous paragraph.
ababd7e83ee3d23c5191a0d3802f10764df69e36vboxsync///////////////////////////////////////////////////////////////////////////////
ababd7e83ee3d23c5191a0d3802f10764df69e36vboxsync * Checks the availability of the underlying VM device driver corresponding
ababd7e83ee3d23c5191a0d3802f10764df69e36vboxsync * to the COM interface (IKeyboard, IMouse, IDisplay, etc.). When the driver is
ababd7e83ee3d23c5191a0d3802f10764df69e36vboxsync * not available (NULL), sets error info and returns returns E_ACCESSDENIED.
ababd7e83ee3d23c5191a0d3802f10764df69e36vboxsync * The translatable error message is defined in null context.
ababd7e83ee3d23c5191a0d3802f10764df69e36vboxsync * Intended to used only within Console children (i,e. Keyboard, Mouse,
5eabf773597082761832bc0a32b3660e8771f9f1vboxsync * Display, etc.).
ababd7e83ee3d23c5191a0d3802f10764df69e36vboxsync * @param drv driver pointer to check (compare it with NULL)
ababd7e83ee3d23c5191a0d3802f10764df69e36vboxsync return setError (E_ACCESSDENIED, tr ("The console is not powered up")); \
ababd7e83ee3d23c5191a0d3802f10764df69e36vboxsync } while (0)
ababd7e83ee3d23c5191a0d3802f10764df69e36vboxsync/** @def VBOX_WITH_UNIXY_TAP_NETWORKING
ababd7e83ee3d23c5191a0d3802f10764df69e36vboxsync * Unixy style TAP networking. This is defined in the Makefile since it's also
ababd7e83ee3d23c5191a0d3802f10764df69e36vboxsync///////////////////////////////////////////////////////////////////////////////
ababd7e83ee3d23c5191a0d3802f10764df69e36vboxsync/** IConsole implementation class */
ababd7e83ee3d23c5191a0d3802f10764df69e36vboxsync public VirtualBoxSupportErrorInfoImpl <Console, IConsole>,
ababd7e83ee3d23c5191a0d3802f10764df69e36vboxsync // public initializers/uninitializers for internal purposes only
ababd7e83ee3d23c5191a0d3802f10764df69e36vboxsync HRESULT init (IMachine *aMachine, IInternalMachineControl *aControl);
ababd7e83ee3d23c5191a0d3802f10764df69e36vboxsync // IConsole properties
ababd7e83ee3d23c5191a0d3802f10764df69e36vboxsync STDMETHOD(COMGETTER(Machine)) (IMachine **aMachine);
ababd7e83ee3d23c5191a0d3802f10764df69e36vboxsync STDMETHOD(COMGETTER(State)) (MachineState_T *aMachineState);
ababd7e83ee3d23c5191a0d3802f10764df69e36vboxsync STDMETHOD(COMGETTER(Keyboard)) (IKeyboard **aKeyboard);
ababd7e83ee3d23c5191a0d3802f10764df69e36vboxsync STDMETHOD(COMGETTER(Display)) (IDisplay **aDisplay);
ababd7e83ee3d23c5191a0d3802f10764df69e36vboxsync STDMETHOD(COMGETTER(Debugger)) (IMachineDebugger **aDebugger);
ababd7e83ee3d23c5191a0d3802f10764df69e36vboxsync STDMETHOD(COMGETTER(USBDevices)) (IUSBDeviceCollection **aUSBDevices);
ababd7e83ee3d23c5191a0d3802f10764df69e36vboxsync STDMETHOD(COMGETTER(RemoteUSBDevices)) (IHostUSBDeviceCollection **aRemoteUSBDevices);
ababd7e83ee3d23c5191a0d3802f10764df69e36vboxsync STDMETHOD(COMGETTER(RemoteDisplayInfo)) (IRemoteDisplayInfo **aRemoteDisplayInfo);
ababd7e83ee3d23c5191a0d3802f10764df69e36vboxsync STDMETHOD(COMGETTER(SharedFolders)) (ISharedFolderCollection **aSharedFolders);
ababd7e83ee3d23c5191a0d3802f10764df69e36vboxsync // IConsole methods
ababd7e83ee3d23c5191a0d3802f10764df69e36vboxsync STDMETHOD(GetDeviceActivity) (DeviceType_T aDeviceType,
ababd7e83ee3d23c5191a0d3802f10764df69e36vboxsync STDMETHOD(DetachUSBDevice) (INPTR GUIDPARAM aId, IUSBDevice **aDevice);
ababd7e83ee3d23c5191a0d3802f10764df69e36vboxsync STDMETHOD(CreateSharedFolder) (INPTR BSTR aName, INPTR BSTR aHostPath);
ababd7e83ee3d23c5191a0d3802f10764df69e36vboxsync STDMETHOD(TakeSnapshot) (INPTR BSTR aName, INPTR BSTR aDescription,
ababd7e83ee3d23c5191a0d3802f10764df69e36vboxsync STDMETHOD(DiscardSnapshot) (INPTR GUIDPARAM aId, IProgress **aProgress);
ababd7e83ee3d23c5191a0d3802f10764df69e36vboxsync STDMETHOD(DiscardCurrentState) (IProgress **aProgress);
ababd7e83ee3d23c5191a0d3802f10764df69e36vboxsync STDMETHOD(DiscardCurrentSnapshotAndState) (IProgress **aProgress);
ababd7e83ee3d23c5191a0d3802f10764df69e36vboxsync STDMETHOD(RegisterCallback) (IConsoleCallback *aCallback);
ababd7e83ee3d23c5191a0d3802f10764df69e36vboxsync STDMETHOD(UnregisterCallback)(IConsoleCallback *aCallback);
ababd7e83ee3d23c5191a0d3802f10764df69e36vboxsync // public methods for internal purposes only
ababd7e83ee3d23c5191a0d3802f10764df69e36vboxsync * Note: the following methods do not increase refcount. intended to be
ababd7e83ee3d23c5191a0d3802f10764df69e36vboxsync * called only by the VM execution thread.
ababd7e83ee3d23c5191a0d3802f10764df69e36vboxsync MachineDebugger *getMachineDebugger() { return mDebugger; }
ababd7e83ee3d23c5191a0d3802f10764df69e36vboxsync const ComPtr <IMachine> &machine() { return mMachine; }
ababd7e83ee3d23c5191a0d3802f10764df69e36vboxsync /** Method is called only from ConsoleVRDPServer */
ababd7e83ee3d23c5191a0d3802f10764df69e36vboxsync IVRDPServer *getVRDPServer() { return mVRDPServer; }
ababd7e83ee3d23c5191a0d3802f10764df69e36vboxsync ConsoleVRDPServer *consoleVRDPServer() { return mConsoleVRDPServer; }
ababd7e83ee3d23c5191a0d3802f10764df69e36vboxsync HRESULT updateMachineState (MachineState_T aMachineState);
ababd7e83ee3d23c5191a0d3802f10764df69e36vboxsync // events from IInternalSessionControl
ababd7e83ee3d23c5191a0d3802f10764df69e36vboxsync HRESULT onNetworkAdapterChange(INetworkAdapter *networkAdapter);
ababd7e83ee3d23c5191a0d3802f10764df69e36vboxsync HRESULT onSerialPortChange(ISerialPort *serialPort);
ababd7e83ee3d23c5191a0d3802f10764df69e36vboxsync HRESULT onParallelPortChange(IParallelPort *parallelPort);
ababd7e83ee3d23c5191a0d3802f10764df69e36vboxsync HRESULT onUSBDeviceAttach (IUSBDevice *aDevice, IVirtualBoxErrorInfo *aError);
ababd7e83ee3d23c5191a0d3802f10764df69e36vboxsync HRESULT onUSBDeviceDetach (INPTR GUIDPARAM aId, IVirtualBoxErrorInfo *aError);
ababd7e83ee3d23c5191a0d3802f10764df69e36vboxsync AudioSniffer *getAudioSniffer () { return mAudioSniffer; }
ababd7e83ee3d23c5191a0d3802f10764df69e36vboxsync int VRDPClientLogon (uint32_t u32ClientId, const char *pszUser, const char *pszPassword, const char *pszDomain);
ababd7e83ee3d23c5191a0d3802f10764df69e36vboxsync void VRDPClientDisconnect (uint32_t u32ClientId, uint32_t fu32Intercepted);
ababd7e83ee3d23c5191a0d3802f10764df69e36vboxsync void VRDPInterceptClipboard (uint32_t u32ClientId);
ababd7e83ee3d23c5191a0d3802f10764df69e36vboxsync static VRDPSERVERCALLBACK *getVrdpServerCallback () { return &sVrdpServerCallback; };
ababd7e83ee3d23c5191a0d3802f10764df69e36vboxsync#endif /* VRDP_NO_COM */
ababd7e83ee3d23c5191a0d3802f10764df69e36vboxsync void processRemoteUSBDevices (uint32_t u32ClientId, VRDPUSBDEVICEDESC *pDevList, uint32_t cbDevList);
ababd7e83ee3d23c5191a0d3802f10764df69e36vboxsync // callback callers
ababd7e83ee3d23c5191a0d3802f10764df69e36vboxsync void onMousePointerShapeChange(bool fVisible, bool fAlpha,
ababd7e83ee3d23c5191a0d3802f10764df69e36vboxsync void onMouseCapabilityChange (BOOL supportsAbsolute, BOOL needsHostCursor);
ababd7e83ee3d23c5191a0d3802f10764df69e36vboxsync void onKeyboardLedsChange (bool fNumLock, bool fCapsLock, bool fScrollLock);
ababd7e83ee3d23c5191a0d3802f10764df69e36vboxsync void onUSBDeviceStateChange (IUSBDevice *aDevice, bool aAttached,
ababd7e83ee3d23c5191a0d3802f10764df69e36vboxsync void onRuntimeError (BOOL aFatal, INPTR BSTR aErrorID, INPTR BSTR aMessage);
ababd7e83ee3d23c5191a0d3802f10764df69e36vboxsync HRESULT onShowWindow (BOOL aCheck, BOOL *aCanShow, ULONG64 *aWinId);
ababd7e83ee3d23c5191a0d3802f10764df69e36vboxsync void reportAuthLibraryError (const char *filename, int rc)
ababd7e83ee3d23c5191a0d3802f10764df69e36vboxsync setError (E_FAIL, tr("Could not load the external authentication library '%s' (%Vrc)"), filename, rc);
ababd7e83ee3d23c5191a0d3802f10764df69e36vboxsync // for VirtualBoxSupportErrorInfoImpl
ababd7e83ee3d23c5191a0d3802f10764df69e36vboxsync static const wchar_t *getComponentName() { return L"Console"; }
ababd7e83ee3d23c5191a0d3802f10764df69e36vboxsync * Base template for AutoVMCaller and SaveVMPtr. Template arguments
ababd7e83ee3d23c5191a0d3802f10764df69e36vboxsync * have the same meaning as arguments of Console::addVMCaller().
void release()
void add()
void releaseVMCaller();
bool aSetError = false);
bool fPassthrough);
static DECLCALLBACK(int)
static DECLCALLBACK(int)
static DECLCALLBACK(int)
static DECLCALLBACK (int)
static DECLCALLBACK(void)
static DECLCALLBACK(void)
const char *pszErrorID,
static DECLCALLBACK(void *) drvStatus_QueryInterface(PPDMIBASE pInterface, PDMINTERFACE enmInterface);
int mcAudioRefs;
#ifdef VRDP_NO_COM
static DECLCALLBACK(int) vrdp_ClientLogon (void *pvUser, uint32_t u32ClientId, const char *pszUser, const char *pszPassword, const char *pszDomain);
static DECLCALLBACK(void) vrdp_ClientDisconnect (void *pvUser, uint32_t u32ClientId, uint32_t fu32Intercepted);
static DECLCALLBACK(void) vrdp_InterceptUSB (void *pvUser, uint32_t u32ClientId, PFNVRDPUSBCALLBACK *ppfn, void **ppv);
static DECLCALLBACK(void) vrdp_InterceptClipboard (void *pvUser, uint32_t u32ClientId, PFNVRDPCLIPBOARDCALLBACK *ppfn, void **ppv);
static const char *sSSMConsoleUnit;
bool valid;
bool visible;
bool alpha;
mpsc;
bool valid;
mcc;
bool valid;
bool numLock;
bool capsLock;
bool scrollLock;
klc;