Index: /trunk/src/VBox/Main/idl/VirtualBox.xidl
===================================================================
--- /trunk/src/VBox/Main/idl/VirtualBox.xidl	(revision 42193)
+++ /trunk/src/VBox/Main/idl/VirtualBox.xidl	(revision 42194)
@@ -9154,5 +9154,5 @@
   <interface
     name="IGuestSession" extends="$unknown"
-    uuid="158aff3c-5258-4994-88cb-6fd679c7e3ed"
+    uuid="530aef35-6a48-455c-960c-aac5792abc38"
     wsmap="managed"
     >
@@ -9454,4 +9454,20 @@
         </result>
       </desc>
+    </method>
+    
+    <method name="EnvironmentGet">
+      <desc>
+        TODO
+
+        <result name="VBOX_E_NOT_SUPPORTED">
+          TODO
+        </result>
+      </desc>
+      <param name="name" type="wstring" dir="in">
+        <desc>TODO</desc>
+      </param>
+      <param name="value" type="wstring" dir="return">
+        <desc>TODO</desc>
+      </param>
     </method>
     
Index: /trunk/src/VBox/Main/include/GuestCtrlImplPrivate.h
===================================================================
--- /trunk/src/VBox/Main/include/GuestCtrlImplPrivate.h	(revision 42193)
+++ /trunk/src/VBox/Main/include/GuestCtrlImplPrivate.h	(revision 42194)
@@ -122,4 +122,6 @@
     static void FreeEnvironmentBlock(void *pvEnv);
 
+    Utf8Str Get(const Utf8Str &strKey);
+
     Utf8Str Get(size_t nPos);
 
Index: /trunk/src/VBox/Main/include/GuestSessionImpl.h
===================================================================
--- /trunk/src/VBox/Main/include/GuestSessionImpl.h	(revision 42193)
+++ /trunk/src/VBox/Main/include/GuestSessionImpl.h	(revision 42194)
@@ -82,4 +82,5 @@
     STDMETHOD(DirectorySetACL)(IN_BSTR aPath, IN_BSTR aACL);
     STDMETHOD(EnvironmentClear)(void);
+    STDMETHOD(EnvironmentGet)(IN_BSTR aName, BSTR *aValue);
     STDMETHOD(EnvironmentSet)(IN_BSTR aName, IN_BSTR aValue);
     STDMETHOD(EnvironmentSetArray)(ComSafeArrayIn(IN_BSTR, aValues));
Index: /trunk/src/VBox/Main/src-client/GuestCtrlImpl.cpp
===================================================================
--- /trunk/src/VBox/Main/src-client/GuestCtrlImpl.cpp	(revision 42193)
+++ /trunk/src/VBox/Main/src-client/GuestCtrlImpl.cpp	(revision 42194)
@@ -2689,5 +2689,4 @@
 
     int rc = VERR_MAX_PROCS_REACHED;
