Index: /trunk/include/VBox/vmm/pdmifs.h
===================================================================
--- /trunk/include/VBox/vmm/pdmifs.h	(revision 71625)
+++ /trunk/include/VBox/vmm/pdmifs.h	(revision 71626)
@@ -843,11 +843,16 @@
      * @param   pInterface          Pointer to this interface.
      * @param   enmCmd              The command type (don't re-read from pCmd).
+     * @param   fGuestCmd           Set if the command origins with the guest and
+     *                              pCmd must be considered volatile.
      * @param   pCmd                Video HW Acceleration Command to be processed.
-     * @returns VINF_SUCCESS - command is completed,
-     * VINF_CALLBACK_RETURN - command will by asynchronously completed via complete callback
-     * VERR_INVALID_STATE - the command could not be processed (most likely because the framebuffer was disconnected) - the post should be retried later
-     * @thread  The emulation thread.
-     */
-    DECLR3CALLBACKMEMBER(int, pfnVHWACommandProcess,(PPDMIDISPLAYCONNECTOR pInterface, int enmCmd,
+     * @retval  VINF_SUCCESS - command is completed,
+     * @retval  VINF_CALLBACK_RETURN if command will by asynchronously completed via
+     *          complete callback.
+     * @retval  VERR_INVALID_STATE if the command could not be processed (most
+     *          likely because the framebuffer was disconnected) - the post should
+     *          be retried later.
+     * @thread  EMT
+     */
+    DECLR3CALLBACKMEMBER(int, pfnVHWACommandProcess,(PPDMIDISPLAYCONNECTOR pInterface, int enmCmd, bool fGuestCmd,
                                                      VBOXVHWACMD RT_UNTRUSTED_VOLATILE_GUEST *pCmd));
 
@@ -857,5 +862,5 @@
      * @param   pInterface          Pointer to this interface.
      * @param   pCmd                Video HW Acceleration Command to be processed.
-     * @thread  The emulation thread.
+     * @thread  EMT
      */
     DECLR3CALLBACKMEMBER(void, pfnCrHgsmiCommandProcess,(PPDMIDISPLAYCONNECTOR pInterface,
@@ -868,5 +873,5 @@
      * @param   pInterface          Pointer to this interface.
      * @param   pCmd                Video HW Acceleration Command to be processed.
-     * @thread  The emulation thread.
+     * @thread  EMT
      */
     DECLR3CALLBACKMEMBER(void, pfnCrHgsmiControlProcess,(PPDMIDISPLAYCONNECTOR pInterface,
@@ -882,5 +887,5 @@
      * @param   pfnCompletion       Undocumented!
      * @param   pvCompletion        Undocumented!
-     * @thread  The emulation thread.
+     * @thread  EMT
      */
     DECLR3CALLBACKMEMBER(int, pfnCrHgcmCtlSubmit,(PPDMIDISPLAYCONNECTOR pInterface, struct VBOXCRCMDCTL *pCmd, uint32_t cbCmd,
Index: /trunk/src/VBox/Devices/Graphics/DevVGA_VBVA.cpp
===================================================================
--- /trunk/src/VBox/Devices/Graphics/DevVGA_VBVA.cpp	(revision 71625)
+++ /trunk/src/VBox/Devices/Graphics/DevVGA_VBVA.cpp	(revision 71626)
@@ -773,9 +773,9 @@
         if (cbPointerData > pCtx->mouseShapeInfo.cbAllocated)
         {
-            RTMemFree (pCtx->mouseShapeInfo.pu8Shape);
+            RTMemFree(pCtx->mouseShapeInfo.pu8Shape);
             pCtx->mouseShapeInfo.pu8Shape = NULL;
             pCtx->mouseShapeInfo.cbShape = 0;
 
-            uint8_t *pu8Shape = (uint8_t *)RTMemAlloc (cbPointerData);
+            uint8_t *pu8Shape = (uint8_t *)RTMemAlloc(cbPointerData);
             if (pu8Shape)
             {
@@ -1004,5 +1004,6 @@
     RTListForEach(&pVGAState->pendingVhwaCommands.PendingList, pIter, VBOX_VHWA_PENDINGCMD, Node)
     {
-        rc = SSMR3PutU32(pSSM, (uint32_t)(((uint8_t*)pIter->pCommand) - ((uint8_t*)pVGAState->vram_ptrR3)));
+        AssertContinue((uintptr_t)pIter->pCommand - (uintptr_t)pVGAState->vram_ptrR3 < pVGAState->vram_size);
+        rc = SSMR3PutU32(pSSM, (uint32_t)(((uint8_t *)pIter->pCommand) - ((uint8_t *)pVGAState->vram_ptrR3)));
         AssertRCReturn(rc, rc);
     }
@@ -1031,53 +1032,77 @@
 
 
+/** Worker for vbvaVHWACommandSubmit. */
+static bool vbvaVHWACommandSubmitInner(PVGASTATE pVGAState, VBOXVHWACMD RT_UNTRUSTED_VOLATILE_GUEST *pCommand, bool *pfPending)
+{
+    *pfPending = false;
+
+    /*
+     * Read the command type and validate it and our driver state.
+     */
+    VBOXVHWACMD_TYPE enmCmd = pCommand->enmCmd;
+    RT_UNTRUSTED_NONVOLATILE_COPY_FENCE();
+
+    bool fGuestCmd = (uintptr_t)pCommand - (uintptr_t)pVGAState->vram_ptrR3 < pVGAState->vram_size;
+    ASSERT_GUEST_LOGREL_MSG_STMT_RETURN(   !fGuestCmd
+                                        || (   enmCmd != VBOXVHWACMD_TYPE_HH_CONSTRUCT
+                                            && enmCmd != VBOXVHWACMD_TYPE_HH_RESET
+                                            && enmCmd != VBOXVHWACMD_TYPE_HH_DISABLE
+                                            && enmCmd != VBOXVHWACMD_TYPE_HH_ENABLE
+                                            && enmCmd != VBOXVHWACMD_TYPE_HH_SAVESTATE_SAVEBEGIN
+                                            && enmCmd != VBOXVHWACMD_TYPE_HH_SAVESTATE_SAVEEND
+                                            && enmCmd != VBOXVHWACMD_TYPE_HH_SAVESTATE_SAVEPERFORM
+                                            && enmCmd != VBOXVHWACMD_TYPE_HH_SAVESTATE_LOADPERFORM),
+                                        ("enmCmd=%d\n", enmCmd),
+                                        pCommand->rc = VERR_INVALID_PARAMETER,
+                                        true);
+    ASSERT_GUEST_STMT_RETURN(pVGAState->pDrv->pfnVHWACommandProcess, pCommand->rc = VERR_INVALID_STATE, true);
+    RT_UNTRUSTED_VALIDATED_FENCE();
+
+    /*
+     * Call the driver to process the command.
+     */
+    Log(("VGA Command >>> %#p, %d\n", pCommand, enmCmd));
+    int rc = pVGAState->pDrv->pfnVHWACommandProcess(pVGAState->pDrv, enmCmd, fGuestCmd, pCommand);
+    if (rc == VINF_CALLBACK_RETURN)
+    {
+        Log(("VGA Command --- Going Async %#p, %d\n", pCommand, enmCmd));
+        *pfPending = true;
+        return true; /* Command will be completed asynchronously by the driver and need not be put in the pending list. */
+    }
+
+    if (rc == VERR_INVALID_STATE)
+    {
+        Log(("VGA Command --- Trying Pend %#p, %d\n", pCommand, enmCmd));
+        if (vbvaVHWACommandCanPend(enmCmd))
+        {
+            Log(("VGA Command --- Can Pend %#p, %d\n", pCommand, enmCmd));
+            *pfPending = true;
+            return false; /* put on pending list so it can be retried?? */
+        }
+
+        Log(("VGA Command --- Can NOT Pend %#p, %d\n", pCommand, enmCmd));
+    }
+    else
+        Log(("VGA Command --- Going Complete Sync rc %d %#p, %d\n", rc, pCommand, enmCmd));
+
+    /* the command was completed, take a special care about it (see caller) */
+    pCommand->rc = rc;
+    return true;
+}
+
+
 static bool vbvaVHWACommandSubmit(PVGASTATE pVGAState, VBOXVHWACMD RT_UNTRUSTED_VOLATILE_GUEST *pCommand, bool fAsyncCommand)
 {
-    VBOXVHWACMD_TYPE enmCmd = pCommand->enmCmd;
-    ASMCompilerBarrier();
-
-    bool fPend = false;
-    if (pVGAState->pDrv->pfnVHWACommandProcess)
-    {
-        Log(("VGA Command >>> %#p, %d\n", pCommand, enmCmd));
-        int rc = pVGAState->pDrv->pfnVHWACommandProcess(pVGAState->pDrv, enmCmd, pCommand);
-        if (rc == VINF_CALLBACK_RETURN)
-        {
-            Log(("VGA Command --- Going Async %#p, %d\n", pCommand, enmCmd));
-            return true; /* command will be completed asynchronously, return right away */
-        }
-        if (rc == VERR_INVALID_STATE)
-        {
-            Log(("VGA Command --- Trying Pend %#p, %d\n", pCommand, enmCmd));
-            fPend = vbvaVHWACommandCanPend(enmCmd);
-            if (!fPend)
-            {
-                Log(("VGA Command --- Can NOT Pend %#p, %d\n", pCommand, enmCmd));
-                pCommand->rc = rc;
-            }
-            else
-                Log(("VGA Command --- Can Pend %#p, %d\n", pCommand, enmCmd));
-        }
-        else
-        {
-            Log(("VGA Command --- Going Complete Sync rc %d %#p, %d\n", rc, pCommand, enmCmd));
-            pCommand->rc = rc;
-        }
-
-        /* the command was completed, take a special care about it (seee below) */
-    }
-    else
-    {
-        AssertFailed();
-        pCommand->rc = VERR_INVALID_STATE;
-    }
-
-    if (fPend)
-        return false;
-
-    vbvaVHWACommandComplete(pVGAState, pCommand, fAsyncCommand);
-
-    return true;
-}
-
+    bool fPending = false;
+    bool fRet = vbvaVHWACommandSubmitInner(pVGAState, pCommand, &fPending);
+    if (!fPending)
+        vbvaVHWACommandComplete(pVGAState, pCommand, fAsyncCommand);
+    return fRet;
+}
+
+
+/**
+ * @returns false if commands are pending, otherwise true.
+ */
 static bool vbvaVHWACheckPendingCommands(PVGASTATE pVGAState)
 {
@@ -1093,5 +1118,5 @@
         {
             PDMCritSectLeave(&pVGAState->CritSect);
-            return false; /* the command should be pended still */
+            return false; /* the command should be still pending */
         }
 
@@ -1111,4 +1136,5 @@
     vbvaVHWACheckPendingCommands(pVGAState);
 }
+
 static void vbvaVHWAHandleCommand(PVGASTATE pVGAState, VBOXVHWACMD RT_UNTRUSTED_VOLATILE_GUEST *pCmd)
 {
@@ -1127,29 +1153,25 @@
 }
 
-static int vbvaVHWAHHCommandPost(PVGASTATE pVGAState, VBOXVHWACMD* pCmd)
+static int vbvaVHWAHHCommandPost(PVGASTATE pVGAState, VBOXVHWACMD *pCmd)
 {
     RTSEMEVENT hComplEvent;
     int rc = RTSemEventCreate(&hComplEvent);
     AssertRC(rc);
-    if(RT_SUCCESS(rc))
+    if (RT_SUCCESS(rc))
     {
         /* ensure the cmd is not deleted until we process it */
-        vbvaVHWAHHCommandRetain (pCmd);
-        VBOXVHWA_HH_CALLBACK_SET(pCmd, vbvaVHWAHHCommandSetEventCallback, (void*)hComplEvent);
+        vbvaVHWAHHCommandRetain(pCmd);
+
+        VBOXVHWA_HH_CALLBACK_SET(pCmd, vbvaVHWAHHCommandSetEventCallback, (void *)hComplEvent);
         vbvaVHWAHandleCommand(pVGAState, pCmd);
-        if((ASMAtomicReadU32((volatile uint32_t *)&pCmd->Flags)  & VBOXVHWACMD_FLAG_HG_ASYNCH) != 0)
-        {
-            rc = RTSemEventWaitNoResume(hComplEvent, RT_INDEFINITE_WAIT);
-        }
-        else
-        {
-            /* the command is completed */
-        }
+
+        if ((ASMAtomicReadU32((volatile uint32_t *)&pCmd->Flags) & VBOXVHWACMD_FLAG_HG_ASYNCH) != 0)
+            rc = RTSemEventWaitNoResume(hComplEvent, RT_INDEFINITE_WAIT); /** @todo Why the NoResume and event leaking here? */
+        /* else: the command is completed */
 
         AssertRC(rc);
-        if(RT_SUCCESS(rc))
-        {
+        if (RT_SUCCESS(rc))
             RTSemEventDestroy(hComplEvent);
-        }
+
         vbvaVHWAHHCommandRelease(pCmd);
     }
@@ -1222,5 +1244,5 @@
     VBOXVHWACMD *pCmd = vbvaVHWAHHCommandCreate(VBOXVHWACMD_TYPE_HH_RESET, 0, 0);
     Assert(pCmd);
-    if(pCmd)
+    if (pCmd)
     {
         int rc = VINF_SUCCESS;
@@ -1229,5 +1251,5 @@
         do
         {
-            rc =vbvaVHWAHHCommandPost(pVGAState, pCmd);
+            rc = vbvaVHWAHHCommandPost(pVGAState, pCmd);
             AssertRC(rc);
             if(RT_SUCCESS(rc))
@@ -1333,14 +1355,17 @@
 }
 
+/**
+ * @interface_method_impl{PDMIDISPLAYVBVACALLBACKS,pfnVHWACommandCompleteAsync}
+ */
 DECLCALLBACK(int) vbvaVHWACommandCompleteAsync(PPDMIDISPLAYVBVACALLBACKS pInterface, VBOXVHWACMD RT_UNTRUSTED_VOLATILE_GUEST *pCmd)
 {
+    PVGASTATE pVGAState = PPDMIDISPLAYVBVACALLBACKS_2_PVGASTATE(pInterface);
     int rc;
     Log(("VGA Command <<< Async rc %d %#p, %d\n", pCmd->rc, pCmd, pCmd->enmCmd));
 
-    if ((pCmd->Flags & VBOXVHWACMD_FLAG_HH_CMD) == 0)
-    {
-        PVGASTATE pVGAState = PPDMIDISPLAYVBVACALLBACKS_2_PVGASTATE(pInterface);
+    if ((uintptr_t)pCmd - (uintptr_t)pVGAState->vram_ptrR3 < pVGAState->vram_size)
+    {
         PHGSMIINSTANCE pIns = pVGAState->pHGSMI;
-
+        Assert(!(pCmd->Flags & VBOXVHWACMD_FLAG_HH_CMD));
         Assert(pCmd->Flags & VBOXVHWACMD_FLAG_HG_ASYNCH);
 #ifdef VBOX_WITH_WDDM
@@ -1410,4 +1435,5 @@
     else
     {
+        Assert(pCmd->Flags & VBOXVHWACMD_FLAG_HH_CMD);
         PFNVBOXVHWA_HH_CALLBACK pfn = VBOXVHWA_HH_CALLBACK_GET(pCmd);
         if (pfn)
@@ -2324,13 +2350,20 @@
     VBVACONTEXT   *pCtx = (VBVACONTEXT *)HGSMIContext(pIns);
 
+    /*
+     * Copy and validate the request.
+     */
     uint16_t const cHintsQueried         = pQueryModeHints->cHintsQueried;
     uint16_t const cbHintStructureGuest  = pQueryModeHints->cbHintStructureGuest;
-    ASMCompilerBarrier();
+    RT_UNTRUSTED_NONVOLATILE_COPY_FENCE();
 
     LogRelFlowFunc(("VBVA: HandleQueryModeHints: cHintsQueried=%RU16, cbHintStructureGuest=%RU16\n",
                     cHintsQueried, cbHintStructureGuest));
-    if (cbBuffer < sizeof(VBVAQUERYMODEHINTS) + (uint32_t)cHintsQueried * cbHintStructureGuest)
-        return VERR_INVALID_PARAMETER;
-
+    ASSERT_GUEST_RETURN(cbBuffer >= sizeof(VBVAQUERYMODEHINTS) + (uint32_t)cHintsQueried * cbHintStructureGuest,
+                        VERR_INVALID_PARAMETER);
+    RT_UNTRUSTED_VALIDATED_FENCE();
+
+    /*
+     * Produce the requested data.
+     */
     uint8_t *pbHint = (uint8_t *)(pQueryModeHints + 1);
     memset(pbHint, ~0, cbBuffer - sizeof(VBVAQUERYMODEHINTS));
@@ -2582,6 +2615,6 @@
             if (cbBuffer >= sizeof(VBVAQUERYMODEHINTS))
             {
-                VBVAQUERYMODEHINTS RT_UNTRUSTED_VOLATILE_GUEST *pQueryModeHints;
-                pQueryModeHints = (VBVAQUERYMODEHINTS RT_UNTRUSTED_VOLATILE_GUEST *)pvBuffer;
+                VBVAQUERYMODEHINTS RT_UNTRUSTED_VOLATILE_GUEST *pQueryModeHints
+                    = (VBVAQUERYMODEHINTS RT_UNTRUSTED_VOLATILE_GUEST *)pvBuffer;
                 rc = vbvaHandleQueryModeHints(pVGAState, pQueryModeHints, cbBuffer);
                 pQueryModeHints->rc = rc;
@@ -2598,6 +2631,6 @@
                     VBVAREPORTINPUTMAPPING RT_UNTRUSTED_VOLATILE_GUEST *pInputMapping
                         = (VBVAREPORTINPUTMAPPING RT_UNTRUSTED_VOLATILE_GUEST *)pvBuffer;
-                    inputMapping.x = pInputMapping->x;
-                    inputMapping.y = pInputMapping->y;
+                    inputMapping.x  = pInputMapping->x;
+                    inputMapping.y  = pInputMapping->y;
                     inputMapping.cx = pInputMapping->cx;
                     inputMapping.cy = pInputMapping->cy;
Index: /trunk/src/VBox/Devices/Graphics/HGSMI/HGSMIHost.cpp
===================================================================
--- /trunk/src/VBox/Devices/Graphics/HGSMI/HGSMIHost.cpp	(revision 71625)
+++ /trunk/src/VBox/Devices/Graphics/HGSMI/HGSMIHost.cpp	(revision 71626)
@@ -983,5 +983,5 @@
      */
     int rc = hgsmiHostHeapLock(pIns);
-    AssertReturn(rc, rc);
+    AssertRCReturn(rc, rc);
 
     /* It is possible to change the heap only if there is no pending allocations. */
Index: /trunk/src/VBox/Frontends/VirtualBox/src/VBoxFBOverlay.cpp
===================================================================
--- /trunk/src/VBox/Frontends/VirtualBox/src/VBoxFBOverlay.cpp	(revision 71625)
+++ /trunk/src/VBox/Frontends/VirtualBox/src/VBoxFBOverlay.cpp	(revision 71626)
@@ -233,5 +233,5 @@
     char *buf = (char*)malloc(VBOXVHWACMD_SIZE_FROMBODYSIZE(size));
     memset(buf, 0, size);
-    VBOXVHWACMD * pCmd = (VBOXVHWACMD*)buf;
+    VBOXVHWACMD *pCmd = (VBOXVHWACMD *)buf;
     pCmd->enmCmd = type;
     pCmd->Flags = VBOXVHWACMD_FLAG_HH_CMD;
@@ -3195,5 +3195,5 @@
     char *buf = (char*)malloc(VBOXVHWACMD_SIZE(VBOXVHWACMD_SURF_CREATE));
     memset(buf, 0, sizeof(VBOXVHWACMD_SIZE(VBOXVHWACMD_SURF_CREATE)));
-    VBOXVHWACMD * pCmd = (VBOXVHWACMD*)buf;
+    VBOXVHWACMD *pCmd = (VBOXVHWACMD *)buf;
     pCmd->enmCmd = VBOXVHWACMD_TYPE_SURF_CREATE;
     pCmd->Flags = VBOXVHWACMD_FLAG_HH_CMD;
@@ -3347,5 +3347,5 @@
 }
 
-int VBoxVHWAImage::vhwaLoadOverlayData(VHWACommandList * pCmdList, struct SSMHANDLE * pSSM, uint32_t u32Version)
+int VBoxVHWAImage::vhwaLoadOverlayData(VHWACommandList *pCmdList, struct SSMHANDLE *pSSM, uint32_t u32Version)
 {
     Q_UNUSED(u32Version);
@@ -3510,5 +3510,5 @@
     {
         memset(buf, 0, sizeof(VBOXVHWACMD));
-        VBOXVHWACMD * pCmd = (VBOXVHWACMD*)buf;
+        VBOXVHWACMD *pCmd = (VBOXVHWACMD *)buf;
         pCmd->enmCmd = VBOXVHWACMD_TYPE_ENABLE;
         pCmd->Flags = VBOXVHWACMD_FLAG_HH_CMD;
@@ -4296,5 +4296,5 @@
 }
 
-int VBoxQGLOverlay::onVHWACommand(struct VBOXVHWACMD * pCmd)
+int VBoxQGLOverlay::onVHWACommand(struct VBOXVHWACMD RT_UNTRUSTED_VOLATILE_GUEST *pCmd)
 {
     Log(("VHWA Command >>> %#p, %d\n", pCmd, pCmd->enmCmd));
@@ -4400,5 +4400,5 @@
     pCmd->Flags |= VBOXVHWACMD_FLAG_HG_ASYNCH;
 
-    mCmdPipe.postCmd(VBOXVHWA_PIPECMD_VHWA, pCmd);
+    mCmdPipe.postCmd(VBOXVHWA_PIPECMD_VHWA, (void *)pCmd);
     return VINF_CALLBACK_RETURN;
 
@@ -4527,5 +4527,5 @@
 }
 
-void VBoxQGLOverlay::vboxDoVHWACmd(void *cmd)
+void VBoxQGLOverlay::vboxDoVHWACmd(void RT_UNTRUSTED_VOLATILE_GUEST *cmd)
 {
     vboxDoVHWACmdExec(cmd);
@@ -4688,12 +4688,14 @@
 }
 
-void VBoxQGLOverlay::vboxDoVHWACmdExec(void *cmd)
-{
-    struct VBOXVHWACMD * pCmd = (struct VBOXVHWACMD *)cmd;
-    switch(pCmd->enmCmd)
+void VBoxQGLOverlay::vboxDoVHWACmdExec(void RT_UNTRUSTED_VOLATILE_GUEST *cmd)
+{
+    struct VBOXVHWACMD RT_UNTRUSTED_VOLATILE_GUEST *pCmd = (struct VBOXVHWACMD RT_UNTRUSTED_VOLATILE_GUEST *)cmd;
+    VBOXVHWACMD_TYPE enmCmd = pCmd->enmCmd;
+    RT_UNTRUSTED_NONVOLATILE_COPY_FENCE();
+    switch (enmCmd)
     {
         case VBOXVHWACMD_TYPE_SURF_CANCREATE:
         {
-            VBOXVHWACMD_SURF_CANCREATE RT_UNTRUSTED_VOLATILE_GUEST  *pBody = VBOXVHWACMD_BODY(pCmd, VBOXVHWACMD_SURF_CANCREATE);
+            VBOXVHWACMD_SURF_CANCREATE RT_UNTRUSTED_VOLATILE_GUEST *pBody = VBOXVHWACMD_BODY(pCmd, VBOXVHWACMD_SURF_CANCREATE);
             Assert(!mGlOn == !mOverlayImage.hasSurfaces());
             initGl();
@@ -5043,5 +5045,5 @@
 }
 
-void VBoxVHWACommandElementProcessor::postCmd(VBOXVHWA_PIPECMD_TYPE aType, void * pvData)
+void VBoxVHWACommandElementProcessor::postCmd(VBOXVHWA_PIPECMD_TYPE aType, void *pvData)
 {
     QObject *pNotifyObject = NULL;
@@ -5239,8 +5241,8 @@
         case VBOXVHWA_PIPECMD_VHWA:
             {
-                struct VBOXVHWACMD * pCmd = pCur->vhwaCmd();
+                struct VBOXVHWACMD RT_UNTRUSTED_VOLATILE_GUEST *pCmd = pCur->vhwaCmd();
                 pCmd->rc = VERR_INVALID_STATE;
                 Log(("VHWA Command <<< Async RESET %#p, %d\n", pCmd, pCmd->enmCmd));
-                pDisplay->CompleteVHWACommand((BYTE*)pCmd);
+                pDisplay->CompleteVHWACommand((BYTE *)pCmd);
             }
             break;
Index: /trunk/src/VBox/Frontends/VirtualBox/src/VBoxFBOverlay.h
===================================================================
--- /trunk/src/VBox/Frontends/VirtualBox/src/VBoxFBOverlay.h	(revision 71625)
+++ /trunk/src/VBox/Frontends/VirtualBox/src/VBoxFBOverlay.h	(revision 71626)
@@ -1220,5 +1220,5 @@
 {
 public:
-    void setVHWACmd(struct VBOXVHWACMD * pCmd)
+    void setVHWACmd(struct VBOXVHWACMD RT_UNTRUSTED_VOLATILE_GUEST *pCmd)
     {
         mType = VBOXVHWA_PIPECMD_VHWA;
@@ -1238,5 +1238,5 @@
     }
 
-    void setData(VBOXVHWA_PIPECMD_TYPE aType, void * pvData)
+    void setData(VBOXVHWA_PIPECMD_TYPE aType, void *pvData)
     {
         switch(aType)
@@ -1259,5 +1259,5 @@
     VBOXVHWA_PIPECMD_TYPE type() const {return mType;}
     const QRect & rect() const {return mRect;}
-    struct VBOXVHWACMD * vhwaCmd() const {return u.mpCmd;}
+    struct VBOXVHWACMD RT_UNTRUSTED_VOLATILE_GUEST *vhwaCmd() const {return u.mpCmd;}
     const VBOXVHWAFUNCCALLBACKINFO & func() const {return u.mFuncCallback; }
 
@@ -1267,5 +1267,5 @@
     union
     {
-        struct VBOXVHWACMD * mpCmd;
+        struct VBOXVHWACMD RT_UNTRUSTED_VOLATILE_GUEST *mpCmd;
         VBOXVHWAFUNCCALLBACKINFO mFuncCallback;
     }u;
@@ -1321,5 +1321,5 @@
     void init(QObject *pNotifyObject);
     ~VBoxVHWACommandElementProcessor();
-    void postCmd(VBOXVHWA_PIPECMD_TYPE aType, void * pvData);
+    void postCmd(VBOXVHWA_PIPECMD_TYPE aType, void *pvData);
     VBoxVHWACommandElement *getCmd();
     void doneCmd();
@@ -1709,5 +1709,5 @@
     void updateAttachment(QWidget *pViewport, QObject *pPostEventObject);
 
-    int onVHWACommand (struct VBOXVHWACMD * pCommand);
+    int onVHWACommand (struct VBOXVHWACMD RT_UNTRUSTED_VOLATILE_GUEST *pCommand);
 
     void onVHWACommandEvent (QEvent * pEvent);
@@ -1799,8 +1799,8 @@
     bool vboxGetGlOn() { return mGlOn; }
     bool vboxSynchGl();
-    void vboxDoVHWACmdExec(void *cmd);
+    void vboxDoVHWACmdExec(void RT_UNTRUSTED_VOLATILE_GUEST *cmd);
     void vboxShowOverlay (bool show);
     void vboxDoCheckUpdateViewport();
-    void vboxDoVHWACmd (void *cmd);
+    void vboxDoVHWACmd (void RT_UNTRUSTED_VOLATILE_GUEST *cmd);
     void addMainDirtyRect (const QRect & aRect);
     void vboxCheckUpdateOverlay (const QRect & rect);
Index: /trunk/src/VBox/Frontends/VirtualBox/src/runtime/UIFrameBuffer.cpp
===================================================================
--- /trunk/src/VBox/Frontends/VirtualBox/src/runtime/UIFrameBuffer.cpp	(revision 71625)
+++ /trunk/src/VBox/Frontends/VirtualBox/src/runtime/UIFrameBuffer.cpp	(revision 71626)
@@ -433,5 +433,5 @@
             return E_ACCESSDENIED;
         }
-        rc = mOverlay.onVHWACommand ((struct VBOXVHWACMD*)pCommand);
+        rc = mOverlay.onVHWACommand((struct VBOXVHWACMD RT_UNTRUSTED_VOLATILE_GUEST *)pCommand);
         UIFrameBufferPrivate::unlock();
         if (rc == VINF_CALLBACK_RETURN)
Index: /trunk/src/VBox/Main/include/DisplayImpl.h
===================================================================
--- /trunk/src/VBox/Main/include/DisplayImpl.h	(revision 71625)
+++ /trunk/src/VBox/Main/include/DisplayImpl.h	(revision 71626)
@@ -169,5 +169,5 @@
     void i_handleUpdateVBVAInputMapping(int32_t xOrigin, int32_t yOrigin, uint32_t cx, uint32_t cy);
 #ifdef VBOX_WITH_VIDEOHWACCEL
-    int  i_handleVHWACommandProcess(int enmCmd, VBOXVHWACMD RT_UNTRUSTED_VOLATILE_GUEST *pCommand);
+    int  i_handleVHWACommandProcess(int enmCmd, bool fGuestCmd, VBOXVHWACMD RT_UNTRUSTED_VOLATILE_GUEST *pCommand);
 #endif
 #ifdef VBOX_WITH_CRHGSMI
@@ -338,5 +338,5 @@
 
 #ifdef VBOX_WITH_VIDEOHWACCEL
-    static DECLCALLBACK(int)  i_displayVHWACommandProcess(PPDMIDISPLAYCONNECTOR pInterface, int enmCmd,
+    static DECLCALLBACK(int)  i_displayVHWACommandProcess(PPDMIDISPLAYCONNECTOR pInterface, int enmCmd, bool fGuestCmd,
                                                           VBOXVHWACMD RT_UNTRUSTED_VOLATILE_GUEST *pCommand);
 #endif
Index: /trunk/src/VBox/Main/src-client/DisplayImpl.cpp
===================================================================
--- /trunk/src/VBox/Main/src-client/DisplayImpl.cpp	(revision 71625)
+++ /trunk/src/VBox/Main/src-client/DisplayImpl.cpp	(revision 71626)
@@ -3531,5 +3531,5 @@
 #endif
 
-int Display::i_handleVHWACommandProcess(int enmCmd, VBOXVHWACMD RT_UNTRUSTED_VOLATILE_GUEST *pCommand)
+int Display::i_handleVHWACommandProcess(int enmCmd, bool fGuestCmd, VBOXVHWACMD RT_UNTRUSTED_VOLATILE_GUEST *pCommand)
 {
     unsigned id = (unsigned)pCommand->iDisplay;
@@ -3546,6 +3546,6 @@
         return VERR_NOT_IMPLEMENTED; /* Implementation is not available. */
 
-    NOREF(enmCmd);
-    HRESULT hr = pFramebuffer->ProcessVHWACommand((BYTE*)pCommand);
+    RT_NOREF(enmCmd, fGuestCmd);
+    HRESULT hr = pFramebuffer->ProcessVHWACommand((BYTE *)pCommand);
     if (hr == S_FALSE)
         return VINF_SUCCESS;
@@ -3559,10 +3559,10 @@
 }
 
-DECLCALLBACK(int) Display::i_displayVHWACommandProcess(PPDMIDISPLAYCONNECTOR pInterface, int enmCmd,
+DECLCALLBACK(int) Display::i_displayVHWACommandProcess(PPDMIDISPLAYCONNECTOR pInterface, int enmCmd, bool fGuestCmd,
                                                        VBOXVHWACMD RT_UNTRUSTED_VOLATILE_GUEST *pCommand)
 {
     PDRVMAINDISPLAY pDrv = PDMIDISPLAYCONNECTOR_2_MAINDISPLAY(pInterface);
 
-    return pDrv->pDisplay->i_handleVHWACommandProcess(enmCmd, pCommand);
+    return pDrv->pDisplay->i_handleVHWACommandProcess(enmCmd, fGuestCmd, pCommand);
 }
 #endif
