Index: /trunk/src/VBox/Additions/WINNT/Graphics/Miniport/VBoxVideo.cpp
===================================================================
--- /trunk/src/VBox/Additions/WINNT/Graphics/Miniport/VBoxVideo.cpp	(revision 33799)
+++ /trunk/src/VBox/Additions/WINNT/Graphics/Miniport/VBoxVideo.cpp	(revision 33800)
@@ -205,4 +205,44 @@
     return VideoPortSetRegistryParameters(Reg, pName, &Val, sizeof(Val));
 }
+
+void VBoxVideoCmnSignalEvent(PVBOXVIDEO_COMMON pCommon, uint64_t pvEvent)
+{
+    PDEVICE_EXTENSION PrimaryExtension = commonToPrimaryExt(pCommon);
+#ifndef VBOX_WITH_WDDM
+    PEVENT pEvent = (PEVENT)pvEvent;
+    PrimaryExtension->u.primary.VideoPortProcs.pfnSetEvent(PrimaryExtension,
+                                                           pEvent);
+#else
+    PKEVENT pEvent = (PKEVENT)pvEvent;
+    KeSetEvent(pEvent, 0, FALSE);
+#endif
+}
+
+
+#define MEM_TAG 'HVBV'
+
+void *VBoxVideoCmnMemAllocDriver(PVBOXVIDEO_COMMON pCommon, size_t cb)
+{
+    ULONG Tag = MEM_TAG;
+#ifndef VBOX_WITH_WDDM
+    PDEVICE_EXTENSION PrimaryExtension = commonToPrimaryExt(pCommon);
+    return PrimaryExtension->u.primary.VideoPortProcs.pfnAllocatePool(PrimaryExtension, (VBOXVP_POOL_TYPE)VpNonPagedPool, cb, Tag);
+#else
+    return ExAllocatePoolWithTag(NonPagedPool, cb, Tag);
+#endif
+}
+
+
+void VBoxVideoCmnMemFreeDriver(PVBOXVIDEO_COMMON pCommon, void *pv)
+{
+#ifndef VBOX_WITH_WDDM
+    PDEVICE_EXTENSION PrimaryExtension = commonToPrimaryExt(pCommon);
+    PrimaryExtension->u.primary.VideoPortProcs.pfnFreePool(PrimaryExtension,
+                                                           pv);
+#else
+    ExFreePool(pv);
+#endif
+}
+
 
 static void VBoxSetupVideoPortFunctions(PDEVICE_EXTENSION PrimaryExtension,
Index: /trunk/src/VBox/Additions/WINNT/Graphics/Miniport/VBoxVideo.h
===================================================================
--- /trunk/src/VBox/Additions/WINNT/Graphics/Miniport/VBoxVideo.h	(revision 33799)
+++ /trunk/src/VBox/Additions/WINNT/Graphics/Miniport/VBoxVideo.h	(revision 33800)
@@ -372,4 +372,15 @@
 extern "C"
 {
+/** Signal an event in a guest-OS-specific way.  pvEvent will be re-cast to
+ * something OS-specific. */
+void VBoxVideoCmnSignalEvent(PVBOXVIDEO_COMMON pCommon, uint64_t pvEvent);
+
+/** Allocate memory to be used in normal driver operation (dispatch level in
+ * Windows) but not necessarily in IRQ context. */
+void *VBoxVideoCmnMemAllocDriver(PVBOXVIDEO_COMMON pCommon, size_t cb);
+
+/** Free memory allocated by @a VBoxVideoCmnMemAllocDriver */
+void VBoxVideoCmnMemFreeDriver(PVBOXVIDEO_COMMON pCommon, void *pv);
+
 #ifndef VBOX_WITH_WDDM
 /* XPDM-WDDM common API */
@@ -462,14 +473,4 @@
 }
 
-DECLINLINE(PVOID) VBoxVideoCmnMemAllocNonPaged(IN PDEVICE_EXTENSION pDeviceExtension, IN SIZE_T NumberOfBytes, IN ULONG Tag)
-{
-    return pDeviceExtension->u.primary.VideoPortProcs.pfnAllocatePool(pDeviceExtension, (VBOXVP_POOL_TYPE)VpNonPagedPool, NumberOfBytes, Tag);
-}
-
-DECLINLINE(VOID) VBoxVideoCmnMemFree(IN PDEVICE_EXTENSION pDeviceExtension, IN PVOID Ptr)
-{
-    pDeviceExtension->u.primary.VideoPortProcs.pfnFreePool(pDeviceExtension, Ptr);
-}
-
 DECLINLINE(VP_STATUS) VBoxVideoCmnRegInit(IN PDEVICE_EXTENSION pDeviceExtension, OUT VBOXCMNREG *pReg)
 {
@@ -576,14 +577,4 @@
 {
     return NO_ERROR;
-}
-
-DECLINLINE(PVOID) VBoxVideoCmnMemAllocNonPaged(IN PDEVICE_EXTENSION pDeviceExtension, IN SIZE_T NumberOfBytes, IN ULONG Tag)
-{
-    return ExAllocatePoolWithTag(NonPagedPool, NumberOfBytes, Tag);
-}
-
-DECLINLINE(VOID) VBoxVideoCmnMemFree(IN PDEVICE_EXTENSION pDeviceExtension, IN PVOID Ptr)
-{
-    ExFreePool(Ptr);
 }
 
@@ -839,4 +830,5 @@
 }
 
+
 BOOLEAN VBoxHGSMIIsSupported (void);
 
Index: /trunk/src/VBox/Additions/WINNT/Graphics/Miniport/VBoxVideoHGSMI.cpp
===================================================================
--- /trunk/src/VBox/Additions/WINNT/Graphics/Miniport/VBoxVideoHGSMI.cpp	(revision 33799)
+++ /trunk/src/VBox/Additions/WINNT/Graphics/Miniport/VBoxVideoHGSMI.cpp	(revision 33800)
@@ -30,6 +30,4 @@
 
 #include "vboxioctl.h"
-
-#define MEM_TAG 'HVBV'
 
 void HGSMINotifyHostCmdComplete (PVBOXVIDEO_COMMON pCommon, HGSMIOFFSET offt)
@@ -719,7 +717,8 @@
 }VBVA_CHANNELCONTEXTS;
 