-    ComObjPtr<GuestSession> pGuestSession;
     try
     {
@@ -2699,9 +2698,6 @@
         {
             /* Is the context ID already used?  Try next ID ... */
-            if (!sessionExists(uNewSessionID++))
-            {
-                /* Callback with context ID was not found. This means
-                 * we can use this context ID for our new callback we want
-                 * to add below. */
+            if (!sessionExists(++uNewSessionID))
+            {
                 rc = VINF_SUCCESS;
                 break;
@@ -2714,4 +2710,5 @@
 
         /* Create the session object. */
+        ComObjPtr<GuestSession> pGuestSession;
         HRESULT hr = pGuestSession.createObject();
         if (FAILED(hr)) throw VERR_COM_UNEXPECTED;
@@ -2719,11 +2716,11 @@
         rc = pGuestSession->init(this, uNewSessionID,
                                  strUser, strPassword, strDomain, strSessionName);
-        if (RT_FAILURE(rc)) throw VBOX_E_IPRT_ERROR;
-
-        mData.mGuestSessions[uNewSessionID] = pGuestSession;
+        if (RT_FAILURE(rc)) throw rc;
 
         /* Return guest session to the caller. */
         hr = pGuestSession.queryInterfaceTo(aGuestSession);
         if (FAILED(hr)) throw VERR_COM_OBJECT_NOT_FOUND;
+
+        mData.mGuestSessions[uNewSessionID] = pGuestSession;
     }
     catch (int rc2)
Index: /trunk/src/VBox/Main/src-client/GuestCtrlPrivate.cpp
===================================================================
--- /trunk/src/VBox/Main/src-client/GuestCtrlPrivate.cpp	(revision 42193)
+++ /trunk/src/VBox/Main/src-client/GuestCtrlPrivate.cpp	(revision 42194)
@@ -21,4 +21,6 @@
  ******************************************************************************/
 #include "GuestCtrlImplPrivate.h"
+
+#include <iprt/ctype.h>
 #ifdef DEBUG
 # include "Logging.h"
@@ -210,5 +212,5 @@
     std::map<Utf8Str, Utf8Str>::const_iterator it = mEnvironment.begin();
     for (; it != mEnvironment.end() && curPos < nPos;
-         ++it) { }
+         ++it, ++curPos) { }
 
     if (it != mEnvironment.end())
@@ -218,4 +220,13 @@
 }
 
+Utf8Str GuestEnvironment::Get(const Utf8Str &strKey)
+{
+    std::map <Utf8Str, Utf8Str>::const_iterator itEnv = mEnvironment.find(strKey);
+    Utf8Str strRet;
+    if (itEnv != mEnvironment.end())
+        strRet = itEnv->second;
+    return strRet;
+}
+
 bool GuestEnvironment::Has(const Utf8Str &strKey)
 {
@@ -226,6 +237,20 @@
 int GuestEnvironment::Set(const Utf8Str &strKey, const Utf8Str &strValue)
 {
-    mEnvironment[strValue] = strValue;
-    return VINF_SUCCESS;
+    /** @todo Do some validation using regex. */
+    if (strKey.isEmpty())
+        return VERR_INVALID_PARAMETER;
+
+    int rc = VINF_SUCCESS;
+    const char *pszString = strKey.c_str();
+    while (*pszString != '\0' && RT_SUCCESS(rc))
+    {
+         if (!RT_C_IS_ALNUM(*pszString++))
+             rc = VERR_INVALID_PARAMETER;
+    }
+
+    if (RT_SUCCESS(rc))
+        mEnvironment[strKey] = strValue;
+
+    return rc;
 }
 
@@ -233,20 +258,27 @@
 {
     RTCList<RTCString> listPair = strPair.split("=", RTCString::KeepEmptyParts);
+    /* Skip completely empty pairs. Note that we still need pairs with a valid
+     * (set) key and an empty value. */
+    if (listPair.size() <= 1)
+        return VINF_SUCCESS;
+
+    int rc = VINF_SUCCESS;
     size_t p = 0;
-    while(p < listPair.size())
+    while(p < listPair.size() && RT_SUCCESS(rc))
     {
         Utf8Str strKey = listPair.at(p++);
-        if (strKey.isEmpty()) /* Skip pairs with empty keys (e.g. "=FOO"). */
-        {
-            p++;
-            continue;
+        if (   strKey.isEmpty()
+            || strKey.equals("=")) /* Skip pairs with empty keys (e.g. "=FOO"). */
+        {
+            break;
         }
         Utf8Str strValue;
-        if (p < listPair.size())
+        if (p < listPair.size()) /* Does the list also contain a value? */
             strValue = listPair.at(p++);
-       mEnvironment[strKey] = strValue;
-    }
-
-    return VINF_SUCCESS;
+
+       rc = Set(strKey, strValue);
+    }
+
+    return rc;
 }
 
Index: /trunk/src/VBox/Main/src-client/GuestSessionImpl.cpp
===================================================================
--- /trunk/src/VBox/Main/src-client/GuestSessionImpl.cpp	(revision 42193)
+++ /trunk/src/VBox/Main/src-client/GuestSessionImpl.cpp	(revision 42194)
@@ -58,5 +58,8 @@
                        Utf8Str aUser, Utf8Str aPassword, Utf8Str aDomain, Utf8Str aName)
 {
+    LogFlowThisFuncEnter();
+
     AssertPtrReturn(aGuest, VERR_INVALID_POINTER);
+    AssertReturn(aSessionID, VERR_INVALID_PARAMETER);
 
     /* Enclose the state transition NotReady->InInit->Ready. */
@@ -75,4 +78,5 @@
     autoInitSpan.setSucceeded();
 
+    LogFlowFuncLeaveRC(VINF_SUCCESS);
     return VINF_SUCCESS;
 }
@@ -84,5 +88,5 @@
 void GuestSession::uninit(void)
 {
-    LogFlowThisFunc(("\n"));
+    LogFlowThisFuncEnter();
 
     /* Enclose the state transition Ready->InUninit->NotReady. */
@@ -117,4 +121,6 @@
 
     mData.mParent->sessionClose(this);
+
+    LogFlowThisFuncLeave();
 #endif
 }
@@ -128,4 +134,6 @@
     ReturnComNotImplemented();
 #else
+    LogFlowThisFuncEnter();
+
     CheckComArgOutPointerValid(aUser);
 
@@ -137,4 +145,5 @@
     mData.mCredentials.mUser.cloneTo(aUser);
 
+    LogFlowFuncLeaveRC(S_OK);
     return S_OK;
 #endif /* VBOX_WITH_GUEST_CONTROL */
@@ -146,4 +155,6 @@
     ReturnComNotImplemented();
 #else
+    LogFlowThisFuncEnter();
+
     CheckComArgOutPointerValid(aDomain);
 
@@ -155,4 +166,5 @@
     mData.mCredentials.mDomain.cloneTo(aDomain);
 
+    LogFlowFuncLeaveRC(S_OK);
     return S_OK;
 #endif /* VBOX_WITH_GUEST_CONTROL */
@@ -164,4 +176,6 @@
     ReturnComNotImplemented();
 #else
+    LogFlowThisFuncEnter();
+
     CheckComArgOutPointerValid(aName);
 
@@ -173,4 +187,5 @@
     mData.mName.cloneTo(aName);
 
+    LogFlowFuncLeaveRC(S_OK);
     return S_OK;
 #endif /* VBOX_WITH_GUEST_CONTROL */
@@ -182,4 +197,6 @@
     ReturnComNotImplemented();
 #else
+    LogFlowThisFuncEnter();
+
     CheckComArgOutPointerValid(aId);
 
@@ -191,4 +208,5 @@
     *aId = mData.mId;
 
+    LogFlowFuncLeaveRC(S_OK);
     return S_OK;
 #endif /* VBOX_WITH_GUEST_CONTROL */
@@ -200,4 +218,6 @@
     ReturnComNotImplemented();
 #else
+    LogFlowThisFuncEnter();
+
     CheckComArgOutPointerValid(aTimeout);
 
@@ -209,4 +229,5 @@
     *aTimeout = mData.mTimeout;
 
+    LogFlowFuncLeaveRC(S_OK);
     return S_OK;
 #endif /* VBOX_WITH_GUEST_CONTROL */
@@ -218,4 +239,6 @@
     ReturnComNotImplemented();
 #else
+    LogFlowThisFuncEnter();
+
     CheckComArgOutSafeArrayPointerValid(aEnvironment);
 
@@ -225,9 +248,16 @@
     AutoReadLock alock(this COMMA_LOCKVAL_SRC_POS);
 
-    com::SafeArray<BSTR> arguments(mData.mEnvironment.Size());
-    for (size_t i = 0; i < arguments.size(); i++)
-        arguments[i] = Bstr(mData.mEnvironment.Get(i)).raw();
-    arguments.detachTo(ComSafeArrayOutArg(aEnvironment));
-
+    size_t cEnvVars = mData.mEnvironment.Size();
+    LogFlowThisFunc(("%s cEnvVars=%RU32\n", mData.mName.c_str(), cEnvVars));
+    com::SafeArray<BSTR> environment(cEnvVars);
+
+    for (size_t i = 0; i < cEnvVars; i++)
+    {
+        Bstr strEnv(mData.mEnvironment.Get(i));
+        strEnv.cloneTo(&environment[i]);
+    }
+    environment.detachTo(ComSafeArrayOutArg(aEnvironment));
+
+    LogFlowFuncLeaveRC(S_OK);
     return S_OK;
 #endif /* VBOX_WITH_GUEST_CONTROL */
@@ -239,4 +269,6 @@
     ReturnComNotImplemented();
 #else
+    LogFlowThisFuncEnter();
+
     CheckComArgOutSafeArrayPointerValid(aProcesses);
 
@@ -249,4 +281,5 @@
     collection.detachTo(ComSafeArrayOutArg(aProcesses));
 
+    LogFlowFuncLeaveRC(S_OK);
     return S_OK;
 #endif /* VBOX_WITH_GUEST_CONTROL */
@@ -258,4 +291,6 @@
     ReturnComNotImplemented();
 #else
+    LogFlowThisFuncEnter();
+
     CheckComArgOutSafeArrayPointerValid(aDirectories);
 
@@ -268,4 +303,5 @@
     collection.detachTo(ComSafeArrayOutArg(aDirectories));
 
+    LogFlowFuncLeaveRC(S_OK);
     return S_OK;
 #endif /* VBOX_WITH_GUEST_CONTROL */
@@ -277,4 +313,6 @@
     ReturnComNotImplemented();
 #else
+    LogFlowThisFuncEnter();
+
     CheckComArgOutSafeArrayPointerValid(aFiles);
 
@@ -287,4 +325,5 @@
     collection.detachTo(ComSafeArrayOutArg(aFiles));
 
+    LogFlowFuncLeaveRC(S_OK);
     return S_OK;
 #endif /* VBOX_WITH_GUEST_CONTROL */
@@ -444,6 +483,9 @@
     ReturnComNotImplemented();
 #else
+    LogFlowThisFuncEnter();
+
     uninit();
 
+    LogFlowFuncLeaveRC(S_OK);
     return S_OK;
 #endif /* VBOX_WITH_GUEST_CONTROL */
@@ -455,4 +497,6 @@
     ReturnComNotImplemented();
 #else
+    LogFlowThisFuncEnter();
+
     AutoCaller autoCaller(this);
     if (FAILED(autoCaller.rc())) return autoCaller.rc();
@@ -467,4 +511,6 @@
     ReturnComNotImplemented();
 #else
+    LogFlowThisFuncEnter();
+
     AutoCaller autoCaller(this);
     if (FAILED(autoCaller.rc())) return autoCaller.rc();
@@ -479,4 +525,6 @@
     ReturnComNotImplemented();
 #else
+    LogFlowThisFuncEnter();
+
     AutoCaller autoCaller(this);
     if (FAILED(autoCaller.rc())) return autoCaller.rc();
@@ -491,4 +539,6 @@
     ReturnComNotImplemented();
 #else
+    LogFlowThisFuncEnter();
+
     AutoCaller autoCaller(this);
     if (FAILED(autoCaller.rc())) return autoCaller.rc();
@@ -503,4 +553,6 @@
     ReturnComNotImplemented();
 #else
+    LogFlowThisFuncEnter();
+
     AutoCaller autoCaller(this);
     if (FAILED(autoCaller.rc())) return autoCaller.rc();
@@ -515,4 +567,6 @@
     ReturnComNotImplemented();
 #else
+    LogFlowThisFuncEnter();
+
     AutoCaller autoCaller(this);
     if (FAILED(autoCaller.rc())) return autoCaller.rc();
@@ -527,4 +581,6 @@
     ReturnComNotImplemented();
 #else
+    LogFlowThisFuncEnter();
+
     AutoCaller autoCaller(this);
     if (FAILED(autoCaller.rc())) return autoCaller.rc();
@@ -539,4 +595,6 @@
     ReturnComNotImplemented();
 #else
+    LogFlowThisFuncEnter();
+
     AutoCaller autoCaller(this);
     if (FAILED(autoCaller.rc())) return autoCaller.rc();
@@ -551,4 +609,6 @@
     ReturnComNotImplemented();
 #else
+    LogFlowThisFuncEnter();
+
     AutoCaller autoCaller(this);
     if (FAILED(autoCaller.rc())) return autoCaller.rc();
@@ -563,4 +623,6 @@
     ReturnComNotImplemented();
 #else
+    LogFlowThisFuncEnter();
+
     AutoCaller autoCaller(this);
     if (FAILED(autoCaller.rc())) return autoCaller.rc();
@@ -575,4 +637,6 @@
     ReturnComNotImplemented();
 #else
+    LogFlowThisFuncEnter();
+
     AutoCaller autoCaller(this);
     if (FAILED(autoCaller.rc())) return autoCaller.rc();
@@ -587,4 +651,6 @@
     ReturnComNotImplemented();
 #else
+    LogFlowThisFuncEnter();
+
     AutoCaller autoCaller(this);
     if (FAILED(autoCaller.rc())) return autoCaller.rc();
@@ -594,4 +660,30 @@
     mData.mEnvironment.Clear();
 
+    LogFlowFuncLeaveRC(S_OK);
+    return S_OK;
+#endif /* VBOX_WITH_GUEST_CONTROL */
+}
+
+STDMETHODIMP GuestSession::EnvironmentGet(IN_BSTR aName, BSTR *aValue)
+{
+#ifndef VBOX_WITH_GUEST_CONTROL
+    ReturnComNotImplemented();
+#else
+    LogFlowThisFuncEnter();
+
+    if (RT_UNLIKELY((aName) == NULL || *(aName) == '\0'))
+        return setError(E_INVALIDARG, tr("No value name specified"));
+
+    CheckComArgOutPointerValid(aValue);
+
+    AutoCaller autoCaller(this);
+    if (FAILED(autoCaller.rc())) return autoCaller.rc();
+
+    AutoReadLock alock(this COMMA_LOCKVAL_SRC_POS);
+
+    Bstr strValue(mData.mEnvironment.Get(Utf8Str(aName)));
+    strValue.cloneTo(aValue);
+
+    LogFlowFuncLeaveRC(S_OK);
     return S_OK;
 #endif /* VBOX_WITH_GUEST_CONTROL */
@@ -603,4 +695,9 @@
     ReturnComNotImplemented();
 #else
+    LogFlowThisFuncEnter();
+
+    if (RT_UNLIKELY((aName) == NULL || *(aName) == '\0'))
+        return setError(E_INVALIDARG, tr("No value name specified"));
+
     AutoCaller autoCaller(this);
     if (FAILED(autoCaller.rc())) return autoCaller.rc();
@@ -608,7 +705,9 @@
     AutoWriteLock alock(this COMMA_LOCKVAL_SRC_POS);
 
-    mData.mEnvironment.Set(Utf8Str(aName), Utf8Str(aValue));
-
-    return S_OK;
+    int rc = mData.mEnvironment.Set(Utf8Str(aName), Utf8Str(aValue));
+
+    HRESULT hr = RT_SUCCESS(rc) ? S_OK : VBOX_E_IPRT_ERROR;
+    LogFlowFuncLeaveRC(hr);
+    return hr;
 #endif /* VBOX_WITH_GUEST_CONTROL */
 }
