Index: /trunk/include/iprt/nt/nt-and-windows.h
===================================================================
--- /trunk/include/iprt/nt/nt-and-windows.h	(revision 57921)
+++ /trunk/include/iprt/nt/nt-and-windows.h	(revision 57922)
@@ -37,4 +37,5 @@
 
 #define IPRT_NT_USE_WINTERNL
+#define IPRT_NT_HAVE_CURRENT_TEB_MACRO
 #define WIN32_NO_STATUS
 #include <Windows.h>
Index: /trunk/include/iprt/nt/nt.h
===================================================================
--- /trunk/include/iprt/nt/nt.h	(revision 57921)
+++ /trunk/include/iprt/nt/nt.h	(revision 57922)
@@ -1358,8 +1358,23 @@
 typedef PTEB_COMMON PTEB;
 
-#define RTNtCurrentTeb()        ((PTEB)NtCurrentTeb())
-#define RTNtCurrentPeb()        (RTNtCurrentTeb()->ProcessEnvironmentBlock)
-#define NtCurrentPeb()          RTNtCurrentPeb()
-#define RTNtCurrentThreadId()   ((uint32_t)(uintptr_t)RTNtCurrentTeb()->ClientId.UniqueThread)
+#if !defined(NtCurrentTeb) && !defined(IPRT_NT_HAVE_CURRENT_TEB_MACRO)
+# ifdef RT_ARCH_X86
+DECL_FORCE_INLINE(PTEB)     RTNtCurrentTeb(void) { return (PTEB)__readfsdword(RT_OFFSETOF(TEB_COMMON, NtTib.Self)); }
+DECL_FORCE_INLINE(PPEB)     RTNtCurrentPeb(void) { return (PPEB)__readfsdword(RT_OFFSETOF(TEB_COMMON, ProcessEnvironmentBlock)); }
+DECL_FORCE_INLINE(uint32_t) RTNtCurrentThreadId(void) { return __readfsdword(RT_OFFSETOF(TEB_COMMON, ClientId.UniqueThread)); }
+# elif defined(RT_ARCH_AMD64)
+DECL_FORCE_INLINE(PTEB)     RTNtCurrentTeb(void) { return (PTEB)__readgsqword(RT_OFFSETOF(TEB_COMMON, NtTib.Self)); }
+DECL_FORCE_INLINE(PPEB)     RTNtCurrentPeb(void) { return (PPEB)__readgsqword(RT_OFFSETOF(TEB_COMMON, ProcessEnvironmentBlock)); }
+DECL_FORCE_INLINE(uint32_t) RTNtCurrentThreadId(void) { return (uint32_t)__readgsqword(RT_OFFSETOF(TEB_COMMON, ClientId.UniqueThread)); }
+# else
+#  error "Port me"
+# endif
+#else
+# define RTNtCurrentTeb()        ((PTEB)NtCurrentTeb())
+# define RTNtCurrentPeb()        (RTNtCurrentTeb()->ProcessEnvironmentBlock)
+# define RTNtCurrentThreadId()   ((uint32_t)(uintptr_t)RTNtCurrentTeb()->ClientId.UniqueThread)
+#endif
+#define NtCurrentPeb()           RTNtCurrentPeb()
+
 
 /** @} */