-static int vboxVBVADeleteChannelContexts(PDEVICE_EXTENSION PrimaryExtension, VBVA_CHANNELCONTEXTS * pContext)
-{
-    VBoxVideoCmnMemFree(PrimaryExtension,pContext);
+static int vboxVBVADeleteChannelContexts(PVBOXVIDEO_COMMON pCommon,
+                                         VBVA_CHANNELCONTEXTS * pContext)
+{
+    VBoxVideoCmnMemFreeDriver(pCommon, pContext);
     return VINF_SUCCESS;
 }
@@ -729,5 +728,5 @@
     uint32_t cDisplays = (uint32_t)commonFromDeviceExt(PrimaryExtension)->cDisplays;
     const size_t size = RT_OFFSETOF(VBVA_CHANNELCONTEXTS, aContexts[cDisplays]);
-    VBVA_CHANNELCONTEXTS * pContext = (VBVA_CHANNELCONTEXTS*)VBoxVideoCmnMemAllocNonPaged(PrimaryExtension, size, MEM_TAG);
+    VBVA_CHANNELCONTEXTS * pContext = (VBVA_CHANNELCONTEXTS*)VBoxVideoCmnMemAllocDriver(commonFromDeviceExt(PrimaryExtension), size);
     if(pContext)
     {
@@ -802,4 +801,5 @@
     return VERR_INVALID_PARAMETER;
 }
+
 
 static DECLCALLBACK(int) vboxVBVAChannelGenericHandler(void *pvHandler, uint16_t u16ChannelInfo, void *pvBuffer, HGSMISIZE cbBuffer)
@@ -829,4 +829,5 @@
                         case VBVAHG_DISPLAY_CUSTOM:
                         {
+#if 0  /* Never taken */
                             if(pLast)
                             {
@@ -835,4 +836,5 @@
                             }
                             else
+#endif
                             {
                                 pFirst = pCur;
@@ -840,7 +842,12 @@
                             }
                             Assert(!pCur->u.Data);
+#if 0  /* Who is supposed to set pNext? */
                             //TODO: use offset here
                             pCur = pCur->u.pNext;
                             Assert(!pCur);
+#else
+                            Assert(!pCur->u.pNext);
+                            pCur = NULL;
+#endif
                             Assert(pFirst);
                             Assert(pFirst == pLast);
@@ -850,13 +857,5 @@
                         {
                             VBVAHOSTCMDEVENT *pEventCmd = VBVAHOSTCMD_BODY(pCur, VBVAHOSTCMDEVENT);
-#ifndef VBOX_WITH_WDDM
-                            PEVENT pEvent = (PEVENT)pEventCmd->pEvent;
-                            pCallbacks->PrimaryExtension->u.primary.VideoPortProcs.pfnSetEvent(
-                                    pCallbacks->PrimaryExtension,
-                                    pEvent);
-#else
-                            PKEVENT pEvent = (PKEVENT)pEventCmd->pEvent;
-                            KeSetEvent(pEvent, 0, FALSE);
-#endif
+                            VBoxVideoCmnSignalEvent(commonFromDeviceExt(pCallbacks->PrimaryExtension), pEventCmd->pEvent);
                         }
                         default:
@@ -865,4 +864,5 @@
                             Assert(u16ChannelInfo==VBVAHG_EVENT);
                             Assert(!pCur->u.Data);
+#if 0  /* pLast has been asserted to be NULL, and who should set pNext? */
                             //TODO: use offset here
                             if(pLast)
@@ -870,9 +870,16 @@
                             VBVAHOSTCMD * pNext = pCur->u.pNext;
                             pCur->u.pNext = NULL;
+#else
+                            Assert(!pCur->u.pNext);
+#endif
                             HGSMIHostCmdComplete(commonFromDeviceExt(pCallbacks->PrimaryExtension), pCur);
+#if 0  /* pNext is NULL, and the other things have already been asserted */
                             pCur = pNext;
                             Assert(!pCur);
                             Assert(!pFirst);
                             Assert(pFirst == pLast);
+#else
+                            pCur = NULL;
+#endif
                             break;
                         }
@@ -1005,5 +1012,5 @@
     if(!pChannel)
     {
-        vboxVBVADeleteChannelContexts(PrimaryExtension, pContexts);
+        vboxVBVADeleteChannelContexts(commonFromDeviceExt(PrimaryExtension), pContexts);
     }
 