@@ -619,4 +718,6 @@
     ReturnComNotImplemented();
 #else
+    LogFlowThisFuncEnter();
+
     AutoCaller autoCaller(this);
     if (FAILED(autoCaller.rc())) return autoCaller.rc();
@@ -628,7 +729,13 @@
     int rc = VINF_SUCCESS;
     for (size_t i = 0; i < environment.size() && RT_SUCCESS(rc); i++)
-        rc = mData.mEnvironment.Set(Utf8Str(environment[i]));
-
-    return RT_SUCCESS(rc) ? S_OK : VBOX_E_IPRT_ERROR;
+    {
+        Utf8Str strEnv(environment[i]);
+        if (!strEnv.isEmpty()) /* Silently skip empty entries. */
+            rc = mData.mEnvironment.Set(strEnv);
+    }
+
+    HRESULT hr = RT_SUCCESS(rc) ? S_OK : VBOX_E_IPRT_ERROR;
+    LogFlowFuncLeaveRC(hr);
+    return hr;
 #endif /* VBOX_WITH_GUEST_CONTROL */
 }
@@ -639,4 +746,6 @@
     ReturnComNotImplemented();
 #else
+    LogFlowThisFuncEnter();
+
     AutoCaller autoCaller(this);
     if (FAILED(autoCaller.rc())) return autoCaller.rc();
