Index: /trunk/kProfiler2/Makefile.kmk
===================================================================
--- /trunk/kProfiler2/Makefile.kmk	(revision 12)
+++ /trunk/kProfiler2/Makefile.kmk	(revision 13)
@@ -106,4 +106,5 @@
 kPrf2_SOURCES.win = \
 	dllmain-win.cpp \
+	kPrf2WinApiWrapperHlp.c \
 	prf$(BUILD_TARGET_ARCH)msc.asm \
 	kPrf2-win-$(BUILD_TARGET_ARCH).def
@@ -135,6 +136,8 @@
 
 DLLS.win += kPrf2WinApiWrappers
-kPrf2WinApiWrappers_TEMPLATE = kStuffEXE
+kPrf2WinApiWrappers_TEMPLATE = kPrf2
 kPrf2WinApiWrappers_CFLAGS = -GH -Gh
+kPrf2WinApiWrappers_LDFLAGS.win.x86 = -Entry:DllMain@12
+kPrf2WinApiWrappers_LDFLAGS.win.amd64 = -Entry:DllMain
 kPrf2WinApiWrappers_SOURCES = \
 	kPrf2WinApiWrappers.c \
@@ -161,5 +164,9 @@
 	$(APPEND) $@.tmp 'PVOID RtlMoveMemory( PVOID pvDst, PVOID pvSrc, SIZE_T cb );'
 	$(APPEND) $@.tmp 'VOID NTAPI RtlUnwind( PVOID TargetFrame, PVOID TargetIp, PEXCEPTION_RECORD ExceptionRecord, PVOID ReturnValue );'
-#	$(APPEND) $@.tmp 'VOID NTAPI RtlUnwindEx( FRAME_POINTERS TargetFrame, PVOID TargetIp, PEXCEPTION_RECORD ExceptionRecord, PVOID ReturnValue, PCONTEXT ContextRecord, PUNWIND_HISTORY_TABLE HistoryTable );'
+	$(APPEND) $@.tmp 'VOID NTAPI RtlUnwindEx( FRAME_POINTERS TargetFrame, PVOID TargetIp, PEXCEPTION_RECORD ExceptionRecord, PVOID ReturnValue, PCONTEXT ContextRecord, PUNWIND_HISTORY_TABLE HistoryTable );'
+	$(APPEND) $@.tmp 'ULONGLONG WINAPI RtlVirtualUnwind( ULONG HandlerType, ULONGLONG ImageBase, ULONGLONG ControlPC, PRUNTIME_FUNCTION FunctionEntry, PCONTEXT ContextRecord, PBOOLEAN InFunction, PFRAME_POINTERS EstablisherFrame, PKNONVOLATILE_CONTEXT_POINTERS ContextPointers );'
+	$(APPEND) $@.tmp 'PVOID WINAPI RtlPcToFileHeader( PVOID PcValue, PVOID * BaseOfImage );'
+	$(APPEND) $@.tmp 'PVOID WINAPI RtlLookupFunctionEntry( ULONGLONG ControlPC, PULONGLONG ImageBase, PULONGLONG TargetGp );'
+	$(APPEND) $@.tmp 'void WINAPI RtlRaiseException(PEXCEPTION_RECORD pXcpRec);'
 	$(APPEND) $@.tmp 'int WINAPI uaw_lstrcmpW( LPCUWSTR lpString1, LPCUWSTR lpString2 );'
 	$(APPEND) $@.tmp 'int WINAPI uaw_lstrcmpiW( LPCUWSTR lpString1, LPCUWSTR lpString2 );'
Index: /trunk/kProfiler2/kPrf2-win-amd64.def
===================================================================
--- /trunk/kProfiler2/kPrf2-win-amd64.def	(revision 12)
+++ /trunk/kProfiler2/kPrf2-win-amd64.def	(revision 13)
@@ -30,4 +30,4 @@
     _pexit
     KPrfInit
+    kPrf2WrapResolve
 
-
Index: /trunk/kProfiler2/kPrf2-win-x86.def
===================================================================
--- /trunk/kProfiler2/kPrf2-win-x86.def	(revision 12)
+++ /trunk/kProfiler2/kPrf2-win-x86.def	(revision 13)
@@ -30,3 +30,3 @@
     _pexit
     KPrfInit
