Index: /trunk/src/VBox/Additions/WINNT/Graphics/Display/screen.c
===================================================================
--- /trunk/src/VBox/Additions/WINNT/Graphics/Display/screen.c	(revision 22847)
+++ /trunk/src/VBox/Additions/WINNT/Graphics/Display/screen.c	(revision 22848)
@@ -151,5 +151,9 @@
                         0,
                         &returnedDataLength);
+#ifdef DEBUG_misha
                 Assert(!err);
+#endif
+                /* this is not fatal, just means Video 2D acceleration will not be supported */
+                err = 0;
             }
         }
Index: /trunk/src/VBox/Additions/WINNT/Graphics/Miniport/VBoxHGSMI.h
===================================================================
--- /trunk/src/VBox/Additions/WINNT/Graphics/Miniport/VBoxHGSMI.h	(revision 22847)
+++ /trunk/src/VBox/Additions/WINNT/Graphics/Miniport/VBoxHGSMI.h	(revision 22848)
@@ -60,4 +60,12 @@
 typedef union _LARGE_INTEGER *VBOXPLARGE_INTEGER;
 
+typedef enum VBOXVP_POOL_TYPE
+{
+    VBoxVpNonPagedPool,
+    VBoxVpPagedPool,
+    VBoxVpNonPagedPoolCacheAligned = 4,
+    VBoxVpPagedPoolCacheAligned
+} VBOXVP_POOL_TYPE;
+
 #define VBOXNOTIFICATION_EVENT 0x00000001UL
 
@@ -79,4 +87,6 @@
 typedef void (*PFNRELEASESPINLOCKFROMDPCLEVEL) (void*  HwDeviceExtension, VBOXPSPIN_LOCK  SpinLock);
 
+typedef void* (*PFNALLOCATEPOOL) (void*  HwDeviceExtension, VBOXVP_POOL_TYPE PoolType, size_t NumberOfBytes, unsigned long Tag);
+typedef void (*PFNFREEPOOL) (void*  HwDeviceExtension, void*  Ptr);
 
 /* pfn*SpinLock* functions are available */
@@ -84,4 +94,6 @@
 /* pfn*Event and pfnWaitForSingleObject functions are available */
 #define VBOXVIDEOPORTPROCS_EVENT    0x00000002
+/* pfn*Pool functions are available */
+#define VBOXVIDEOPORTPROCS_POOL     0x00000004
 
 typedef struct VBOXVIDEOPORTPROCS
@@ -103,4 +115,7 @@
     PFNACQUIRESPINLOCKATDPCLEVEL pfnAcquireSpinLockAtDpcLevel;
     PFNRELEASESPINLOCKFROMDPCLEVEL pfnReleaseSpinLockFromDpcLevel;
+
+    PFNALLOCATEPOOL pfnAllocatePool;
+    PFNFREEPOOL pfnFreePool;
 } VBOXVIDEOPORTPROCS;
 
Index: /trunk/src/VBox/Additions/WINNT/Graphics/Miniport/VBoxVideoHGSMI.cpp
===================================================================
--- /trunk/src/VBox/Additions/WINNT/Graphics/Miniport/VBoxVideoHGSMI.cpp	(revision 22847)
+++ /trunk/src/VBox/Additions/WINNT/Graphics/Miniport/VBoxVideoHGSMI.cpp	(revision 22848)
@@ -461,4 +461,13 @@
 }
 
+PVOID vboxAllocatePoolVoid(IN PVOID  HwDeviceExtension, IN VBOXVP_POOL_TYPE  PoolType, IN size_t  NumberOfBytes, IN ULONG  Tag)
+{
+    return NULL;
+}
+
+VOID vboxFreePoolVoid(IN PVOID  HwDeviceExtension, IN PVOID  Ptr)
+{
+}
+
 void VBoxSetupVideoPortFunctions(PDEVICE_EXTENSION PrimaryExtension, VBOXVIDEOPORTPROCS *pCallbacks, PVIDEO_PORT_CONFIG_INFO pConfigInfo)
 {
@@ -562,6 +571,29 @@
     }
 
+    pCallbacks->pfnAllocatePool = (PFNALLOCATEPOOL)(pConfigInfo->VideoPortGetProcAddress)
+            (PrimaryExtension,
+             (PUCHAR)"VideoPortAllocatePool");
+    Assert(pCallbacks->pfnAllocatePool);
+
+    pCallbacks->pfnFreePool = (PFNFREEPOOL)(pConfigInfo->VideoPortGetProcAddress)
+            (PrimaryExtension,
+             (PUCHAR)"VideoPortFreePool");
+    Assert(pCallbacks->pfnFreePool);
+
+    if(pCallbacks->pfnAllocatePool
+            && pCallbacks->pfnFreePool)
+    {
+        pCallbacks->fSupportedTypes |= VBOXVIDEOPORTPROCS_POOL;
+    }
+    else
+    {
+        pCallbacks->pfnAllocatePool = vboxAllocatePoolVoid;
+        pCallbacks->pfnFreePool = vboxFreePoolVoid;
+    }
+
+#ifdef DEBUG_misha
     Assert(pCallbacks->fSupportedTypes & VBOXVIDEOPORTPROCS_EVENT);
     Assert(pCallbacks->fSupportedTypes & VBOXVIDEOPORTPROCS_SPINLOCK);
+#endif
 }
 
@@ -977,5 +1009,5 @@
 static int vboxVBVADeleteChannelContexts(PDEVICE_EXTENSION PrimaryExtension, VBVA_CHANNELCONTEXTS * pContext)
 {
-    VideoPortFreePool(PrimaryExtension,pContext);
+    PrimaryExtension->u.primary.VideoPortProcs.pfnFreePool(PrimaryExtension,pContext);
 	return VINF_SUCCESS;
 }
@@ -985,6 +1017,6 @@
 	uint32_t cDisplays = (uint32_t)PrimaryExtension->u.primary.cDisplays;
 	const size_t size = RT_OFFSETOF(VBVA_CHANNELCONTEXTS, aContexts[cDisplays]);
-	VBVA_CHANNELCONTEXTS * pContext = (VBVA_CHANNELCONTEXTS*)VideoPortAllocatePool(PrimaryExtension,
-	        VpNonPagedPool,
+	VBVA_CHANNELCONTEXTS * pContext = (VBVA_CHANNELCONTEXTS*)PrimaryExtension->u.primary.VideoPortProcs.pfnAllocatePool(PrimaryExtension,
+	        VBoxVpNonPagedPool,
 	        size,
 	        MEM_TAG);