@@ -646,4 +755,5 @@
     mData.mEnvironment.Unset(Utf8Str(aName));
 
+    LogFlowFuncLeaveRC(S_OK);
     return S_OK;
 #endif /* VBOX_WITH_GUEST_CONTROL */
@@ -655,4 +765,6 @@
     ReturnComNotImplemented();
 #else
+    LogFlowThisFuncEnter();
+
     AutoCaller autoCaller(this);
     if (FAILED(autoCaller.rc())) return autoCaller.rc();
@@ -667,4 +779,6 @@
     ReturnComNotImplemented();
 #else
+    LogFlowThisFuncEnter();
+
     AutoCaller autoCaller(this);
     if (FAILED(autoCaller.rc())) return autoCaller.rc();
@@ -679,4 +793,6 @@
     ReturnComNotImplemented();
 #else
+    LogFlowThisFuncEnter();
+
     AutoCaller autoCaller(this);
     if (FAILED(autoCaller.rc())) return autoCaller.rc();
@@ -691,4 +807,6 @@
     ReturnComNotImplemented();
 #else
+    LogFlowThisFuncEnter();
+
     AutoCaller autoCaller(this);
     if (FAILED(autoCaller.rc())) return autoCaller.rc();
@@ -703,4 +821,6 @@
     ReturnComNotImplemented();
 #else
