vbox4/5: enable key/value store for guest addition

required for enable vbox 5 guest additions, which otherwise deny to work

Issue #2338
This commit is contained in:
Alexander Boettcher 2017-04-26 11:19:40 +02:00 committed by Christian Helmuth
parent b1d35570df
commit 1a18c6b727
24 changed files with 182 additions and 32 deletions

View File

@ -48,11 +48,11 @@ VBOX_CC_OPT += -DVBOX_WITH_E1000
VBOX_CC_OPT += -DVBOX_WITH_AHCI
ifneq ($(call select_from_ports,virtualbox),)
VIRTUALBOX_VERSION_MAJOR := $(shell cat $(VIRTUALBOX_DIR)/Config.kmk | grep "VBOX_VERSION_MAJOR = " | grep -v "'VBOX_VERSION_MAJOR" | sed "s/^.*= //")
VIRTUALBOX_VERSION_MINOR := $(shell cat $(VIRTUALBOX_DIR)/Config.kmk | grep "VBOX_VERSION_MINOR = " | grep -v "'VBOX_VERSION_MINOR" | sed "s/^.*= //")
VIRTUALBOX_VERSION_BUILD := $(shell cat $(VIRTUALBOX_DIR)/Config.kmk | grep "VBOX_VERSION_BUILD = " | grep -v "'VBOX_VERSION_BUILD" | sed "s/^.*= //")
endif
VBOX_CC_OPT += -DVBOX_WITH_GUEST_PROPS
VIRTUALBOX_VERSION_MAJOR := $(shell cat $(VIRTUALBOX_DIR)/Config.kmk 2>/dev/null | grep "VBOX_VERSION_MAJOR = " | grep -v "'VBOX_VERSION_MAJOR" | sed "s/^.*= //")
VIRTUALBOX_VERSION_MINOR := $(shell cat $(VIRTUALBOX_DIR)/Config.kmk 2>/dev/null | grep "VBOX_VERSION_MINOR = " | grep -v "'VBOX_VERSION_MINOR" | sed "s/^.*= //")
VIRTUALBOX_VERSION_BUILD := $(shell cat $(VIRTUALBOX_DIR)/Config.kmk 2>/dev/null | grep "VBOX_VERSION_BUILD = " | grep -v "'VBOX_VERSION_BUILD" | sed "s/^.*= //")
ifeq ($(VBOX_MACH),x86_32)
VIRTUALBOX_PACKAGE_STRING = GenodeOS_32BIT_GENERIC
@ -64,6 +64,7 @@ VBOX_CC_OPT += -DVBOX_VERSION_MAJOR=$(VIRTUALBOX_VERSION_MAJOR) \
-DVBOX_VERSION_MINOR=$(VIRTUALBOX_VERSION_MINOR) \
-DVBOX_VERSION_BUILD=$(VIRTUALBOX_VERSION_BUILD) \
-DVBOX_VERSION_STRING=\"$(VIRTUALBOX_VERSION_MAJOR).$(VIRTUALBOX_VERSION_MINOR).$(VIRTUALBOX_VERSION_BUILD)_OSE\" \
-DVBOX_VERSION_STRING_RAW=\"$(VIRTUALBOX_VERSION_MAJOR).$(VIRTUALBOX_VERSION_MINOR).$(VIRTUALBOX_VERSION_BUILD)\" \
-DVBOX_PACKAGE_STRING=\"$(VIRTUALBOX_PACKAGE_STRING)\" \
-DVBOX_API_VERSION_STRING=\"$(VIRTUALBOX_VERSION_MAJOR)_$(VIRTUALBOX_VERSION_MINOR)\" \
-DIPRT_BLDCFG_VERSION_STRING=\"$(VIRTUALBOX_VERSION_MAJOR).$(VIRTUALBOX_VERSION_MINOR).$(VIRTUALBOX_VERSION_BUILD)_OSE\" \

View File

