Index: /trunk/src/VBox/Additions/WINNT/Graphics/Miniport/VBoxVideo.cpp
===================================================================
--- /trunk/src/VBox/Additions/WINNT/Graphics/Miniport/VBoxVideo.cpp	(revision 32875)
+++ /trunk/src/VBox/Additions/WINNT/Graphics/Miniport/VBoxVideo.cpp	(revision 32876)
@@ -1969,6 +1969,7 @@
 
 #ifdef VBOX_WITH_HGSMI
-      ((PDEVICE_EXTENSION)HwDeviceExtension)->u.primary.IOPortHost = (RTIOPORT)VGA_PORT_HGSMI_HOST;
-      ((PDEVICE_EXTENSION)HwDeviceExtension)->u.primary.IOPortGuest = (RTIOPORT)VGA_PORT_HGSMI_GUEST;
+      /* pPrimary is not yet set */
+      ((PDEVICE_EXTENSION)HwDeviceExtension)->u.primary.hgsmiInfo.IOPortHost = (RTIOPORT)VGA_PORT_HGSMI_HOST;
+      ((PDEVICE_EXTENSION)HwDeviceExtension)->u.primary.hgsmiInfo.IOPortGuest = (RTIOPORT)VGA_PORT_HGSMI_GUEST;
 #endif /* VBOX_WITH_HGSMI */
 
@@ -2024,5 +2025,5 @@
       VBoxSetupDisplaysHGSMI((PDEVICE_EXTENSION)HwDeviceExtension, ConfigInfo, AdapterMemorySize);
 
-      if (((PDEVICE_EXTENSION)HwDeviceExtension)->u.primary.bHGSMI)
+      if (hgsmiFromDeviceExt((PDEVICE_EXTENSION)HwDeviceExtension)->bHGSMI)
       {
           LogRel(("VBoxVideo: using HGSMI\n"));
@@ -2675,5 +2676,5 @@
             }
 
-            if (!pDevExt->pPrimary->u.primary.bHGSMI)
+            if (!hgsmiFromDeviceExt(pDevExt)->bHGSMI)
             {
                 RequestPacket->StatusBlock->Status = ERROR_INVALID_FUNCTION;
@@ -2692,5 +2693,5 @@
             pInfo->u32MinVBVABufferSize = VBVA_MIN_BUFFER_SIZE;
 
-            pInfo->IOPortGuestCommand = pDevExt->pPrimary->u.primary.IOPortGuest;
+            pInfo->IOPortGuestCommand = hgsmiFromDeviceExt(pDevExt)->IOPortGuest;
 
             RequestPacket->StatusBlock->Information = sizeof(QUERYHGSMIRESULT);
@@ -2711,5 +2712,5 @@
             }
 
-            if (!pDevExt->pPrimary->u.primary.bHGSMI)
+            if (!hgsmiFromDeviceExt(pDevExt)->bHGSMI)
             {
                 RequestPacket->StatusBlock->Status = ERROR_INVALID_FUNCTION;
@@ -2739,5 +2740,5 @@
             }
 
-            if (!pDevExt->pPrimary->u.primary.bHGSMI)
+            if (!hgsmiFromDeviceExt(pDevExt)->bHGSMI)
             {
                 RequestPacket->StatusBlock->Status = ERROR_INVALID_FUNCTION;
@@ -2765,5 +2766,5 @@
             }
 