+    LogFlowThisFuncEnter();
+
     AutoCaller autoCaller(this);
     if (FAILED(autoCaller.rc())) return autoCaller.rc();
@@ -715,4 +835,6 @@
     ReturnComNotImplemented();
 #else
+    LogFlowThisFuncEnter();
+
     AutoCaller autoCaller(this);
     if (FAILED(autoCaller.rc())) return autoCaller.rc();
@@ -727,4 +849,6 @@
     ReturnComNotImplemented();
 #else
+    LogFlowThisFuncEnter();
+
     AutoCaller autoCaller(this);
     if (FAILED(autoCaller.rc())) return autoCaller.rc();
@@ -739,4 +863,6 @@
     ReturnComNotImplemented();
 #else
+    LogFlowThisFuncEnter();
+
     AutoCaller autoCaller(this);
     if (FAILED(autoCaller.rc())) return autoCaller.rc();
@@ -752,4 +878,5 @@
     ReturnComNotImplemented();
 #else
+    LogFlowThisFuncEnter();
 
     com::SafeArray<LONG> affinity;
@@ -768,4 +895,6 @@
     ReturnComNotImplemented();
 #else
+    LogFlowThisFuncEnter();
+
     AutoCaller autoCaller(this);
     if (FAILED(autoCaller.rc())) return autoCaller.rc();
