Index: /trunk/src/VBox/Additions/WINNT/Graphics/Display/vbox.c
===================================================================
--- /trunk/src/VBox/Additions/WINNT/Graphics/Display/vbox.c	(revision 33889)
+++ /trunk/src/VBox/Additions/WINNT/Graphics/Display/vbox.c	(revision 33890)
@@ -480,5 +480,5 @@
 {
     VBVAHOSTCMD * pCmd, * pNextCmd;
-    int rc = ppdev->pfnHGSMIRequestCommands(ppdev->hMpHGSMI, HGSMI_CH_VBVA, &pCmd);
+    int rc = ppdev->pfnHGSMIRequestCommands(ppdev->hMpHGSMI, HGSMI_CH_VBVA, ppdev->iDevice, &pCmd);
     /* don't assert here, otherwise NT4 will be unhappy */
     if(RT_SUCCESS(rc))
Index: /trunk/src/VBox/Additions/WINNT/Graphics/Miniport/VBoxHGSMI.h
===================================================================
--- /trunk/src/VBox/Additions/WINNT/Graphics/Miniport/VBoxHGSMI.h	(revision 33889)
+++ /trunk/src/VBox/Additions/WINNT/Graphics/Miniport/VBoxHGSMI.h	(revision 33890)
@@ -26,5 +26,5 @@
 
 /* request the host commands addressed to the display */
-typedef DECLCALLBACK(int) FNVBOXVIDEOHGSMICOMMANDS(HVBOXVIDEOHGSMI hHGSMI, uint8_t u8Channel, struct _VBVAHOSTCMD ** ppCmd);
+typedef DECLCALLBACK(int) FNVBOXVIDEOHGSMICOMMANDS(HVBOXVIDEOHGSMI hHGSMI, uint8_t u8Channel, uint32_t iDevice, struct _VBVAHOSTCMD ** ppCmd);
 typedef FNVBOXVIDEOHGSMICOMMANDS *PFNVBOXVIDEOHGSMICOMMANDS;
 
Index: /trunk/src/VBox/Additions/WINNT/Graphics/Miniport/VBoxVideo.cpp
===================================================================
--- /trunk/src/VBox/Additions/WINNT/Graphics/Miniport/VBoxVideo.cpp	(revision 33889)
+++ /trunk/src/VBox/Additions/WINNT/Graphics/Miniport/VBoxVideo.cpp	(revision 33890)
@@ -3578,5 +3578,5 @@
             HGSMIQUERYCALLBACKS *pInfo = (HGSMIQUERYCALLBACKS *)RequestPacket->OutputBuffer;
 
-            pInfo->hContext = pDevExt;
+            pInfo->hContext = commonFromDeviceExt(pDevExt);
             pInfo->pfnCompletionHandler = hgsmiHostCmdComplete;
             pInfo->pfnRequestCommandsHandler = hgsmiHostCmdRequest;
@@ -3632,5 +3632,5 @@
             HGSMIHANDLERENABLE *pInfo = (HGSMIHANDLERENABLE *)RequestPacket->InputBuffer;
 
-            int rc = vboxVBVAChannelDisplayEnable(pDevExt->pPrimary,
+            int rc = vboxVBVAChannelDisplayEnable(commonFromDeviceExt(pDevExt),
                     pDevExt->iDevice,
                     pInfo->u8Channel);
Index: /trunk/src/VBox/Additions/WINNT/Graphics/Miniport/VBoxVideo.h
===================================================================
--- /trunk/src/VBox/Additions/WINNT/Graphics/Miniport/VBoxVideo.h	(revision 33889)
+++ /trunk/src/VBox/Additions/WINNT/Graphics/Miniport/VBoxVideo.h	(revision 33890)
@@ -691,9 +691,9 @@
 #ifndef VBOX_WITH_WDDM
 DECLCALLBACK(void) hgsmiHostCmdComplete (HVBOXVIDEOHGSMI hHGSMI, struct _VBVAHOSTCMD * pCmd);
-DECLCALLBACK(int) hgsmiHostCmdRequest (HVBOXVIDEOHGSMI hHGSMI, uint8_t u8Channel, struct _VBVAHOSTCMD ** ppCmd);
-#endif
-
-
-int vboxVBVAChannelDisplayEnable(PDEVICE_EXTENSION PrimaryExtension,
+DECLCALLBACK(int) hgsmiHostCmdRequest (HVBOXVIDEOHGSMI hHGSMI, uint8_t u8Channel, uint32_t iDisplay, struct _VBVAHOSTCMD ** ppCmd);
+#endif
+
+
+int vboxVBVAChannelDisplayEnable(PVBOXVIDEO_COMMON pCommon,
         int iDisplay, /* negative would mean this is a miniport handler */
         uint8_t u8Channel);
Index: /trunk/src/VBox/Additions/WINNT/Graphics/Miniport/VBoxVideoHGSMI.cpp
===================================================================
--- /trunk/src/VBox/Additions/WINNT/Graphics/Miniport/VBoxVideoHGSMI.cpp	(revision 33889)
+++ /trunk/src/VBox/Additions/WINNT/Graphics/Miniport/VBoxVideoHGSMI.cpp	(revision 33890)
@@ -689,20 +689,20 @@
 }
 
-void dbgCheckList(PDEVICE_EXTENSION PrimaryExtension, VBVADISP_CHANNELCONTEXT *pList, struct _VBVAHOSTCMD * pCmd)
+void dbgCheckList(PVBOXVIDEO_COMMON pCommon, VBVADISP_CHANNELCONTEXT *pList, struct _VBVAHOSTCMD * pCmd)
 {
     VBOXVCMNIRQL oldIrql;
-    VBoxVideoCmnSpinLockAcquire(PrimaryExtension, &pList->pSynchLock, &oldIrql);
+    VBoxVideoCmnSpinLockAcquire(commonToPrimaryExt(pCommon), &pList->pSynchLock, &oldIrql);
 
     dbgCheckListLocked(pList, pCmd);
 
-    VBoxVideoCmnSpinLockRelease(PrimaryExtension, &pList->pSynchLock, oldIrql);
+    VBoxVideoCmnSpinLockRelease(commonToPrimaryExt(pCommon), &pList->pSynchLock, oldIrql);
 }
 
 #define DBG_CHECKLIST_LOCKED(_pl, pc) dbgCheckListLocked(_pl, pc)
-#define DBG_CHECKLIST(_pe, _pl, pc) dbgCheckList(_pe, _pl, pc)
+#define DBG_CHECKLIST(_pv, _pl, pc) dbgCheckList(_pv, _pl, pc)
 
 #else
 #define DBG_CHECKLIST_LOCKED(_pl, pc) do{}while(0)
-#define DBG_CHECKLIST(_pe, _pl, pc) do{}while(0)
+#define DBG_CHECKLIST(_pv, _pl, pc) do{}while(0)
 #endif
 
@@ -710,5 +710,5 @@
 typedef struct _VBVA_CHANNELCONTEXTS
 {
-    PDEVICE_EXTENSION PrimaryExtension;
+    PVBOXVIDEO_COMMON pCommon;
     uint32_t cUsed;
     uint32_t cContexts;
@@ -724,14 +724,14 @@
 }
 
-static int vboxVBVACreateChannelContexts(PDEVICE_EXTENSION PrimaryExtension, VBVA_CHANNELCONTEXTS ** ppContext)
-{
-    uint32_t cDisplays = (uint32_t)commonFromDeviceExt(PrimaryExtension)->cDisplays;
+static int vboxVBVACreateChannelContexts(PVBOXVIDEO_COMMON pCommon, VBVA_CHANNELCONTEXTS ** ppContext)
+{
+    uint32_t cDisplays = (uint32_t)pCommon->cDisplays;
     const size_t size = RT_OFFSETOF(VBVA_CHANNELCONTEXTS, aContexts[cDisplays]);
-    VBVA_CHANNELCONTEXTS * pContext = (VBVA_CHANNELCONTEXTS*)VBoxVideoCmnMemAllocDriver(commonFromDeviceExt(PrimaryExtension), size);
+    VBVA_CHANNELCONTEXTS * pContext = (VBVA_CHANNELCONTEXTS*)VBoxVideoCmnMemAllocDriver(pCommon, size);
     if(pContext)
     {
         memset(pContext, 0, size);
         pContext->cContexts = cDisplays;
-        pContext->PrimaryExtension = PrimaryExtension;
+        pContext->pCommon = pCommon;
         *ppContext = pContext;
         return VINF_SUCCESS;
@@ -755,9 +755,9 @@
 DECLCALLBACK(void) hgsmiHostCmdComplete (HVBOXVIDEOHGSMI hHGSMI, struct _VBVAHOSTCMD * pCmd)
 {
-    PDEVICE_EXTENSION PrimaryExtension = ((PDEVICE_EXTENSION)hHGSMI)->pPrimary;
-    HGSMIHostCmdComplete (commonFromDeviceExt(PrimaryExtension), pCmd);
-}
-
-DECLCALLBACK(int) hgsmiHostCmdRequest (HVBOXVIDEOHGSMI hHGSMI, uint8_t u8Channel, struct _VBVAHOSTCMD ** ppCmd)
+    PVBOXVIDEO_COMMON pCommon = (PVBOXVIDEO_COMMON)hHGSMI;
+    HGSMIHostCmdComplete (pCommon, pCmd);
+}
+
+DECLCALLBACK(int) hgsmiHostCmdRequest (HVBOXVIDEOHGSMI hHGSMI, uint8_t u8Channel, uint32_t iDevice, struct _VBVAHOSTCMD ** ppCmd)
 {
 //    if(display < 0)
@@ -766,20 +766,19 @@
         return VERR_INVALID_PARAMETER;
 
-    PDEVICE_EXTENSION pDevExt = (PDEVICE_EXTENSION)hHGSMI;
-    PDEVICE_EXTENSION PrimaryExtension = pDevExt->pPrimary;
+    PVBOXVIDEO_COMMON pCommon = (PVBOXVIDEO_COMMON)hHGSMI;
 
     /* pick up the host commands */
-    hgsmiProcessHostCommandQueue(commonFromDeviceExt(PrimaryExtension));
-
-    HGSMICHANNEL * pChannel = HGSMIChannelFindById (&commonFromDeviceExt(PrimaryExtension)->channels, u8Channel);
+    hgsmiProcessHostCommandQueue(pCommon);
+
+    HGSMICHANNEL * pChannel = HGSMIChannelFindById (&pCommon->channels, u8Channel);
     if(pChannel)
     {
         VBVA_CHANNELCONTEXTS * pContexts = (VBVA_CHANNELCONTEXTS *)pChannel->handler.pvHandler;
-        VBVADISP_CHANNELCONTEXT *pDispContext = vboxVBVAFindHandlerInfo(pContexts, pDevExt->iDevice);
+        VBVADISP_CHANNELCONTEXT *pDispContext = vboxVBVAFindHandlerInfo(pContexts, iDevice);
         Assert(pDispContext);
         if(pDispContext)
         {
             UCHAR oldIrql;
-            VBoxVideoCmnSpinLockAcquire(PrimaryExtension, &pDispContext->pSynchLock, &oldIrql);
+            VBoxVideoCmnSpinLockAcquire(commonToPrimaryExt(pCommon), &pDispContext->pSynchLock, &oldIrql);
 
             DBG_CHECKLIST_LOCKED(pDispContext, NULL);
@@ -791,7 +790,7 @@
             pDispContext->cCmds = 0;
 #endif
-            VBoxVideoCmnSpinLockRelease(PrimaryExtension, &pDispContext->pSynchLock, oldIrql);
-
-            DBG_CHECKLIST(PrimaryExtension, pDispContext, NULL);
+            VBoxVideoCmnSpinLockRelease(commonToPrimaryExt(pCommon), &pDispContext->pSynchLock, oldIrql);
+
+            DBG_CHECKLIST(pCommon, pDispContext, NULL);
 
             return VINF_SUCCESS;
@@ -857,9 +856,9 @@
                         {
                             VBVAHOSTCMDEVENT *pEventCmd = VBVAHOSTCMD_BODY(pCur, VBVAHOSTCMDEVENT);
-                            VBoxVideoCmnSignalEvent(commonFromDeviceExt(pCallbacks->PrimaryExtension), pEventCmd->pEvent);
+                            VBoxVideoCmnSignalEvent(pCallbacks->pCommon, pEventCmd->pEvent);
                         }
                         default:
                         {
-                            DBG_CHECKLIST(pCallbacks->PrimaryExtension, pHandler, pCur);
+                            DBG_CHECKLIST(pCallbacks->pCommon, pHandler, pCur);
                             Assert(u16ChannelInfo==VBVAHG_EVENT);
                             Assert(!pCur->u.Data);
@@ -873,5 +872,5 @@
                             Assert(!pCur->u.pNext);
 #endif
-                            HGSMIHostCmdComplete(commonFromDeviceExt(pCallbacks->PrimaryExtension), pCur);
+                            HGSMIHostCmdComplete(pCallbacks->pCommon, pCur);
 #if 0  /* pNext is NULL, and the other things have already been asserted */
                             pCur = pNext;
@@ -887,5 +886,5 @@
                 }
 
-                DBG_CHECKLIST(pCallbacks->PrimaryExtension, pHandler, pFirst);
+                DBG_CHECKLIST(pCallbacks->pCommon, pHandler, pFirst);
 
                 /* we do not support lists currently */
@@ -900,5 +899,5 @@
                     Assert(pLast);
                     UCHAR oldIrql;
-                    VBoxVideoCmnSpinLockAcquire(pCallbacks->PrimaryExtension,
+                    VBoxVideoCmnSpinLockAcquire(commonToPrimaryExt(pCallbacks->pCommon),
                                                 &pHandler->pSynchLock,
                                                 &oldIrql);
@@ -922,5 +921,5 @@
                     DBG_CHECKLIST_LOCKED(pHandler, NULL);
 
-                    VBoxVideoCmnSpinLockRelease(pCallbacks->PrimaryExtension,
+                    VBoxVideoCmnSpinLockRelease(commonToPrimaryExt(pCallbacks->pCommon),
                                                 &pHandler->pSynchLock,
                                                 oldIrql);
@@ -946,5 +945,5 @@
     }
     /* no handlers were found, need to complete the command here */
-    HGSMIHostCmdComplete(commonFromDeviceExt(pCallbacks->PrimaryExtension), pvBuffer);
+    HGSMIHostCmdComplete(pCallbacks->pCommon, pvBuffer);
     return VINF_SUCCESS;
 }
@@ -952,13 +951,13 @@
 static HGSMICHANNELHANDLER g_OldHandler;
 
-int vboxVBVAChannelDisplayEnable(PDEVICE_EXTENSION PrimaryExtension,
+int vboxVBVAChannelDisplayEnable(PVBOXVIDEO_COMMON pCommon,
         int iDisplay, /* negative would mean this is a miniport handler */
         uint8_t u8Channel)
 {
     VBVA_CHANNELCONTEXTS * pContexts;
-    HGSMICHANNEL * pChannel = HGSMIChannelFindById (&commonFromDeviceExt(PrimaryExtension)->channels, u8Channel);
+    HGSMICHANNEL * pChannel = HGSMIChannelFindById (&pCommon->channels, u8Channel);
     if(!pChannel)
     {
-        int rc = vboxVBVACreateChannelContexts(PrimaryExtension, &pContexts);
+        int rc = vboxVBVACreateChannelContexts(pCommon, &pContexts);
         if(RT_FAILURE(rc))
         {
@@ -989,10 +988,10 @@
 #endif
 
-            VBoxVideoCmnSpinLockCreate(PrimaryExtension, &pDispContext->pSynchLock);
+            VBoxVideoCmnSpinLockCreate(commonToPrimaryExt(pCommon), &pDispContext->pSynchLock);
 
             int rc = VINF_SUCCESS;
             if(!pChannel)
             {
-                rc = HGSMIChannelRegister (&commonFromDeviceExt(PrimaryExtension)->channels,
+                rc = HGSMIChannelRegister (&pCommon->channels,
                                            u8Channel,
                                            "VGA Miniport HGSMI channel",
@@ -1012,5 +1011,5 @@
     if(!pChannel)
     {
-        vboxVBVADeleteChannelContexts(commonFromDeviceExt(PrimaryExtension), pContexts);
+        vboxVBVADeleteChannelContexts(pCommon, pContexts);
     }
 