-
+    kPrf2WrapResolve
Index: /trunk/kProfiler2/kPrf2WinApi-dumpbin.sed
===================================================================
--- /trunk/kProfiler2/kPrf2WinApi-dumpbin.sed	(revision 12)
+++ /trunk/kProfiler2/kPrf2WinApi-dumpbin.sed	(revision 13)
@@ -56,4 +56,18 @@
 s/[[:space:]][[:space:]]*/ /g
 /^$/b drop_line
+
+# Filter out APIs that hasn't been implemented.
+/AddLocalAlternateComputerNameA/b drop_line
+/AddLocalAlternateComputerNameW/b drop_line
+/EnumerateLocalComputerNamesA/b drop_line
+/EnumerateLocalComputerNamesW/b drop_line
+/RemoveLocalAlternateComputerNameA/b drop_line
+/RemoveLocalAlternateComputerNameW/b drop_line
+/SetLocalPrimaryComputerNameA/b drop_line
+/SetLocalPrimaryComputerNameW/b drop_line
+/__C_specific_handler/b drop_line
+/__misaligned_access/b drop_line
+/_local_unwind/b drop_line
+
 b end
 
Index: /trunk/kProfiler2/kPrf2WinApi-pre.sed
===================================================================
--- /trunk/kProfiler2/kPrf2WinApi-pre.sed	(revision 12)
+++ /trunk/kProfiler2/kPrf2WinApi-pre.sed	(revision 13)
@@ -1,3 +1,3 @@
-# $Id:$
+# $Id$
 ## @file
 # This SED script will try normalize a windows header
Index: /trunk/kProfiler2/kPrf2WinApiWrapperHlp.c
===================================================================
--- /trunk/kProfiler2/kPrf2WinApiWrapperHlp.c	(revision 13)
+++ /trunk/kProfiler2/kPrf2WinApiWrapperHlp.c	(revision 13)
@@ -0,0 +1,47 @@
+/* $Id$ */
+/** @file
+ * Helpers for the Windows API wrapper DLL.
+ */
+
+/*
+ * Copyright (c) 2008 knut st. osmundsen <bird-src-spam@anduin.net>
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with This program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
+ *
+ */
+
+/*******************************************************************************
+*   Header Files                                                               *
+*******************************************************************************/
+#include <Windows.h>
+#include "kPRf2WinApiWRapperHlp.h"
+
+
+FARPROC kPrf2WrapResolve(void **ppfn, const char *pszName, PKPRF2WRAPDLL pDll)
+{
+    FARPROC pfn;
+    HMODULE hmod = pDll->hmod;
+    if (hmod == INVALID_HANDLE_VALUE)
+    {
+        hmod = LoadLibraryA(pDll->szName);
+        pDll->hmod = hmod;
+    }
+
+    pfn = GetProcAddress(hmod, pszName);
+    *ppfn = (void *)pfn;
+    return pfn;
+}
+
+
Index: /trunk/kProfiler2/kPrf2WinApiWrapperHlp.h
===================================================================
--- /trunk/kProfiler2/kPrf2WinApiWrapperHlp.h	(revision 13)
+++ /trunk/kProfiler2/kPrf2WinApiWrapperHlp.h	(revision 13)
@@ -0,0 +1,35 @@
+/* $Id$ */
+/** @file
+ * Helpers for the Windows API wrapper DLL.
+ */
+
+/*
+ * Copyright (c) 2008 knut st. osmundsen <bird-src-spam@anduin.net>
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with This program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
+ *
+ */
+
+typedef struct KPRF2WRAPDLL
+{
+    HMODULE hmod;
+    char szName[32];
+} KPRF2WRAPDLL;
+typedef KPRF2WRAPDLL *PKPRF2WRAPDLL;
+typedef KPRF2WRAPDLL const *PCKPRF2WRAPDLL;
+
+FARPROC kPrf2WrapResolve(void **ppfn, const char *pszName, PKPRF2WRAPDLL pDll);
+
+
Index: /trunk/kProfiler2/kPrf2WinApiWrappers-kernel32.h
===================================================================
--- /trunk/kProfiler2/kPrf2WinApiWrappers-kernel32.h	(revision 12)
+++ /trunk/kProfiler2/kPrf2WinApiWrappers-kernel32.h	(revision 13)
@@ -9188,4 +9188,49 @@
 }
 
