Index: /trunk/include/iprt/thread.h
===================================================================
--- /trunk/include/iprt/thread.h	(revision 71149)
+++ /trunk/include/iprt/thread.h	(revision 71150)
@@ -483,7 +483,15 @@
  * Pokes the thread.
  *
- * This will signal the thread, attempting to interrupt whatever it's currently
- * doing.  This is *NOT* implemented on all platforms and may cause unresolved
- * symbols during linking or VERR_NOT_IMPLEMENTED at runtime.
+ * This will wake up or/and signal the thread, attempting to interrupt whatever
+ * it's currently doing.
+ *
+ * The posixy version of this will send a signal to the thread, quite likely
+ * waking it up from normal sleeps, waits, and I/O.  When IPRT is in
+ * non-obtrusive mode, the posixy version will definitely return
+ * VERR_NOT_IMPLEMENTED, and it may also do so if no usable signal was found.
+ *
+ * On Windows the thread will be alerted, waking it up from most sleeps and
+ * waits, but not probably very little in the I/O area (needs testing).  On NT
+ * 3.50 and 3.1 VERR_NOT_IMPLEMENTED will be returned.
  *
  * @returns IPRT status code.
@@ -491,4 +499,8 @@
  * @param   hThread             The thread to poke.  This must not be the
  *                              calling thread.
+ *
+ * @note    This is *NOT* implemented on all platforms and may cause unresolved
+ *          symbols during linking or VERR_NOT_IMPLEMENTED at runtime.
+ *
  */
 RTDECL(int) RTThreadPoke(RTTHREAD hThread);
Index: /trunk/src/VBox/Runtime/r3/win/init-win.cpp
===================================================================
--- /trunk/src/VBox/Runtime/r3/win/init-win.cpp	(revision 71149)
+++ /trunk/src/VBox/Runtime/r3/win/init-win.cpp	(revision 71150)
@@ -84,4 +84,6 @@
 /** NtDuplicateToken (NT 3.51). */
 DECLHIDDEN(PFNNTDUPLICATETOKEN)             g_pfnNtDuplicateToken = NULL;
+/** NtAlertThread (NT 3.51). */
+decltype(NtAlertThread)                    *g_pfnNtAlertThread = NULL;
 
 /** Either ws2_32.dll (NT4+) or wsock32.dll (NT3.x). */
@@ -513,5 +515,5 @@
     g_pfnNtQueryFullAttributesFile = (PFNNTQUERYFULLATTRIBUTESFILE)GetProcAddress(g_hModNtDll, "NtQueryFullAttributesFile");
     g_pfnNtDuplicateToken          = (PFNNTDUPLICATETOKEN)GetProcAddress(         g_hModNtDll, "NtDuplicateToken");
-
+    g_pfnNtAlertThread             = (decltype(NtAlertThread) *)GetProcAddress(   g_hModNtDll, "NtAlertThread");
 
     /*
Index: /trunk/src/VBox/Runtime/r3/win/internal-r3-win.h
===================================================================
--- /trunk/src/VBox/Runtime/r3/win/internal-r3-win.h	(revision 71149)
+++ /trunk/src/VBox/Runtime/r3/win/internal-r3-win.h	(revision 71150)
@@ -109,4 +109,7 @@
 typedef NTSTATUS (NTAPI *PFNNTDUPLICATETOKEN)(HANDLE, ACCESS_MASK, struct _OBJECT_ATTRIBUTES *, BOOLEAN, TOKEN_TYPE, PHANDLE);
 extern DECLHIDDEN(PFNNTDUPLICATETOKEN)             g_pfnNtDuplicateToken;
+#ifdef ___iprt_nt_nt_h___
+extern decltype(NtAlertThread)                    *g_pfnNtAlertThread;
+#endif
 
 extern DECLHIDDEN(HMODULE)                         g_hModWinSock;
Index: /trunk/src/VBox/Runtime/r3/win/thread-win.cpp
===================================================================
--- /trunk/src/VBox/Runtime/r3/win/thread-win.cpp	(revision 71149)
+++ /trunk/src/VBox/Runtime/r3/win/thread-win.cpp	(revision 71150)
@@ -45,4 +45,5 @@
 #include <iprt/mem.h>
 #include "internal/thread.h"
+#include "internal-r3-win.h"
 
 
@@ -400,2 +401,21 @@
 RT_EXPORT_SYMBOL(RTThreadGetNativeHandle);
 
+
+RTDECL(int) RTThreadPoke(RTTHREAD hThread)
+{
+    AssertReturn(hThread != RTThreadSelf(), VERR_INVALID_PARAMETER);
+    if (g_pfnNtAlertThread)
+    {
+        PRTTHREADINT pThread = rtThreadGet(hThread);
+        AssertReturn(pThread, VERR_INVALID_HANDLE);
+
+        NTSTATUS rcNt = g_pfnNtAlertThread((HANDLE)pThread->hThread);
+
+        rtThreadRelease(pThread);
+        if (NT_SUCCESS(rcNt))
+            return VINF_SUCCESS;
+        return RTErrConvertFromErrno(rcNt);
+    }
+    return VERR_NOT_IMPLEMENTED;
+}
+