-            if (!pDevExt->pPrimary->u.primary.bHGSMI)
+            if (!hgsmiFromDeviceExt(pDevExt)->bHGSMI)
             {
                 RequestPacket->StatusBlock->Status = ERROR_INVALID_FUNCTION;
@@ -2786,5 +2787,5 @@
         {
             /* TODO: implement */
-            if (!pDevExt->pPrimary->u.primary.bHGSMI)
+            if (!hgsmiFromDeviceExt(pDevExt)->bHGSMI)
             {
                 RequestPacket->StatusBlock->Status = ERROR_INVALID_FUNCTION;
@@ -2804,5 +2805,5 @@
             }
 
-            if (!pDevExt->pPrimary->u.primary.bHGSMI)
+            if (!hgsmiFromDeviceExt(pDevExt)->bHGSMI)
             {
                 RequestPacket->StatusBlock->Status = ERROR_INVALID_FUNCTION;
Index: /trunk/src/VBox/Additions/WINNT/Graphics/Miniport/VBoxVideo.h
===================================================================
--- /trunk/src/VBox/Additions/WINNT/Graphics/Miniport/VBoxVideo.h	(revision 32875)
+++ /trunk/src/VBox/Additions/WINNT/Graphics/Miniport/VBoxVideo.h	(revision 32876)
@@ -200,4 +200,23 @@
 #endif
 
+#ifdef VBOX_WITH_HGSMI
+typedef struct HGSMI_GUEST_INFO
+{
+    BOOLEAN bHGSMI;                     /* Whether HGSMI is enabled. */
+
+    HGSMIAREA areaHostHeap;             /* Host heap VRAM area. */
+
+    HGSMICHANNELINFO channels;
+
+    HGSMIHEAP hgsmiAdapterHeap;
+
+    /* The IO Port Number for host commands. */
+    RTIOPORT IOPortHost;
+
+    /* The IO Port Number for guest commands. */
+    RTIOPORT IOPortGuest;
+} HGSMI_GUEST_INFO, *PHGSMI_GUEST_INFO;
+#endif
+
 typedef struct _DEVICE_EXTENSION
 {
@@ -271,17 +290,5 @@
 
 #ifdef VBOX_WITH_HGSMI
-           BOOLEAN bHGSMI;                     /* Whether HGSMI is enabled. */
-
-           HGSMIAREA areaHostHeap;             /* Host heap VRAM area. */
-
-           HGSMICHANNELINFO channels;
-
-           HGSMIHEAP hgsmiAdapterHeap;
-
-           /* The IO Port Number for host commands. */
-           RTIOPORT IOPortHost;
-
-           /* The IO Port Number for guest commands. */
-           RTIOPORT IOPortGuest;
+           HGSMI_GUEST_INFO hgsmiInfo;
 # ifndef VBOX_WITH_WDDM
            /* Video Port API dynamically picked up at runtime for binary backwards compatibility with older NT versions */
@@ -336,4 +343,13 @@
 #endif
 } DEVICE_EXTENSION, *PDEVICE_EXTENSION;
+
+static inline PHGSMI_GUEST_INFO hgsmiFromDeviceExt(PDEVICE_EXTENSION pExt)
+{
+#ifndef VBOX_WITH_WDDM
+    return &pExt->pPrimary->u.primary.hgsmiInfo;
+#else
+    return &pExt->u.primary.hgsmiInfo;
+#endif
+}
 
 #ifndef VBOX_WITH_WDDM
@@ -852,38 +868,22 @@
  * Host and Guest port IO helpers.
  */
-DECLINLINE(void) VBoxHGSMIHostWrite(PDEVICE_EXTENSION PrimaryExtension, ULONG data)
-{
-#ifndef VBOX_WITH_WDDM
-    VBoxVideoCmnPortWriteUlong((PULONG)PrimaryExtension->pPrimary->u.primary.IOPortHost, data);
-#else
-    VBoxVideoCmnPortWriteUlong((PULONG)PrimaryExtension->u.primary.IOPortHost, data);
-#endif
-}
-
-DECLINLINE(ULONG) VBoxHGSMIHostRead(PDEVICE_EXTENSION PrimaryExtension)
-{
-#ifndef VBOX_WITH_WDDM
-    return VBoxVideoCmnPortReadUlong((PULONG)PrimaryExtension->pPrimary->u.primary.IOPortHost);
-#else
-    return VBoxVideoCmnPortReadUlong((PULONG)PrimaryExtension->u.primary.IOPortHost);
-#endif
-}
-
-DECLINLINE(void) VBoxHGSMIGuestWrite(PDEVICE_EXTENSION PrimaryExtension, ULONG data)
-{
-#ifndef VBOX_WITH_WDDM
-    VBoxVideoCmnPortWriteUlong((PULONG)PrimaryExtension->pPrimary->u.primary.IOPortGuest, data);
-#else
-    VBoxVideoCmnPortWriteUlong((PULONG)PrimaryExtension->u.primary.IOPortGuest, data);
-#endif
-}
-
-DECLINLINE(ULONG) VBoxHGSMIGuestRead(PDEVICE_EXTENSION PrimaryExtension)
-{
-#ifndef VBOX_WITH_WDDM
-    return VBoxVideoCmnPortReadUlong((PULONG)PrimaryExtension->pPrimary->u.primary.IOPortGuest);
-#else
-    return VBoxVideoCmnPortReadUlong((PULONG)PrimaryExtension->u.primary.IOPortGuest);
-#endif
+DECLINLINE(void) VBoxHGSMIHostWrite(PHGSMI_GUEST_INFO pInfo, ULONG data)
+{
+    VBoxVideoCmnPortWriteUlong((PULONG)pInfo->IOPortHost, data);
+}
+
+DECLINLINE(ULONG) VBoxHGSMIHostRead(PHGSMI_GUEST_INFO pInfo)
+{
+    return VBoxVideoCmnPortReadUlong((PULONG)pInfo->IOPortHost);
+}
+
+DECLINLINE(void) VBoxHGSMIGuestWrite(PHGSMI_GUEST_INFO pInfo, ULONG data)
+{
+    VBoxVideoCmnPortWriteUlong((PULONG)pInfo->IOPortGuest, data);
+}
+
+DECLINLINE(ULONG) VBoxHGSMIGuestRead(PHGSMI_GUEST_INFO pInfo)
+{
+    return VBoxVideoCmnPortReadUlong((PULONG)pInfo->IOPortGuest);
 }
 
Index: /trunk/src/VBox/Additions/WINNT/Graphics/Miniport/VBoxVideoHGSMI.cpp
===================================================================
--- /trunk/src/VBox/Additions/WINNT/Graphics/Miniport/VBoxVideoHGSMI.cpp	(revision 32875)
+++ /trunk/src/VBox/Additions/WINNT/Graphics/Miniport/VBoxVideoHGSMI.cpp	(revision 32876)
@@ -35,15 +35,15 @@
 void HGSMINotifyHostCmdComplete (PDEVICE_EXTENSION PrimaryExtension, HGSMIOFFSET offt)
 {
-    VBoxHGSMIHostWrite(PrimaryExtension, offt);
+    VBoxHGSMIHostWrite(hgsmiFromDeviceExt(PrimaryExtension), offt);
 }
 
 void HGSMIClearIrq (PDEVICE_EXTENSION PrimaryExtension)
 {
-    VBoxHGSMIHostWrite(PrimaryExtension, HGSMIOFFSET_VOID);
+    VBoxHGSMIHostWrite(hgsmiFromDeviceExt(PrimaryExtension), HGSMIOFFSET_VOID);
 }
 
 static void HGSMIHostCmdComplete (PDEVICE_EXTENSION PrimaryExtension, void * pvMem)
 {
-    HGSMIOFFSET offMem = HGSMIPointerToOffset (&PrimaryExtension->u.primary.areaHostHeap, HGSMIBufferHeaderFromData (pvMem));
+    HGSMIOFFSET offMem = HGSMIPointerToOffset (&hgsmiFromDeviceExt(PrimaryExtension)->areaHostHeap, HGSMIBufferHeaderFromData (pvMem));
     Assert(offMem != HGSMIOFFSET_VOID);
     if(offMem != HGSMIOFFSET_VOID)
@@ -55,6 +55,6 @@
 static void hgsmiHostCmdProcess(PDEVICE_EXTENSION PrimaryExtension, HGSMIOFFSET offBuffer)
 {
-    int rc = HGSMIBufferProcess (&PrimaryExtension->u.primary.areaHostHeap,
-                                &PrimaryExtension->u.primary.channels,
+    int rc = HGSMIBufferProcess (&hgsmiFromDeviceExt(PrimaryExtension)->areaHostHeap,
+                                &hgsmiFromDeviceExt(PrimaryExtension)->channels,
                                 offBuffer);
     Assert(!RT_FAILURE(rc));
@@ -70,5 +70,5 @@
 static HGSMIOFFSET hgsmiGetHostBuffer (PDEVICE_EXTENSION PrimaryExtension)
 {
-    return VBoxHGSMIHostRead(PrimaryExtension);
+    return VBoxHGSMIHostRead(hgsmiFromDeviceExt(PrimaryExtension));
 }
 
@@ -190,5 +190,5 @@
     /* @todo: add synchronization */
 #endif
-    return HGSMIHeapAlloc (&PrimaryExtension->u.primary.hgsmiAdapterHeap, cbData, u8Ch, u16Op);
+    return HGSMIHeapAlloc (&hgsmiFromDeviceExt(PrimaryExtension)->hgsmiAdapterHeap, cbData, u8Ch, u16Op);
 }
 
@@ -198,5 +198,5 @@
     /* @todo: add synchronization */
 #endif
-    HGSMIHeapFree (&PrimaryExtension->u.primary.hgsmiAdapterHeap, pvBuffer);
+    HGSMIHeapFree (&hgsmiFromDeviceExt(PrimaryExtension)->hgsmiAdapterHeap, pvBuffer);
 }
 
@@ -204,5 +204,5 @@
 {
     /* Initialize the buffer and get the offset for port IO. */
-    HGSMIOFFSET offBuffer = HGSMIHeapBufferOffset (&PrimaryExtension->u.primary.hgsmiAdapterHeap, pvBuffer);
+    HGSMIOFFSET offBuffer = HGSMIHeapBufferOffset (&hgsmiFromDeviceExt(PrimaryExtension)->hgsmiAdapterHeap, pvBuffer);
 
     Assert(offBuffer != HGSMIOFFSET_VOID);
@@ -210,5 +210,5 @@
     {
         /* Submit the buffer to the host. */
-        VBoxHGSMIGuestWrite(PrimaryExtension, offBuffer);
+        VBoxHGSMIGuestWrite(hgsmiFromDeviceExt(PrimaryExtension), offBuffer);
         return VINF_SUCCESS;
     }
@@ -236,5 +236,5 @@
 #endif
 
-    void *p = HGSMIHeapAlloc (&PrimaryExtension->u.primary.hgsmiAdapterHeap, cbData, u8Ch, u16Op);
+    void *p = HGSMIHeapAlloc (&hgsmiFromDeviceExt(PrimaryExtension)->hgsmiAdapterHeap, cbData, u8Ch, u16Op);
 
     if (!p)
@@ -253,9 +253,9 @@
         {
             /* Initialize the buffer and get the offset for port IO. */
-            HGSMIOFFSET offBuffer = HGSMIHeapBufferOffset (&PrimaryExtension->u.primary.hgsmiAdapterHeap,
+            HGSMIOFFSET offBuffer = HGSMIHeapBufferOffset (&hgsmiFromDeviceExt(PrimaryExtension)->hgsmiAdapterHeap,
                                                            p);
 
             /* Submit the buffer to the host. */
-            VBoxHGSMIGuestWrite(PrimaryExtension, offBuffer);
+            VBoxHGSMIGuestWrite(hgsmiFromDeviceExt(PrimaryExtension), offBuffer);
 
             if (pfnFinalize)
@@ -271,5 +271,5 @@
 
         /* Free the IO buffer. */
-        HGSMIHeapFree (&PrimaryExtension->u.primary.hgsmiAdapterHeap, p);
+        HGSMIHeapFree (&hgsmiFromDeviceExt(PrimaryExtension)->hgsmiAdapterHeap, p);
     }
 
@@ -743,14 +743,14 @@
     PrimaryExtension->u.primary.pHostFlags               = NULL;
     PrimaryExtension->u.primary.ulMaxFrameBufferSize     = 0;
-    PrimaryExtension->u.primary.bHGSMI                   = VBoxHGSMIIsSupported (PrimaryExtension);
-    VBoxVideoCmnMemZero(&PrimaryExtension->u.primary.areaHostHeap, sizeof(HGSMIAREA));
+    hgsmiFromDeviceExt(PrimaryExtension)->bHGSMI         = VBoxHGSMIIsSupported (PrimaryExtension);
+    VBoxVideoCmnMemZero(&hgsmiFromDeviceExt(PrimaryExtension)->areaHostHeap, sizeof(HGSMIAREA));
     VBoxVideoCmnMemZero(&PrimaryExtension->areaDisplay, sizeof(HGSMIAREA));
 
-    if (PrimaryExtension->u.primary.IOPortGuest == 0)
-    {
-        PrimaryExtension->u.primary.bHGSMI = false;
-    }
-
-    if (PrimaryExtension->u.primary.bHGSMI)
+    if (hgsmiFromDeviceExt(PrimaryExtension)->IOPortGuest == 0)
+    {
+        hgsmiFromDeviceExt(PrimaryExtension)->bHGSMI = false;
+    }
+
+    if (hgsmiFromDeviceExt(PrimaryExtension)->bHGSMI)
     {
         /* Map the adapter information. It will be needed for HGSMI IO. */
@@ -765,10 +765,10 @@
                      rc));
 
-            PrimaryExtension->u.primary.bHGSMI = FALSE;
+            hgsmiFromDeviceExt(PrimaryExtension)->bHGSMI = FALSE;
         }
         else
         {
             /* Setup a HGSMI heap within the adapter information area. */
-            rc = HGSMIHeapSetup (&PrimaryExtension->u.primary.hgsmiAdapterHeap,
+            rc = HGSMIHeapSetup (&hgsmiFromDeviceExt(PrimaryExtension)->hgsmiAdapterHeap,
                                  PrimaryExtension->u.primary.pvAdapterInformation,
                                  VBVA_ADAPTER_INFORMATION_SIZE - sizeof(HGSMIHOSTFLAGS),
@@ -781,5 +781,5 @@
                          rc));
 
-                PrimaryExtension->u.primary.bHGSMI = FALSE;
+                hgsmiFromDeviceExt(PrimaryExtension)->bHGSMI = FALSE;
             }
             else
@@ -792,5 +792,5 @@
 
     /* Setup the host heap and the adapter memory. */
-    if (PrimaryExtension->u.primary.bHGSMI)
+    if (hgsmiFromDeviceExt(PrimaryExtension)->bHGSMI)
     {
         /* The miniport heap is used for the host buffers. */
@@ -836,5 +836,5 @@
                 PrimaryExtension->u.primary.pvMiniportHeap = NULL;
                 PrimaryExtension->u.primary.cbMiniportHeap = 0;
-                PrimaryExtension->u.primary.bHGSMI = FALSE;
+                hgsmiFromDeviceExt(PrimaryExtension)->bHGSMI = FALSE;
             }
             else
@@ -845,5 +845,5 @@
 
                 /* Init the host hap area. Buffers from the host will be placed there. */
-                HGSMIAreaInitialize (&PrimaryExtension->u.primary.areaHostHeap,
+                HGSMIAreaInitialize (&hgsmiFromDeviceExt(PrimaryExtension)->areaHostHeap,
                                      PrimaryExtension->u.primary.pvMiniportHeap,
                                      PrimaryExtension->u.primary.cbMiniportHeap,
@@ -860,5 +860,5 @@
 
     /* Check whether the guest supports multimonitors. */
-    if (PrimaryExtension->u.primary.bHGSMI)
+    if (hgsmiFromDeviceExt(PrimaryExtension)->bHGSMI)
     {
 #ifndef VBOX_WITH_WDDM
@@ -939,5 +939,5 @@
 #endif
 
-    if (PrimaryExtension->u.primary.bHGSMI)
+    if (hgsmiFromDeviceExt(PrimaryExtension)->bHGSMI)
     {
         /* Setup the information for the host. */
@@ -946,10 +946,10 @@
         if (RT_FAILURE (rc))
         {
-            PrimaryExtension->u.primary.bHGSMI = FALSE;
+            hgsmiFromDeviceExt(PrimaryExtension)->bHGSMI = FALSE;
         }
     }
 
 #ifdef VBOX_WITH_WDDM
-    if (PrimaryExtension->u.primary.bHGSMI)
+    if (hgsmiFromDeviceExt(PrimaryExtension)->bHGSMI)
     {
         ULONG ulAvailable = PrimaryExtension->u.primary.cbVRAM
@@ -1040,9 +1040,9 @@
 
         if (RT_FAILURE(rc))
-            PrimaryExtension->u.primary.bHGSMI = FALSE;
-    }
-#endif
-
-    if (!PrimaryExtension->u.primary.bHGSMI)
+            hgsmiFromDeviceExt(PrimaryExtension)->bHGSMI = FALSE;
+    }
+#endif
+
+    if (!hgsmiFromDeviceExt(PrimaryExtension)->bHGSMI)
     {
         /* Unmap the memory if VBoxVideo is not supported. */
@@ -1050,8 +1050,8 @@
         VBoxUnmapAdapterInformation (PrimaryExtension);
 
-        HGSMIHeapDestroy (&PrimaryExtension->u.primary.hgsmiAdapterHeap);
-    }
-
-    if (PrimaryExtension->u.primary.bHGSMI)
+        HGSMIHeapDestroy (&hgsmiFromDeviceExt(PrimaryExtension)->hgsmiAdapterHeap);
+    }
+
+    if (hgsmiFromDeviceExt(PrimaryExtension)->bHGSMI)
     {
         VBoxVideoCmnSpinLockCreate(PrimaryExtension, &PrimaryExtension->u.primary.pSynchLock);
@@ -1099,5 +1099,5 @@
 */
             {
-                HGSMIHeapDestroy(&PrimaryExtension->u.primary.hgsmiAdapterHeap);
+                HGSMIHeapDestroy(&hgsmiFromDeviceExt(PrimaryExtension)->hgsmiAdapterHeap);
 
                 /* Map the adapter information. It will be needed for HGSMI IO. */
@@ -1369,5 +1369,5 @@
     VBoxVideoHGSMIDpc(PrimaryExtension, NULL);
 
-    HGSMICHANNEL * pChannel = HGSMIChannelFindById (&PrimaryExtension->u.primary.channels, u8Channel);
+    HGSMICHANNEL * pChannel = HGSMIChannelFindById (&hgsmiFromDeviceExt(PrimaryExtension)->channels, u8Channel);
     if(pChannel)
     {
@@ -1547,5 +1547,5 @@
 {
     VBVA_CHANNELCONTEXTS * pContexts;
-    HGSMICHANNEL * pChannel = HGSMIChannelFindById (&PrimaryExtension->u.primary.channels, u8Channel);
+    HGSMICHANNEL * pChannel = HGSMIChannelFindById (&hgsmiFromDeviceExt(PrimaryExtension)->channels, u8Channel);
     if(!pChannel)
     {
@@ -1584,5 +1584,5 @@
             if(!pChannel)
             {
-                rc = HGSMIChannelRegister (&PrimaryExtension->u.primary.channels,
+                rc = HGSMIChannelRegister (&hgsmiFromDeviceExt(PrimaryExtension)->channels,
                                            u8Channel,
                                            "VGA Miniport HGSMI channel",
Index: /trunk/src/VBox/Additions/WINNT/Graphics/Miniport/wddm/VBoxVideoWddm.cpp
===================================================================
--- /trunk/src/VBox/Additions/WINNT/Graphics/Miniport/wddm/VBoxVideoWddm.cpp	(revision 32875)
+++ /trunk/src/VBox/Additions/WINNT/Graphics/Miniport/wddm/VBoxVideoWddm.cpp	(revision 32876)
@@ -250,6 +250,6 @@
         return &pDevExt->u.primary.Vdma.CmdHeap;
 #endif
-    if (HGSMIAreaContainsOffset(&pDevExt->u.primary.hgsmiAdapterHeap.area, offCmd))
-        return &pDevExt->u.primary.hgsmiAdapterHeap;
+    if (HGSMIAreaContainsOffset(&hgsmiFromDeviceExt(pDevExt)->hgsmiAdapterHeap.area, offCmd))
+        return &hgsmiFromDeviceExt(pDevExt)->hgsmiAdapterHeap;
     return NULL;
 }
@@ -270,5 +270,5 @@
         return VBOXWDDM_HGSMICMD_TYPE_DMACMD;
 #endif
-    if (HGSMIAreaContainsOffset(&pDevExt->u.primary.hgsmiAdapterHeap.area, offCmd))
+    if (HGSMIAreaContainsOffset(&hgsmiFromDeviceExt(pDevExt)->hgsmiAdapterHeap.area, offCmd))
         return VBOXWDDM_HGSMICMD_TYPE_CTL;
     return VBOXWDDM_HGSMICMD_TYPE_UNDEFINED;
@@ -403,6 +403,6 @@
        if (VBoxHGSMIIsSupported (pContext))
        {
-           pContext->u.primary.IOPortHost = (RTIOPORT)VGA_PORT_HGSMI_HOST;
-           pContext->u.primary.IOPortGuest = (RTIOPORT)VGA_PORT_HGSMI_GUEST;
+           hgsmiFromDeviceExt(pContext)->IOPortHost = (RTIOPORT)VGA_PORT_HGSMI_HOST;
+           hgsmiFromDeviceExt(pContext)->IOPortGuest = (RTIOPORT)VGA_PORT_HGSMI_GUEST;
 
            PCM_RESOURCE_LIST pRcList = pDeviceInfo->TranslatedResourceList;
@@ -572,5 +572,5 @@
                  */
                 VBoxSetupDisplaysHGSMI(pContext, AdapterMemorySize);
-                if ((pContext)->u.primary.bHGSMI)
+                if (hgsmiFromDeviceExt(pContext)->bHGSMI)
                 {
                     drprintf(("VBoxVideoWddm: using HGSMI\n"));
@@ -784,5 +784,5 @@
             {
                 /* read the command offset */
-                HGSMIOFFSET offCmd = VBoxHGSMIGuestRead(pDevExt);
+                HGSMIOFFSET offCmd = VBoxHGSMIGuestRead(hgsmiFromDeviceExt(pDevExt));
                 Assert(offCmd != HGSMIOFFSET_VOID);
                 if (offCmd != HGSMIOFFSET_VOID)
@@ -801,5 +801,5 @@
                         case VBOXWDDM_HGSMICMD_TYPE_CTL:
                             pList = &CtlList;
-                            pHeap = &pDevExt->u.primary.hgsmiAdapterHeap;
+                            pHeap = &hgsmiFromDeviceExt(pDevExt)->hgsmiAdapterHeap;
                             break;
                         default:
@@ -964,5 +964,5 @@
     if (!vboxSHGSMIListIsEmpty(&context.data.CtlList))
     {
-        int rc = VBoxSHGSMICommandPostprocessCompletion (&pDevExt->u.primary.hgsmiAdapterHeap, &context.data.CtlList);
+        int rc = VBoxSHGSMICommandPostprocessCompletion (&hgsmiFromDeviceExt(pDevExt)->hgsmiAdapterHeap, &context.data.CtlList);
         AssertRC(rc);
     }