@@ -812,5 +941,8 @@
         rc = processCreateExInteral(procInfo, aProcess);
     }
-    return RT_SUCCESS(rc) ? S_OK : VBOX_E_IPRT_ERROR;
+
+    HRESULT hr = RT_SUCCESS(rc) ? S_OK : VBOX_E_IPRT_ERROR;
+    LogFlowFuncLeaveRC(hr);
+    return hr;
 #endif /* VBOX_WITH_GUEST_CONTROL */
 }
@@ -821,4 +953,6 @@
     ReturnComNotImplemented();
 #else
+    LogFlowThisFuncEnter();
+
     AutoCaller autoCaller(this);
     if (FAILED(autoCaller.rc())) return autoCaller.rc();
@@ -833,4 +967,6 @@
     ReturnComNotImplemented();
 #else
+    LogFlowThisFuncEnter();
+
     AutoCaller autoCaller(this);
     if (FAILED(autoCaller.rc())) return autoCaller.rc();
@@ -845,4 +981,6 @@
     ReturnComNotImplemented();
 #else
+    LogFlowThisFuncEnter();
+
     AutoCaller autoCaller(this);
     if (FAILED(autoCaller.rc())) return autoCaller.rc();
@@ -857,4 +995,6 @@
     ReturnComNotImplemented();
 #else
+    LogFlowThisFuncEnter();
+
     AutoCaller autoCaller(this);
     if (FAILED(autoCaller.rc())) return autoCaller.rc();
@@ -869,4 +1009,6 @@
     ReturnComNotImplemented();
 #else
+    LogFlowThisFuncEnter();
+
     AutoCaller autoCaller(this);
     if (FAILED(autoCaller.rc())) return autoCaller.rc();
@@ -881,4 +1023,6 @@
     ReturnComNotImplemented();
 #else
+    LogFlowThisFuncEnter();
+
     AutoCaller autoCaller(this);
     if (FAILED(autoCaller.rc())) return autoCaller.rc();
@@ -893,9 +1037,11 @@
     ReturnComNotImplemented();
 #else
-    AutoCaller autoCaller(this);
-    if (FAILED(autoCaller.rc())) return autoCaller.rc();
-
-    ReturnComNotImplemented();
-#endif /* VBOX_WITH_GUEST_CONTROL */
-}
-
+    LogFlowThisFuncEnter();
+
+    AutoCaller autoCaller(this);
+    if (FAILED(autoCaller.rc())) return autoCaller.rc();
+
+    ReturnComNotImplemented();
+#endif /* VBOX_WITH_GUEST_CONTROL */
+}
+