@ -100,6 +100,7 @@ SRC_CC += Runtime/common/string/strformatrt.cpp
SRC_CC += Runtime/common/string/strformattype.cpp
SRC_CC += Runtime/common/string/stringalloc.cpp
SRC_CC += Runtime/common/string/strprintf.cpp
SRC_CC += Runtime/common/string/strspace.cpp
SRC_CC += Runtime/common/string/strstrip.cpp
SRC_CC += Runtime/common/string/strtonum.cpp
SRC_CC += Runtime/common/string/unidata-lower.cpp

View File

@ -57,6 +57,9 @@ VBOX_CC_OPT += -DVBOX_WITH_MULTI_CORE
VBOX_CC_OPT += -DVBOX_WITH_AUDIO_OSS
# Required for guest additions 5++
VBOX_CC_OPT += -DVBOX_WITH_GUEST_PROPS
VIRTUALBOX_VERSION_MAJOR := $(shell cat $(VIRTUALBOX_DIR)/Config.kmk 2>/dev/null | grep "VBOX_VERSION_MAJOR = " | grep -v "'VBOX_VERSION_MAJOR" | sed "s/^.*= //")
VIRTUALBOX_VERSION_MINOR := $(shell cat $(VIRTUALBOX_DIR)/Config.kmk 2>/dev/null | grep "VBOX_VERSION_MINOR = " | grep -v "'VBOX_VERSION_MINOR" | sed "s/^.*= //")
VIRTUALBOX_VERSION_BUILD := $(shell cat $(VIRTUALBOX_DIR)/Config.kmk 2>/dev/null | grep "VBOX_VERSION_BUILD = " | grep -v "'VBOX_VERSION_BUILD" | sed "s/^.*= //")
@ -71,6 +74,7 @@ VBOX_CC_OPT += -DVBOX_VERSION_MAJOR=$(VIRTUALBOX_VERSION_MAJOR) \
-DVBOX_VERSION_MINOR=$(VIRTUALBOX_VERSION_MINOR) \
-DVBOX_VERSION_BUILD=$(VIRTUALBOX_VERSION_BUILD) \
-DVBOX_VERSION_STRING=\"$(VIRTUALBOX_VERSION_MAJOR).$(VIRTUALBOX_VERSION_MINOR).$(VIRTUALBOX_VERSION_BUILD)_OSE\" \
-DVBOX_VERSION_STRING_RAW=\"$(VIRTUALBOX_VERSION_MAJOR).$(VIRTUALBOX_VERSION_MINOR).$(VIRTUALBOX_VERSION_BUILD)\" \
-DVBOX_PACKAGE_STRING=\"$(VIRTUALBOX_PACKAGE_STRING)\" \
-DVBOX_API_VERSION_STRING=\"$(VIRTUALBOX_VERSION_MAJOR)_$(VIRTUALBOX_VERSION_MINOR)\" \
-DIPRT_BLDCFG_VERSION_STRING=\"$(VIRTUALBOX_VERSION_MAJOR).$(VIRTUALBOX_VERSION_MINOR).$(VIRTUALBOX_VERSION_BUILD)_OSE\" \

View File

@ -1 +1 @@
8b8762f34e586d96ec89085422452342c6908f80
38ede8c31e58b3d8af091117dbf722adfb9933eb

View File

@ -66,6 +66,7 @@ VBOX_MAIN_INC += USBDeviceImpl HostUSBDeviceImpl Matching Wrapper
VBOX_SRC_VBOX := VMM Devices Runtime GuestHost/HGSMI Storage Disassembler
VBOX_SRC_VBOX += HostServices/SharedFolders Main/xml/Settings.cpp
VBOX_SRC_VBOX += HostServices/SharedClipboard
VBOX_SRC_VBOX += HostServices/GuestProperties
VBOX_SRC_VBOX += Main/xml/VirtualBox-settings.xsd Main/xml/SchemaDefs.xsl
VBOX_SRC_VBOX += $(addsuffix .h, $(addprefix Main/include/, $(VBOX_MAIN_INC)))
VBOX_SRC_VBOX += $(addsuffix .cpp, $(addprefix Main/src-client/, $(VBOX_MAIN_CLI)))
@ -84,7 +85,7 @@ VBOX_INC += usb.h usbfilter.h
VBOX_INC_COM := array.h assert.h AutoLock.h ErrorInfo.h EventQueue.h Guid.h
VBOX_INC_COM += list.h MultiResult.h string.h
VBOX_INC_HOST := VBoxClipboardExt.h VBoxClipboardSvc.h
VBOX_INC_HOST := VBoxClipboardExt.h VBoxClipboardSvc.h GuestPropertySvc.h
VBOX_CONTENT += $(addprefix src/VBox/,$(VBOX_SRC_VBOX))
VBOX_CONTENT += $(addprefix include/VBox/, $(VBOX_INC))

