Index: /trunk/src/VBox/Runtime/r0drv/nt/thread-r0drv-nt.cpp
===================================================================
--- /trunk/src/VBox/Runtime/r0drv/nt/thread-r0drv-nt.cpp	(revision 19914)
+++ /trunk/src/VBox/Runtime/r0drv/nt/thread-r0drv-nt.cpp	(revision 19915)
@@ -88,21 +88,19 @@
 
 
-#if 0
 RTDECL(bool) RTThreadPreemptIsPending(RTTHREAD hThread)
 {
     Assert(hThread == NIL_RTTHREAD);
 
-    KeRaiseIrql
+    uint8_t volatile *pbQuantumEnd;
     RTCCUINTREG       fSavedFlags  = ASMIntDisableFlags();
-    PKPCR             pPcr         = KeGetPcr();
-    uint8_t volatile *pbQuantumEnd;
 
 #if   defined(RT_ARCH_X86)
     /* HACK ALERT! The offset is from ks386.inc. */
-    pbQuantumEnd = (uint8_t volatile *)pPcr->Prcb + 0x3375;
-
+    PKPCR pPcr = (PKPCR)__readfsdword(RT_OFFSETOF(KPCR,SelfPcr));
+    pbQuantumEnd = (uint8_t volatile *)pPcr->Prcb + 0x1a41;
 
 #elif defined(RT_ARCH_AMD64)
     /* HACK ALERT! The offset is from windbg/vista64. */
+    PKPCR pPcr = (PKPCR)__readgsqword(RT_OFFSETOF(KPCR,Self));
     pbQuantumEnd = (uint8_t volatile *)pPcr->CurrentPrcb + 0x3375;
 
@@ -110,11 +108,10 @@
 # error "port me"
 #endif
-
-    bool fResult = *pbQuantumEnd != FALSE;
+    uint8_t QuantumEnd = *pbQuantumEnd;
     ASMSetFlags(fSavedFlags);
 
-    return fResult;
+    AssertMsg(QuantumEnd == FALSE || QuantumEnd == TRUE, ("%x\n", QuantumEnd));
+    return QuantumEnd == TRUE;
 }
-#endif
 
 