+typedef VOID NTAPI FN_RtlUnwindEx( FRAME_POINTERS TargetFrame, PVOID TargetIp, PEXCEPTION_RECORD ExceptionRecord, PVOID ReturnValue, PCONTEXT ContextRecord, PUNWIND_HISTORY_TABLE HistoryTable );
+__declspec(dllexport) VOID NTAPI kPrf2Wrap_RtlUnwindEx( FRAME_POINTERS TargetFrame, PVOID TargetIp, PEXCEPTION_RECORD ExceptionRecord, PVOID ReturnValue, PCONTEXT ContextRecord, PUNWIND_HISTORY_TABLE HistoryTable )
+{
+    static FN_RtlUnwindEx *pfn = 0;
+    if (!pfn)
+        kPrf2WrapResolve((void **)&pfn, "RtlUnwindEx", &g_Kernel32);
+    pfn( TargetFrame, TargetIp, ExceptionRecord, ReturnValue, ContextRecord, HistoryTable );
+}
+
+typedef ULONGLONG WINAPI FN_RtlVirtualUnwind( ULONG HandlerType, ULONGLONG ImageBase, ULONGLONG ControlPC, PRUNTIME_FUNCTION FunctionEntry, PCONTEXT ContextRecord, PBOOLEAN InFunction, PFRAME_POINTERS EstablisherFrame, PKNONVOLATILE_CONTEXT_POINTERS ContextPointers );
+__declspec(dllexport) ULONGLONG WINAPI kPrf2Wrap_RtlVirtualUnwind( ULONG HandlerType, ULONGLONG ImageBase, ULONGLONG ControlPC, PRUNTIME_FUNCTION FunctionEntry, PCONTEXT ContextRecord, PBOOLEAN InFunction, PFRAME_POINTERS EstablisherFrame, PKNONVOLATILE_CONTEXT_POINTERS ContextPointers )
+{
+    static FN_RtlVirtualUnwind *pfn = 0;
+    if (!pfn)
+        kPrf2WrapResolve((void **)&pfn, "RtlVirtualUnwind", &g_Kernel32);
+    return pfn( HandlerType, ImageBase, ControlPC, FunctionEntry, ContextRecord, InFunction, EstablisherFrame, ContextPointers );
+}
+
+typedef PVOID WINAPI FN_RtlPcToFileHeader( PVOID PcValue, PVOID * BaseOfImage );
+__declspec(dllexport) PVOID WINAPI kPrf2Wrap_RtlPcToFileHeader( PVOID PcValue, PVOID * BaseOfImage )
+{
+    static FN_RtlPcToFileHeader *pfn = 0;
+    if (!pfn)
+        kPrf2WrapResolve((void **)&pfn, "RtlPcToFileHeader", &g_Kernel32);
+    return pfn( PcValue, BaseOfImage );
+}
+
+typedef PVOID WINAPI FN_RtlLookupFunctionEntry( ULONGLONG ControlPC, PULONGLONG ImageBase, PULONGLONG TargetGp );
+__declspec(dllexport) PVOID WINAPI kPrf2Wrap_RtlLookupFunctionEntry( ULONGLONG ControlPC, PULONGLONG ImageBase, PULONGLONG TargetGp )
+{
+    static FN_RtlLookupFunctionEntry *pfn = 0;
+    if (!pfn)
+        kPrf2WrapResolve((void **)&pfn, "RtlLookupFunctionEntry", &g_Kernel32);
+    return pfn( ControlPC, ImageBase, TargetGp );
+}
+
+typedef void WINAPI FN_RtlRaiseException(PEXCEPTION_RECORD pXcpRec);
+__declspec(dllexport) void WINAPI kPrf2Wrap_RtlRaiseException(PEXCEPTION_RECORD pXcpRec)
+{
+    static FN_RtlRaiseException *pfn = 0;
+    if (!pfn)
+        kPrf2WrapResolve((void **)&pfn, "RtlRaiseException", &g_Kernel32);
+    pfn( pXcpRec);
+}
+
 typedef int WINAPI FN_uaw_lstrcmpW( LPCUWSTR lpString1, LPCUWSTR lpString2 );
 __declspec(dllexport) int WINAPI kPrf2Wrap_uaw_lstrcmpW( LPCUWSTR lpString1, LPCUWSTR lpString2 )
Index: /trunk/kProfiler2/kPrf2WinApiWrappers.c
===================================================================
--- /trunk/kProfiler2/kPrf2WinApiWrappers.c	(revision 12)
+++ /trunk/kProfiler2/kPrf2WinApiWrappers.c	(revision 13)
@@ -33,4 +33,5 @@
 #include <TLHelp32.h>
 #include <k/kDefs.h>