View File

@ -1 +1 @@
7e47c93bea1d7b2a3b69817994b7d3d0a5f0a460
b1d0347a4935568cc5000edffe0018674004a17a

View File

@ -79,6 +79,7 @@ VBOX_MAIN_INC += ThreadTask USBProxyBackend
VBOX_SRC_VBOX := VMM Devices Runtime GuestHost/HGSMI Storage Disassembler
VBOX_SRC_VBOX += HostServices/SharedFolders Main/xml/Settings.cpp
VBOX_SRC_VBOX += HostServices/SharedClipboard
VBOX_SRC_VBOX += HostServices/GuestProperties
VBOX_SRC_VBOX += Main/xml/VirtualBox-settings.xsd Main/xml/SchemaDefs.xsl
VBOX_SRC_VBOX += Main/idl/docstrip.xsl Main/idl/VirtualBox.xidl
VBOX_SRC_VBOX += Main/idl/apiwrap-server.xsl

View File

@ -197,4 +197,9 @@ char *pdmR3FileR3(const char * file, bool)
TRACE(pv)
}
const char * RTBldCfgRevisionStr(void)
{
return "Genode";
}
RT_C_DECLS_END

View File

@ -24,6 +24,7 @@ extern "C" {
DECLCALLBACK(DECLEXPORT(int)) VBoxHGCMSvcLoad_sf (VBOXHGCMSVCFNTABLE *ptable);
DECLCALLBACK(DECLEXPORT(int)) VBoxHGCMSvcLoad_cb (VBOXHGCMSVCFNTABLE *ptable);
DECLCALLBACK(DECLEXPORT(int)) VBoxHGCMSvcLoad_gp (VBOXHGCMSVCFNTABLE *ptable);
static struct shared {
@ -32,7 +33,8 @@ static struct shared {
void * func;
} shared[] = {
{ "VBoxSharedFolders", VBOX_HGCM_SVCLOAD_NAME, (void *)VBoxHGCMSvcLoad_sf },
{ "VBoxSharedClipboard", VBOX_HGCM_SVCLOAD_NAME, (void *)VBoxHGCMSvcLoad_cb }
{ "VBoxSharedClipboard", VBOX_HGCM_SVCLOAD_NAME, (void *)VBoxHGCMSvcLoad_cb },
{ "VBoxGuestPropSvc", VBOX_HGCM_SVCLOAD_NAME, (void *)VBoxHGCMSvcLoad_gp }
};

View File

@ -41,3 +41,5 @@ void fireNATNetworkPortForwardEvent(IEventSource* aSource, CBSTR a_networkName,
void fireHostNameResolutionConfigurationChangeEvent(IEventSource* aSource);
void fireMediumChangedEvent(IEventSource *, IMediumAttachment *);
#define fireGuestPropertyChangedEvent(a, b, c, d, e)

View File

@ -1,3 +1,22 @@
/**
* VirtualBox COM base class definition adjusted to Genode
* - based on VBox/Main/include/VirtualBoxBase.h
*/
/*
* Copyright (C) 2006-2013 Oracle Corporation
* Copyright (C) 2013-2017 Genode Labs GmbH
*
* This file is part of VirtualBox Open Source Edition (OSE), as
* available from http://www.virtualbox.org. This file is free software;
* you can redistribute it and/or modify it under the terms of the GNU
* General Public License (GPL) as published by the Free Software
* Foundation, in version 2 as it comes in the "COPYING" file of the
* VirtualBox OSE distribution. VirtualBox OSE is distributed in the
* hope that it will be useful, but WITHOUT ANY WARRANTY of any kind.
*/
#ifndef ____H_VIRTUALBOXBASEIMPL
#define ____H_VIRTUALBOXBASEIMPL
@ -348,6 +367,17 @@ class Backupable : public Shareable<T>
return setError(E_INVALIDARG, tr("Argument %s is NULL"), #arg); \
} while (0)
/**
* Checks that the pointer argument is a valid pointer or NULL and returns
* E_INVALIDARG + extended error info on failure.
* @param arg Input pointer-type argument (strings, interface pointers...)
*/
#define CheckComArgMaybeNull(arg) \
do { \
if (RT_UNLIKELY(!RT_VALID_PTR(arg) && (arg) != NULL)) \
return setError(E_INVALIDARG, tr("Argument %s is an invalid pointer"), #arg); \
} while (0)
/**
* Checks that the given expression (that must involve the argument) is true and
* returns E_INVALIDARG + extended error info on failure.

View File

@ -386,6 +386,7 @@ void GenodeConsole::init_backends(IKeyboard * gKeyboard, IMouse * gMouse)
Genodefb *fb = dynamic_cast<Genodefb *>(d->getFramebuffer());
fb->mode_sigh(_mode_change_signal_dispatcher);
handle_mode_change();
}
void GenodeConsole::onMouseCapabilityChange(BOOL supportsAbsolute, BOOL supportsRelative,

View File

@ -154,21 +154,28 @@ extern "C" char *getenv(const char *name)
// "+dev_pcnet.e.l.f"
// "+dev_pic.e.l.f"
// "+dev_apic.e.l.f"
// "+dev_vmm.e"
// "+usb_mouse.e.l.f"
// "+main.e.l.f"
// "+hgcm.e.l.f"
// "+main.e.l3.f"
// "+shared_folders.e.l.f"
// "+drv_host_serial.e.l.f"
// "+dev_audio.e.l.f"
// "+dev_hda.e"
// "+drv_host_audio.e.l.f"
// "+drv_audio.e.l.f"
// "+dev_vmm_backdoor.e.l.f"
// "+hgcm.e.l.f"
// "+dev_vmm.e.l.f"
;
/*
* see https://www.virtualbox.org/wiki/VBoxLogging for useful tips to
* enable useful debugging of Guest additions in Windows/Linux together
* with +dev_vmm_backdoor, hgcm and dev_vmm
*/
if (Genode::strcmp(name, "VBOX_LOG_FLAGS") == 0 ||
Genode::strcmp(name, "VBOX_RELEASE_LOG_FLAGS") == 0)
return (char *)"thread";
return (char *)"thread"; //" tsc";
return 0;
}

View File

@ -324,10 +324,10 @@ int MMR3InitPaging(PVM pVM)
char * MMR3HeapStrDup(PVM pVM, MMTAG enmTag, const char *psz)
{
size_t cch = strlen(psz) + 1;
char *pszDup = (char *)MMR3HeapAllocU(pVM->pUVM, enmTag, cch);
if (pszDup)
memcpy(pszDup, psz, cch);
size_t cch = strlen(psz) + 1;
char *pszDup = (char *)MMR3HeapAllocU(pVM->pUVM, enmTag, cch);
if (pszDup)
memcpy(pszDup, psz, cch);
return pszDup;
}

View File

@ -18,3 +18,13 @@
{
int rc = VINF_SUCCESS;
+++ a/src/app/virtualbox/src/VBox/HostServices/GuestProperties/service.cpp
@@ -1627,7 +1627,7 @@
/**
* @copydoc VBOXHGCMSVCLOAD
*/
-extern "C" DECLCALLBACK(DECLEXPORT(int)) VBoxHGCMSvcLoad (VBOXHGCMSVCFNTABLE *ptable)
+extern "C" DECLCALLBACK(DECLEXPORT(int)) VBoxHGCMSvcLoad_gp (VBOXHGCMSVCFNTABLE *ptable)
{
int rc = VERR_IPE_UNINITIALIZED_STATUS;

View File

@ -533,15 +533,33 @@ index 69e3109..3c534df 100644
/**
* Uninitializes the Console object.
*/
@@ -1035,6 +1066,8 @@ void Console::guestPropertiesVRDPUpdateDisconnect(uint32_t u32ClientId)
#endif /* VBOX_WITH_GUEST_PROPS */
@@ -817,6 +848,8 @@
LogFlowThisFuncLeave();
}
+#endif /* #if 0 */
+
bool Console::isResetTurnedIntoPowerOff(void)
#ifdef VBOX_WITH_GUEST_PROPS
/**
@@ -858,6 +891,8 @@
LogRel(("RESET: Unable to enumerate guest properties, rc=%Rhrc\n", hrc));
}
+#if 0
+
bool Console::guestPropertiesVRDPEnabled(void)
{
Bstr value;
@@ -1055,6 +1090,8 @@
return;
}
+#endif /* #if 0 */
+
#endif /* VBOX_WITH_GUEST_PROPS */
bool Console::isResetTurnedIntoPowerOff(void)
@@ -1046,6 +1079,8 @@ bool Console::isResetTurnedIntoPowerOff(void)
return false;
}
@ -690,6 +708,23 @@ index 69e3109..3c534df 100644
HRESULT Console::onVideoCaptureChange()
{
AutoCaller autoCaller(this);
@@ -5778,6 +5844,8 @@
return hrc;
}
+#endif /* #if 0 */
+
/**
* @note Temporarily locks this object for writing.
*/
@@ -5978,6 +6046,7 @@
#endif /* VBOX_WITH_GUEST_PROPS */
}
+#if 0
/*
* Internal: helper function for connecting progress reporting
@@ -6490,6 +6544,8 @@ void Console::onMouseCapabilityChange(BOOL supportsAbsolute, BOOL supportsRelati
fireMouseCapabilityChangedEvent(mEventSource, supportsAbsolute, supportsRelative, supportsMT, needsHostCursor);
}

View File

@ -43,6 +43,8 @@ SRC_CC += HostServices/SharedFolders/shflhandle.cpp
SRC_CC += HostServices/SharedClipboard/service.cpp
SRC_CC += HostServices/GuestProperties/service.cpp
SRC_CC += frontend/dummy/errorinfo.cc frontend/dummy/virtualboxbase.cc
SRC_CC += frontend/dummy/autostart.cc frontend/dummy/rest.cc
SRC_CC += frontend/dummy/host.cc

View File

@ -19,6 +19,7 @@
#include "EMInternal.h"
#include "PDMInternal.h"
#include <iprt/buildconfig.h>
#include <iprt/err.h>
#include <iprt/mem.h>
#include <VBox/vmm/cpum.h>
@ -167,4 +168,9 @@ void RTAssertMsg2Add(const char *pszFormat, ...)
lock.lock();
}
const char * RTBldCfgRevisionStr(void)
{
return "Genode";
}
RT_C_DECLS_END

View File

@ -49,3 +49,5 @@ void fireRuntimeErrorEvent(IEventSource* aSource, BOOL a_fatal, CBSTR a_id,
#define fireVideoCaptureChangedEvent(a)
#define fireVRDEServerChangedEvent(a)
#define fireVRDEServerInfoChangedEvent(a)
#define fireGuestPropertyChangedEvent(a, b, c, d, e)

View File

@ -1,8 +1,24 @@
/**
* VirtualBox COM base class definition adjusted to Genode
* - based on VBox/Main/include/VirtualBoxBase.h
*/
/*
* Copyright (C) 2006-2016 Oracle Corporation
* Copyright (C) 2013-2017 Genode Labs GmbH
*
* This file is part of VirtualBox Open Source Edition (OSE), as
* available from http://www.virtualbox.org. This file is free software;
* you can redistribute it and/or modify it under the terms of the GNU
* General Public License (GPL) as published by the Free Software
* Foundation, in version 2 as it comes in the "COPYING" file of the
* VirtualBox OSE distribution. VirtualBox OSE is distributed in the
* hope that it will be useful, but WITHOUT ANY WARRANTY of any kind.
*/
#ifndef ____H_VIRTUALBOXBASEIMPL
#define ____H_VIRTUALBOXBASEIMPL
//#include <base/log.h>
#include <iprt/cdefs.h>
#include <iprt/thread.h>

View File

@ -334,8 +334,9 @@ void GenodeConsole::init_backends(IKeyboard * gKeyboard, IMouse * gMouse)
Assert(SUCCEEDED(rc) && pFramebuffer);
Genodefb *fb = dynamic_cast<Genodefb *>(pFramebuffer);
fb->mode_sigh(_mode_change_signal_dispatcher);
handle_mode_change();
}
void GenodeConsole::i_onMouseCapabilityChange(BOOL supportsAbsolute,

View File

@ -188,41 +188,62 @@ class Genodefb :
}
STDMETHODIMP COMGETTER(Overlay) (IFramebufferOverlay **) override {
Assert(!"FixMe");
return E_NOTIMPL; }
STDMETHODIMP COMGETTER(WinId) (PRInt64 *winId) override {
Assert(!"FixMe");
return E_NOTIMPL; }
STDMETHODIMP VideoModeSupported(ULONG, ULONG, ULONG, BOOL *) override {
return E_NOTIMPL; }
STDMETHODIMP VideoModeSupported(ULONG width, ULONG height,
ULONG bpp, BOOL *supported) override
{
if (!supported)
return E_POINTER;
*supported = ((width <= (ULONG)_next_fb_mode.width()) &&
(height <= (ULONG)_next_fb_mode.height()));
return S_OK;
}
STDMETHODIMP Notify3DEvent(PRUint32, PRUint32, PRUint8 *) override {
Assert(!"FixMe");
return E_NOTIMPL; }
STDMETHODIMP ProcessVHWACommand(BYTE *pCommand) override {
Assert(!"FixMe");
return E_NOTIMPL; }
STDMETHODIMP GetVisibleRegion(BYTE *, ULONG, ULONG *) override {
Assert(!"FixMe");
return E_NOTIMPL; }
STDMETHODIMP SetVisibleRegion(BYTE *, ULONG) override {
Assert(!"FixMe");
return E_NOTIMPL; }
STDMETHODIMP COMGETTER(PixelFormat) (ULONG *format) override {
Assert(!"FixMe");
return E_NOTIMPL; }
HRESULT NotifyUpdate(ULONG x, ULONG y, ULONG w, ULONG h) override {
Assert(!"FixMe");
return E_NOTIMPL; }
STDMETHODIMP COMGETTER(BitsPerPixel)(ULONG *bits) override {
Assert(!"FixMe");
return E_NOTIMPL; }
STDMETHODIMP COMGETTER(BytesPerLine)(ULONG *line) override {
Assert(!"FixMe");
return E_NOTIMPL; }
STDMETHODIMP COMGETTER(Width)(ULONG *width) override {
Assert(!"FixMe");
return E_NOTIMPL; }
STDMETHODIMP COMGETTER(Height)(ULONG *height) override {
Assert(!"FixMe");
return E_NOTIMPL; }
};

View File

@ -679,15 +679,15 @@ index a717aff..3d52b9f 100644
/**
* Uninitializes the Console object.
*/
@@ -1014,6 +1028,8 @@
#endif /* VBOX_WITH_GUEST_PROPS */
@@ -803,6 +817,8 @@
LogFlowThisFuncLeave();
}
+#endif /* #if 0 */
+
bool Console::i_isResetTurnedIntoPowerOff(void)
{
Bstr value;
#ifdef VBOX_WITH_GUEST_PROPS
/**
@@ -1943,8 +1959,11 @@
HRESULT Console::getEmulatedUSB(ComPtr<IEmulatedUSB> &aEmulatedUSB)

View File

@ -46,6 +46,8 @@ SRC_CC += HostServices/SharedFolders/shflhandle.cpp
SRC_CC += HostServices/SharedClipboard/service.cpp
SRC_CC += HostServices/GuestProperties/service.cpp
SRC_CC += frontend/dummy/errorinfo.cc frontend/dummy/virtualboxbase.cc
SRC_CC += frontend/dummy/autostart.cc frontend/dummy/rest.cc
SRC_CC += frontend/dummy/host.cc