Index: /trunk/src/VBox/Additions/WINNT/Graphics/Video/disp/xpdm/VBoxDispDriver.cpp
===================================================================
--- /trunk/src/VBox/Additions/WINNT/Graphics/Video/disp/xpdm/VBoxDispDriver.cpp	(revision 42231)
+++ /trunk/src/VBox/Additions/WINNT/Graphics/Video/disp/xpdm/VBoxDispDriver.cpp	(revision 42232)
@@ -1001,4 +1001,19 @@
             break;
         }
+        case VBOXESC_ISANYX:
+        {
+            if (pvOut && cjOut == sizeof(DWORD))
+            {
+                /* @todo: impl */
+                *(DWORD *)pvOut = TRUE;
+                return 1;
+            }
+            else
+            {
+                WARN(("VBOXESC_ISANYX invalid parms"));
+                return 0;
+            }
+            break;
+        }
         default:
         {
Index: /trunk/src/VBox/Additions/WINNT/Graphics/Video/mp/wddm/VBoxMPWddm.cpp
===================================================================
--- /trunk/src/VBox/Additions/WINNT/Graphics/Video/mp/wddm/VBoxMPWddm.cpp	(revision 42231)
+++ /trunk/src/VBox/Additions/WINNT/Graphics/Video/mp/wddm/VBoxMPWddm.cpp	(revision 42232)
@@ -4267,4 +4267,18 @@
                 break;
             }
+            case VBOXESC_ISANYX:
+            {
+                if (pEscape->PrivateDriverDataSize != sizeof (VBOXDISPIFESCAPE_ISANYX))
+                {
+                    WARN(("invalid private driver size %d", pEscape->PrivateDriverDataSize));
+                    Status = STATUS_INVALID_PARAMETER;
+                    break;
+                }
+
+                PVBOXDISPIFESCAPE_ISANYX pIsAnyX = (PVBOXDISPIFESCAPE_ISANYX)pEscapeHdr;
+                pIsAnyX->u32IsAnyX = pDevExt->fAnyX;
+                Status = STATUS_SUCCESS;
+                break;
+            }
             case VBOXESC_DBGPRINT:
             {
Index: /trunk/src/VBox/Additions/WINNT/VBoxTray/VBoxDispIf.cpp
===================================================================
--- /trunk/src/VBox/Additions/WINNT/VBoxTray/VBoxDispIf.cpp	(revision 42231)
+++ /trunk/src/VBox/Additions/WINNT/VBoxTray/VBoxDispIf.cpp	(revision 42232)
@@ -55,9 +55,13 @@
 }
 