+#include "kPrf2WinApiWrapperHlp.h"
 
 #if K_ARCH == K_ARCH_X86_32
@@ -39,15 +40,26 @@
 #endif
 
+/* RtlUnwindEx is used by msvcrt on amd64, but winnt.h only defines it for IA64... */
+typedef struct _FRAME_POINTERS {
+    ULONGLONG MemoryStackFp;
+    ULONGLONG BackingStoreFp;
+} FRAME_POINTERS, *PFRAME_POINTERS;
+typedef PVOID PUNWIND_HISTORY_TABLE;
+typedef PVOID PKNONVOLATILE_CONTEXT_POINTERS;
+
+
 /*******************************************************************************
-*   Structures and Typedefs                                                    *
+*   Global Variables                                                           *
 *******************************************************************************/
-typedef struct KPRF2WRAPDLL
+KPRF2WRAPDLL g_Kernel32 =
 {
-    HMODULE hmod;
-    char szName[32];
-} KPRF2WRAPDLL;
-typedef KPRF2WRAPDLL *PKPRF2WRAPDLL;
-typedef KPRF2WRAPDLL const *PCKPRF2WRAPDLL;
+    INVALID_HANDLE_VALUE, "KERNEL32"
+};
 
+
+/*
+ * Include the generated code.
+ */
+#include "kPrf2WinApiWrappers-kernel32.h"
 
 /* TODO (amd64):
@@ -71,36 +83,35 @@
 __misaligned_access
 _local_unwind
+
 */
 
