Index: /trunk/src/VBox/Runtime/Makefile.kmk
===================================================================
--- /trunk/src/VBox/Runtime/Makefile.kmk	(revision 19825)
+++ /trunk/src/VBox/Runtime/Makefile.kmk	(revision 19826)
@@ -1146,5 +1146,4 @@
 	generic/mppresent-generic.cpp \
 	nt/RTErrConvertFromNtStatus.cpp \
-	r0drv/generic/RTMpPokeCpu-r0drv-generic.cpp \
 	r0drv/memobj-r0drv.cpp \
 	r0drv/mpnotification-r0drv.c \
Index: /trunk/src/VBox/Runtime/r0drv/nt/mp-r0drv-nt.cpp
===================================================================
--- /trunk/src/VBox/Runtime/r0drv/nt/mp-r0drv-nt.cpp	(revision 19825)
+++ /trunk/src/VBox/Runtime/r0drv/nt/mp-r0drv-nt.cpp	(revision 19826)
@@ -330,2 +330,47 @@
 }
 
+static KDPC aPokeDpcs[MAXIMUM_PROCESSORS] = {0};
+static bool fPokeDPCsInitialized = false;
+
+static VOID rtMpNtPokeCpuDummy(IN PKDPC Dpc, IN PVOID DeferredContext, IN PVOID SystemArgument1, IN PVOID SystemArgument2)
+{
+    NOREF(Dpc);
+    NOREF(DeferredContext);
+    NOREF(SystemArgument1);
+    NOREF(SystemArgument2);
+}
+
+
+RTDECL(int) RTMpPokeCpu(RTCPUID idCpu)
+{
+    if (!RTMpIsCpuOnline(idCpu))
+        return !RTMpIsCpuPossible(idCpu)
+              ? VERR_CPU_NOT_FOUND
+              : VERR_CPU_OFFLINE;
+
+    if (!fPokeDPCsInitialized)
+    {
+        for (unsigned i = 0; i < RT_ELEMENTS(aPokeDpcs); i++)
+        {
+            KeInitializeDpc(&aPokeDpcs[i], rtmpNtDPCWrapper, NULL);
+            KeSetImportanceDpc(&aPokeDpcs[i], HighImportance);
+            KeSetTargetProcessorDpc(&aPokeDpcs[i], (int)i);
+        }
+        fPokeDPCsInitialized = true;
+    }
+
+    /* Raise the IRQL to DISPATCH_LEVEL so we can't be rescheduled to another cpu.
+     * KeInsertQueueDpc must also be executed at IRQL >= DISPATCH_LEVEL.
+     */
+    KIRQL oldIrql;
+    KeRaiseIrql(DISPATCH_LEVEL, &oldIrql);
+
+    /* Assuming here that high importance DPCs will be delivered immediately; or at least an IPI will be sent immediately.
+     * Todo: verify!
+     */
+    BOOLEAN ret = KeInsertQueueDpc(&aPokeDpcs[idCpu], 0, 0);
+    Assert(ret);
+
+    KeLowerIrql(oldIrql);
+    return VINF_SUCCESS;
+}
