Index: /trunk/src/VBox/Additions/WINNT/Graphics/Video/common/wddm/VBoxMPIf.h
===================================================================
--- /trunk/src/VBox/Additions/WINNT/Graphics/Video/common/wddm/VBoxMPIf.h	(revision 43722)
+++ /trunk/src/VBox/Additions/WINNT/Graphics/Video/common/wddm/VBoxMPIf.h	(revision 43723)
@@ -35,5 +35,5 @@
 
 /* One would increase this whenever definitions in this file are changed */
-#define VBOXVIDEOIF_VERSION 14
+#define VBOXVIDEOIF_VERSION 15
 
 #define VBOXWDDM_NODE_ID_SYSTEM           0
Index: /trunk/src/VBox/Additions/WINNT/Graphics/Video/disp/wddm/VBoxUhgsmiBase.cpp
===================================================================
--- /trunk/src/VBox/Additions/WINNT/Graphics/Video/disp/wddm/VBoxUhgsmiBase.cpp	(revision 43722)
+++ /trunk/src/VBox/Additions/WINNT/Graphics/Video/disp/wddm/VBoxUhgsmiBase.cpp	(revision 43723)
@@ -234,5 +234,5 @@
 
     pBuf->CallHdr.EscapeHdr.escapeCode = VBOXESC_CRHGSMICTLCON_CALL;
-    pBuf->CallHdr.EscapeHdr.u32CmdSpecific = 0;
+    pBuf->CallHdr.EscapeHdr.u32CmdSpecific = (uint32_t)VERR_GENERAL_FAILURE;
     memcpy(&pBuf->CallHdr.CallInfo, pCallInfo, cbCallInfo);
 
@@ -240,11 +240,16 @@
     if (RT_SUCCESS(rc))
     {
-        memcpy(pCallInfo, &pBuf->CallHdr.CallInfo, cbCallInfo);
-        rc = VINF_SUCCESS;
-    }
-    else
-    {
+        rc = (int)pBuf->CallHdr.EscapeHdr.u32CmdSpecific;
+        if (RT_SUCCESS(rc))
+        {
+            memcpy(pCallInfo, &pBuf->CallHdr.CallInfo, cbCallInfo);
+            rc = VINF_SUCCESS;
+        }
+        else
+            WARN(("vboxCrHgsmiPrivateEscape u32CmdSpecific failed, rc (%d)", rc));
+    }
+    else
         WARN(("vboxCrHgsmiPrivateEscape failed, rc (%d)", rc));
-   }
+
     /* cleanup */
     if (pBuf != &Buf)
Index: /trunk/src/VBox/Additions/WINNT/Graphics/Video/mp/wddm/VBoxMPWddm.cpp
===================================================================
--- /trunk/src/VBox/Additions/WINNT/Graphics/Video/mp/wddm/VBoxMPWddm.cpp	(revision 43722)
+++ /trunk/src/VBox/Additions/WINNT/Graphics/Video/mp/wddm/VBoxMPWddm.cpp	(revision 43723)
@@ -4015,11 +4015,9 @@
                     Assert(pEscape->PrivateDriverDataSize > RT_OFFSETOF(VBOXDISPIFESCAPE_CRHGSMICTLCON_CALL, CallInfo));
                     int rc = VBoxMpCrCtlConCallUserData(&pDevExt->CrCtlCon, &pCall->CallInfo, pEscape->PrivateDriverDataSize - RT_OFFSETOF(VBOXDISPIFESCAPE_CRHGSMICTLCON_CALL, CallInfo));
-                    if (RT_SUCCESS(rc))
-                        Status = STATUS_SUCCESS;
-                    else
-                    {
+                    pEscapeHdr->u32CmdSpecific = (uint32_t)rc;
+                    Status = STATUS_SUCCESS; /* <- always return success here, otherwise the private data buffer modifications
+                                              * i.e. rc status stored in u32CmdSpecific will not be copied to user mode */
+                    if (!RT_SUCCESS(rc))
                         WARN(("VBoxMpCrUmCtlConCall failed, rc(%d)", rc));
-                        Status = STATUS_UNSUCCESSFUL;
-                    }
                 }
                 else
Index: /trunk/src/VBox/HostServices/SharedOpenGL/crserver/crservice.cpp
===================================================================
--- /trunk/src/VBox/HostServices/SharedOpenGL/crserver/crservice.cpp	(revision 43722)
+++ /trunk/src/VBox/HostServices/SharedOpenGL/crserver/crservice.cpp	(revision 43723)
@@ -473,5 +473,5 @@
             if (pBuffer->uiId == iBuffer)
             {
-                if (pBuffer->uiSize!=cbBufferSize)
+                if (cbBufferSize && pBuffer->uiSize!=cbBufferSize)
                 {
                     static int shown=0;