-/*******************************************************************************
-*   Global Variables                                                           *
-*******************************************************************************/
-KPRF2WRAPDLL g_Kernel32 =
+
+/**
+ * The DLL Main for the Windows API wrapper DLL.
+ *
+ * @returns Success indicator.
+ * @param   hInstDll        The instance handle of the DLL. (i.e. the module handle)
+ * @param   fdwReason       The reason why we're here. This is a 'flag' for reasons of
+ *                          tradition, it's really a kind of enum.
+ * @param   pReserved       Reserved / undocumented something.
+ */
+BOOL WINAPI DllMain(HINSTANCE hInstDLL, DWORD fdwReason, PVOID pReserved)
 {
-    INVALID_HANDLE_VALUE, "KERNEL32"
-};
+    switch (fdwReason)
+    {
+        case DLL_PROCESS_ATTACH:
+            break;
 
+        case DLL_PROCESS_DETACH:
+            break;
 
-/*******************************************************************************
-*   Internal Functions                                                         *
-*******************************************************************************/
-FARPROC kPrf2WrapResolve(void **ppfn, const char *pszName, PKPRF2WRAPDLL pDll);
+        case DLL_THREAD_ATTACH:
+            break;
 
-
-FARPROC kPrf2WrapResolve(void **ppfn, const char *pszName, PKPRF2WRAPDLL pDll)
-{
-    FARPROC pfn;
-    HMODULE hmod = pDll->hmod;
-    if (hmod == INVALID_HANDLE_VALUE)
-    {
-        hmod = LoadLibraryA(pDll->szName);
-        pDll->hmod = hmod;
+        case DLL_THREAD_DETACH:
+            break;
     }
 
-    pfn = GetProcAddress(hmod, pszName);
-    *ppfn = (void *)pfn;
-    return pfn;
+    return TRUE;
 }
 
-
-#include "kPrf2WinApiWrappers-kernel32.h"
Index: /trunk/kProfiler2/kPrf2WinApiWrappersImp-amd64.def
===================================================================
--- /trunk/kProfiler2/kPrf2WinApiWrappersImp-amd64.def	(revision 12)
+++ /trunk/kProfiler2/kPrf2WinApiWrappersImp-amd64.def	(revision 13)
@@ -6,6 +6,4 @@
   AddConsoleAliasA=kPrf2Wrap_AddConsoleAliasA
   AddConsoleAliasW=kPrf2Wrap_AddConsoleAliasW
-  AddLocalAlternateComputerNameA=kPrf2Wrap_AddLocalAlternateComputerNameA
-  AddLocalAlternateComputerNameW=kPrf2Wrap_AddLocalAlternateComputerNameW
   AddRefActCtx=kPrf2Wrap_AddRefActCtx
   AddVectoredContinueHandler=kPrf2Wrap_AddVectoredContinueHandler
@@ -156,6 +154,4 @@
   EnumUILanguagesA=kPrf2Wrap_EnumUILanguagesA
   EnumUILanguagesW=kPrf2Wrap_EnumUILanguagesW
-  EnumerateLocalComputerNamesA=kPrf2Wrap_EnumerateLocalComputerNamesA
-  EnumerateLocalComputerNamesW=kPrf2Wrap_EnumerateLocalComputerNamesW
   EraseTape=kPrf2Wrap_EraseTape
   EscapeCommFunction=kPrf2Wrap_EscapeCommFunction
@@ -616,6 +612,4 @@
   RemoveDirectoryA=kPrf2Wrap_RemoveDirectoryA
   RemoveDirectoryW=kPrf2Wrap_RemoveDirectoryW
-  RemoveLocalAlternateComputerNameA=kPrf2Wrap_RemoveLocalAlternateComputerNameA
-  RemoveLocalAlternateComputerNameW=kPrf2Wrap_RemoveLocalAlternateComputerNameW
   RemoveVectoredContinueHandler=kPrf2Wrap_RemoveVectoredContinueHandler
   RemoveVectoredExceptionHandler=kPrf2Wrap_RemoveVectoredExceptionHandler
@@ -703,6 +697,4 @@
   SetInformationJobObject=kPrf2Wrap_SetInformationJobObject
   SetLastError=kPrf2Wrap_SetLastError
-  SetLocalPrimaryComputerNameA=kPrf2Wrap_SetLocalPrimaryComputerNameA
-  SetLocalPrimaryComputerNameW=kPrf2Wrap_SetLocalPrimaryComputerNameW
   SetLocalTime=kPrf2Wrap_SetLocalTime
   SetLocaleInfoA=kPrf2Wrap_SetLocaleInfoA
@@ -827,6 +819,4 @@
   WriteTapemark=kPrf2Wrap_WriteTapemark
   ZombifyActCtx=kPrf2Wrap_ZombifyActCtx
-  __C_specific_handler=kPrf2Wrap___C_specific_handler
-  __misaligned_access=kPrf2Wrap___misaligned_access
   _hread=kPrf2Wrap__hread
   _hwrite=kPrf2Wrap__hwrite
@@ -834,5 +824,4 @@
   _lcreat=kPrf2Wrap__lcreat
   _llseek=kPrf2Wrap__llseek
-  _local_unwind=kPrf2Wrap__local_unwind
   _lopen=kPrf2Wrap__lopen
   _lread=kPrf2Wrap__lread
Index: /trunk/kProfiler2/kPrf2WinApiWrappersImp-x86.def
===================================================================
--- /trunk/kProfiler2/kPrf2WinApiWrappersImp-x86.def	(revision 12)
+++ /trunk/kProfiler2/kPrf2WinApiWrappersImp-x86.def	(revision 13)
@@ -11,8 +11,4 @@
 _AddConsoleAliasW@12
 _AddConsoleAliasW@12
-_AddLocalAlternateComputerNameA@8
-_AddLocalAlternateComputerNameA@8
-_AddLocalAlternateComputerNameW@8
-_AddLocalAlternateComputerNameW@8
 _AddRefActCtx@4
 _AddRefActCtx@4
@@ -311,8 +307,4 @@
 _EnumUILanguagesW@12
 _EnumUILanguagesW@12
-_EnumerateLocalComputerNamesA@16
-_EnumerateLocalComputerNamesA@16
-_EnumerateLocalComputerNamesW@16
-_EnumerateLocalComputerNamesW@16
 _EraseTape@12
 _EraseTape@12
@@ -1243,8 +1235,4 @@
 _RemoveDirectoryW@4
 _RemoveDirectoryW@4
-_RemoveLocalAlternateComputerNameA@8
-_RemoveLocalAlternateComputerNameA@8
-_RemoveLocalAlternateComputerNameW@8
-_RemoveLocalAlternateComputerNameW@8
 _RemoveVectoredContinueHandler@4
 _RemoveVectoredContinueHandler@4
@@ -1397,8 +1385,4 @@
 _SetLastError@4
 _SetLastError@4
-_SetLocalPrimaryComputerNameA@8
-_SetLocalPrimaryComputerNameA@8
-_SetLocalPrimaryComputerNameW@8
-_SetLocalPrimaryComputerNameW@8
 _SetLocalTime@4
 _SetLocalTime@4