-static DWORD vboxDispIfEscapeXPDM(PCVBOXDISPIF pIf, PVBOXDISPIFESCAPE pEscape, int cbData)
+static DWORD vboxDispIfEscapeXPDM(PCVBOXDISPIF pIf, PVBOXDISPIFESCAPE pEscape, int cbData, int iDirection)
 {
     HDC  hdc = GetDC(HWND_DESKTOP);
     VOID *pvData = cbData ? VBOXDISPIFESCAPE_DATA(pEscape, VOID) : NULL;
-    int iRet = ExtEscape(hdc, pEscape->escapeCode, cbData, (LPCSTR)pvData, 0, NULL);
+    int iRet = ExtEscape(hdc, pEscape->escapeCode,
+            iDirection >= 0 ? cbData : 0,
+            iDirection >= 0 ? (LPSTR)pvData : NULL,
+            iDirection <= 0 ? cbData : 0,
+            iDirection <= 0 ? (LPSTR)pvData : NULL);
     ReleaseDC(HWND_DESKTOP, hdc);
     if (iRet > 0)
@@ -353,5 +357,22 @@
         case VBOXDISPIF_MODE_XPDM_NT4:
         case VBOXDISPIF_MODE_XPDM:
-            return vboxDispIfEscapeXPDM(pIf, pEscape, cbData);
+            return vboxDispIfEscapeXPDM(pIf, pEscape, cbData, 1);
+#ifdef VBOX_WITH_WDDM
+        case VBOXDISPIF_MODE_WDDM:
+            return vboxDispIfEscapeWDDM(pIf, pEscape, cbData, TRUE /* BOOL fHwAccess */);
+#endif
+        default:
+            Log((__FUNCTION__": unknown mode (%d)\n", pIf->enmMode));
+            return ERROR_INVALID_PARAMETER;
+    }
+}
+
+DWORD VBoxDispIfEscapeInOut(PCVBOXDISPIF const pIf, PVBOXDISPIFESCAPE pEscape, int cbData)
+{
+    switch (pIf->enmMode)
+    {
+        case VBOXDISPIF_MODE_XPDM_NT4:
+        case VBOXDISPIF_MODE_XPDM:
+            return vboxDispIfEscapeXPDM(pIf, pEscape, cbData, 0);
 #ifdef VBOX_WITH_WDDM
         case VBOXDISPIF_MODE_WDDM:
Index: /trunk/src/VBox/Additions/WINNT/VBoxTray/VBoxDispIf.h
===================================================================
--- /trunk/src/VBox/Additions/WINNT/VBoxTray/VBoxDispIf.h	(revision 42231)
+++ /trunk/src/VBox/Additions/WINNT/VBoxTray/VBoxDispIf.h	(revision 42232)
@@ -82,4 +82,5 @@
 DWORD VBoxDispIfTerm(PVBOXDISPIF pIf);
 DWORD VBoxDispIfEscape(PCVBOXDISPIF const pIf, PVBOXDISPIFESCAPE pEscape, int cbData);
+DWORD VBoxDispIfEscapeInOut(PCVBOXDISPIF const pIf, PVBOXDISPIFESCAPE pEscape, int cbData);
 DWORD VBoxDispIfResize(PCVBOXDISPIF const pIf, ULONG Id, DWORD Width, DWORD Height, DWORD BitsPerPixel);
 DWORD VBoxDispIfResizeModes(PCVBOXDISPIF const pIf, UINT iChangedMode, DISPLAY_DEVICE *paDisplayDevices, DEVMODE *paDeviceModes, UINT cDevModes);
Index: /trunk/src/VBox/Additions/WINNT/VBoxTray/VBoxDisplay.cpp
===================================================================
--- /trunk/src/VBox/Additions/WINNT/VBoxTray/VBoxDisplay.cpp	(revision 42231)
+++ /trunk/src/VBox/Additions/WINNT/VBoxTray/VBoxDisplay.cpp	(revision 42232)
@@ -33,4 +33,6 @@
     const VBOXSERVICEENV *pEnv;
 
+    BOOL fAnyX;
+
     /* ChangeDisplaySettingsEx does not exist in NT. ResizeDisplayDevice uses the function. */
     LONG (WINAPI * pfnChangeDisplaySettingsEx)(LPCTSTR lpszDeviceName, LPDEVMODE lpDevMode, HWND hwnd, DWORD dwflags, LPVOID lParam);
@@ -107,4 +109,12 @@
     }
 
+    VBOXDISPIFESCAPE_ISANYX IsAnyX = {0};
+    IsAnyX.EscapeHdr.escapeCode = VBOXESC_ISANYX;
+    DWORD err = VBoxDispIfEscapeInOut(&pEnv->dispIf, &IsAnyX.EscapeHdr, sizeof (uint32_t));
+    if (err == NO_ERROR)
+        gCtx.fAnyX = !!IsAnyX.u32IsAnyX;
+    else
+        gCtx.fAnyX = TRUE;
+
     Log(("VBoxTray: VBoxDisplayInit: Display init successful\n"));
 
@@ -208,4 +218,7 @@
 {
     BOOL fModeReset = (Width == 0 && Height == 0 && BitsPerPixel == 0);
+
+    if (!gCtx.fAnyX)
+        Width &= 0xFFF8;
 
     DISPLAY_DEVICE DisplayDevice;
Index: /trunk/src/VBox/Additions/WINNT/include/VBoxDisplay.h
===================================================================
--- /trunk/src/VBox/Additions/WINNT/include/VBoxDisplay.h	(revision 42231)
+++ /trunk/src/VBox/Additions/WINNT/include/VBoxDisplay.h	(revision 42232)
@@ -37,9 +37,7 @@
 # define VBOXESC_REINITVIDEOMODESBYMASK     0xABCD9010
 # define VBOXESC_ADJUSTVIDEOMODES           0xABCD9011
+#endif /* #ifdef VBOX_WITH_WDDM */
 
-/* for VBOX_VIDEO_MAX_SCREENS definition */
-#include <VBox/Hardware/VBoxVideoVBE.h>
-
-#endif /* #ifdef VBOX_WITH_WDDM */
+# define VBOXESC_ISANYX                     0xABCD9200
 
 typedef struct VBOXDISPIFESCAPE
@@ -60,5 +58,17 @@
     CTL_CODE(FILE_DEVICE_VIDEO, 0xA01, METHOD_BUFFERED, FILE_ANY_ACCESS)
 
+#define IOCTL_VIDEO_VBOX_ISANYX \
+    CTL_CODE(FILE_DEVICE_VIDEO, 0xA02, METHOD_BUFFERED, FILE_ANY_ACCESS)
+
+typedef struct VBOXDISPIFESCAPE_ISANYX
+{
+    VBOXDISPIFESCAPE EscapeHdr;
+    uint32_t u32IsAnyX;
+} VBOXDISPIFESCAPE_ISANYX, *PVBOXDISPIFESCAPE_ISANYX;
+
 #ifdef VBOX_WITH_WDDM
+
+/* for VBOX_VIDEO_MAX_SCREENS definition */
+#include <VBox/Hardware/VBoxVideoVBE.h>
 
 typedef struct
