Move common code from dbghelp.h and imagehlp.h to mingw_inc and add wide function support.

git-svn-id: svn+ssh://svn.code.sf.net/p/mingw-w64/code/trunk@3544 4407c894-4637-0410-b4f5-ada5f102cad1
diff --git a/mingw-w64-headers/include/dbghelp.h b/mingw-w64-headers/include/dbghelp.h
index 5bc22ef..2a54013 100644
--- a/mingw-w64-headers/include/dbghelp.h
+++ b/mingw-w64-headers/include/dbghelp.h
@@ -17,1426 +17,8 @@
 #ifdef __cplusplus
 extern "C" {
 #endif
-
-#define IMAGEAPI DECLSPEC_IMPORT WINAPI
-#define DBHLP_DEPRECIATED __declspec(deprecated)
-
-#define DBHLPAPI IMAGEAPI
-
-#define IMAGE_SEPARATION (64*1024)
-
-  typedef struct _LOADED_IMAGE {
-    PSTR ModuleName;
-    HANDLE hFile;
-    PUCHAR MappedAddress;
-#ifdef _IMAGEHLP64
-    PIMAGE_NT_HEADERS64 FileHeader;
-#else
-    PIMAGE_NT_HEADERS32 FileHeader;
-#endif
-    PIMAGE_SECTION_HEADER LastRvaSection;
-    ULONG NumberOfSections;
-    PIMAGE_SECTION_HEADER Sections;
-    ULONG Characteristics;
-    BOOLEAN fSystemImage;
-    BOOLEAN fDOSImage;
-    BOOLEAN fReadOnly;
-    UCHAR Version;
-    LIST_ENTRY Links;
-    ULONG SizeOfImage;
-  } LOADED_IMAGE,*PLOADED_IMAGE;
-
-#define MAX_SYM_NAME 2000
-
-  typedef WINBOOL (CALLBACK *PFIND_DEBUG_FILE_CALLBACK)(HANDLE FileHandle,PCSTR FileName,PVOID CallerData);
-  typedef WINBOOL (CALLBACK *PFINDFILEINPATHCALLBACK)(PCSTR filename,PVOID context);
-  typedef WINBOOL (CALLBACK *PFIND_EXE_FILE_CALLBACK)(HANDLE FileHandle,PCSTR FileName,PVOID CallerData);
-
-  typedef WINBOOL (WINAPI *PSYMBOLSERVERPROC)(LPCSTR,LPCSTR,PVOID,DWORD,DWORD,LPSTR);
-  typedef WINBOOL (WINAPI *PSYMBOLSERVEROPENPROC)(VOID);
-  typedef WINBOOL (WINAPI *PSYMBOLSERVERCLOSEPROC)(VOID);
-  typedef WINBOOL (WINAPI *PSYMBOLSERVERSETOPTIONSPROC)(UINT_PTR,ULONG64);
-  typedef WINBOOL (CALLBACK WINAPI *PSYMBOLSERVERCALLBACKPROC)(UINT_PTR action,ULONG64 data,ULONG64 context);
-  typedef UINT_PTR (WINAPI *PSYMBOLSERVERGETOPTIONSPROC)();
-  typedef WINBOOL (WINAPI *PSYMBOLSERVERPINGPROC)(LPCSTR);
-
-  HANDLE IMAGEAPI FindDebugInfoFile(PCSTR FileName,PCSTR SymbolPath,PSTR DebugFilePath);
-  HANDLE IMAGEAPI FindDebugInfoFileEx(PCSTR FileName,PCSTR SymbolPath,PSTR DebugFilePath,PFIND_DEBUG_FILE_CALLBACK Callback,PVOID CallerData);
-  WINBOOL IMAGEAPI SymFindFileInPath(HANDLE hprocess,PCSTR SearchPath,PCSTR FileName,PVOID id,DWORD two,DWORD three,DWORD flags,LPSTR FoundFile,PFINDFILEINPATHCALLBACK callback,PVOID context);
-  HANDLE IMAGEAPI FindExecutableImage(PCSTR FileName,PCSTR SymbolPath,PSTR ImageFilePath);
-  HANDLE IMAGEAPI FindExecutableImageEx(PCSTR FileName,PCSTR SymbolPath,PSTR ImageFilePath,PFIND_EXE_FILE_CALLBACK Callback,PVOID CallerData);
-  PIMAGE_NT_HEADERS IMAGEAPI ImageNtHeader(PVOID Base);
-  PVOID IMAGEAPI ImageDirectoryEntryToDataEx(PVOID Base,BOOLEAN MappedAsImage,USHORT DirectoryEntry,PULONG Size,PIMAGE_SECTION_HEADER *FoundHeader);
-  PVOID IMAGEAPI ImageDirectoryEntryToData(PVOID Base,BOOLEAN MappedAsImage,USHORT DirectoryEntry,PULONG Size);
-  PIMAGE_SECTION_HEADER IMAGEAPI ImageRvaToSection(PIMAGE_NT_HEADERS NtHeaders,PVOID Base,ULONG Rva);
-  PVOID IMAGEAPI ImageRvaToVa(PIMAGE_NT_HEADERS NtHeaders,PVOID Base,ULONG Rva,PIMAGE_SECTION_HEADER *LastRvaSection);
-
-#define SSRVOPT_CALLBACK 0x0001
-#define SSRVOPT_DWORD 0x0002
-#define SSRVOPT_DWORDPTR 0x0004
-#define SSRVOPT_GUIDPTR 0x0008
-#define SSRVOPT_OLDGUIDPTR 0x0010
-#define SSRVOPT_UNATTENDED 0x0020
-#define SSRVOPT_NOCOPY 0x0040
-#define SSRVOPT_PARENTWIN 0x0080
-#define SSRVOPT_PARAMTYPE 0x0100
-#define SSRVOPT_SECURE 0x0200
-#define SSRVOPT_TRACE 0x0400
-#define SSRVOPT_SETCONTEXT 0x0800
-#define SSRVOPT_PROXY 0x1000
-#define SSRVOPT_DOWNSTREAM_STORE 0x2000
-#define SSRVOPT_RESET ((ULONG_PTR)-1)
-
-#define SSRVACTION_TRACE 1
-#define SSRVACTION_QUERYCANCEL 2
-#define SSRVACTION_EVENT 3
-
-#ifndef _WIN64
-  typedef struct _IMAGE_DEBUG_INFORMATION {
-    LIST_ENTRY List;
-    DWORD ReservedSize;
-    PVOID ReservedMappedBase;
-    USHORT ReservedMachine;
-    USHORT ReservedCharacteristics;
-    DWORD ReservedCheckSum;
-    DWORD ImageBase;
-    DWORD SizeOfImage;
-    DWORD ReservedNumberOfSections;
-    PIMAGE_SECTION_HEADER ReservedSections;
-    DWORD ReservedExportedNamesSize;
-    PSTR ReservedExportedNames;
-    DWORD ReservedNumberOfFunctionTableEntries;
-    PIMAGE_FUNCTION_ENTRY ReservedFunctionTableEntries;
-    DWORD ReservedLowestFunctionStartingAddress;
-    DWORD ReservedHighestFunctionEndingAddress;
-    DWORD ReservedNumberOfFpoTableEntries;
-    PFPO_DATA ReservedFpoTableEntries;
-    DWORD SizeOfCoffSymbols;
-    PIMAGE_COFF_SYMBOLS_HEADER CoffSymbols;
-    DWORD ReservedSizeOfCodeViewSymbols;
-    PVOID ReservedCodeViewSymbols;
-    PSTR ImageFilePath;
-    PSTR ImageFileName;
-    PSTR ReservedDebugFilePath;
-    DWORD ReservedTimeDateStamp;
-    WINBOOL ReservedRomImage;
-    PIMAGE_DEBUG_DIRECTORY ReservedDebugDirectory;
-    DWORD ReservedNumberOfDebugDirectories;
-    DWORD ReservedOriginalFunctionTableBaseAddress;
-    DWORD Reserved[2];
-  } IMAGE_DEBUG_INFORMATION,*PIMAGE_DEBUG_INFORMATION;
-
-  PIMAGE_DEBUG_INFORMATION IMAGEAPI MapDebugInformation(HANDLE FileHandle,PSTR FileName,PSTR SymbolPath,DWORD ImageBase);
-  WINBOOL IMAGEAPI UnmapDebugInformation(PIMAGE_DEBUG_INFORMATION DebugInfo);
-#endif
-
-  typedef WINBOOL (CALLBACK *PENUMDIRTREE_CALLBACK)(LPCSTR FilePath,PVOID CallerData);
-
-  WINBOOL IMAGEAPI SearchTreeForFile(PSTR RootPath,PSTR InputPathName,PSTR OutputPathBuffer);
-  WINBOOL IMAGEAPI EnumDirTree(HANDLE hProcess,PSTR RootPath,PSTR InputPathName,PSTR OutputPathBuffer,PENUMDIRTREE_CALLBACK Callback,PVOID CallbackData);
-  WINBOOL IMAGEAPI MakeSureDirectoryPathExists(PCSTR DirPath);
-
-#define UNDNAME_COMPLETE (0x0000)
-#define UNDNAME_NO_LEADING_UNDERSCORES (0x0001)
-#define UNDNAME_NO_MS_KEYWORDS (0x0002)
-#define UNDNAME_NO_FUNCTION_RETURNS (0x0004)
-#define UNDNAME_NO_ALLOCATION_MODEL (0x0008)
-#define UNDNAME_NO_ALLOCATION_LANGUAGE (0x0010)
-#define UNDNAME_NO_MS_THISTYPE (0x0020)
-#define UNDNAME_NO_CV_THISTYPE (0x0040)
-#define UNDNAME_NO_THISTYPE (0x0060)
-#define UNDNAME_NO_ACCESS_SPECIFIERS (0x0080)
-#define UNDNAME_NO_THROW_SIGNATURES (0x0100)
-#define UNDNAME_NO_MEMBER_TYPE (0x0200)
-#define UNDNAME_NO_RETURN_UDT_MODEL (0x0400)
-#define UNDNAME_32_BIT_DECODE (0x0800)
-#define UNDNAME_NAME_ONLY (0x1000)
-
-#define UNDNAME_NO_ARGUMENTS (0x2000)
-#define UNDNAME_NO_SPECIAL_SYMS (0x4000)
-
-  DWORD IMAGEAPI WINAPI UnDecorateSymbolName(PCSTR DecoratedName,PSTR UnDecoratedName,DWORD UndecoratedLength,DWORD Flags);
-
-#define DBHHEADER_DEBUGDIRS 0x1
-
-  typedef struct _MODLOAD_DATA {
-    DWORD ssize;
-    DWORD ssig;
-    PVOID data;
-    DWORD size;
-    DWORD flags;
-  } MODLOAD_DATA,*PMODLOAD_DATA;
-
-  typedef enum {
-    AddrMode1616,
-    AddrMode1632,
-    AddrModeReal,
-    AddrModeFlat
-  } ADDRESS_MODE;
-
-  typedef struct _tagADDRESS64 {
-    DWORD64 Offset;
-    WORD Segment;
-    ADDRESS_MODE Mode;
-  } ADDRESS64,*LPADDRESS64;
-
-#ifdef _IMAGEHLP64
-#define ADDRESS ADDRESS64
-#define LPADDRESS LPADDRESS64
-#else
-  typedef struct _tagADDRESS {
-    DWORD Offset;
-    WORD Segment;
-    ADDRESS_MODE Mode;
-  } ADDRESS,*LPADDRESS;
-
-  static __inline void Address32To64(LPADDRESS a32,LPADDRESS64 a64) {
-    a64->Offset = (ULONG64)(LONG64)(LONG)a32->Offset;
-    a64->Segment = a32->Segment;
-    a64->Mode = a32->Mode;
-  }
-
-  static __inline void Address64To32(LPADDRESS64 a64,LPADDRESS a32) {
-    a32->Offset = (ULONG)a64->Offset;
-    a32->Segment = a64->Segment;
-    a32->Mode = a64->Mode;
-  }
-#endif
-
-  typedef struct _KDHELP64 {
-    DWORD64 Thread;
-    DWORD ThCallbackStack;
-    DWORD ThCallbackBStore;
-    DWORD NextCallback;
-    DWORD FramePointer;
-    DWORD64 KiCallUserMode;
-    DWORD64 KeUserCallbackDispatcher;
-    DWORD64 SystemRangeStart;
-    DWORD64 KiUserExceptionDispatcher;
-    DWORD64 StackBase;
-    DWORD64 StackLimit;
-    DWORD64 Reserved[5];
-  } KDHELP64,*PKDHELP64;
-
-#ifdef _IMAGEHLP64
-#define KDHELP KDHELP64
-#define PKDHELP PKDHELP64
-#else
-  typedef struct _KDHELP {
-    DWORD Thread;
-    DWORD ThCallbackStack;
-    DWORD NextCallback;
-    DWORD FramePointer;
-    DWORD KiCallUserMode;
-    DWORD KeUserCallbackDispatcher;
-    DWORD SystemRangeStart;
-    DWORD ThCallbackBStore;
-    DWORD KiUserExceptionDispatcher;
-    DWORD StackBase;
-    DWORD StackLimit;
-    DWORD Reserved[5];
-  } KDHELP,*PKDHELP;
-
-  static __inline void KdHelp32To64(PKDHELP p32,PKDHELP64 p64) {
-    p64->Thread = p32->Thread;
-    p64->ThCallbackStack = p32->ThCallbackStack;
-    p64->NextCallback = p32->NextCallback;
-    p64->FramePointer = p32->FramePointer;
-    p64->KiCallUserMode = p32->KiCallUserMode;
-    p64->KeUserCallbackDispatcher = p32->KeUserCallbackDispatcher;
-    p64->SystemRangeStart = p32->SystemRangeStart;
-    p64->KiUserExceptionDispatcher = p32->KiUserExceptionDispatcher;
-    p64->StackBase = p32->StackBase;
-    p64->StackLimit = p32->StackLimit;
-  }
-#endif
-
-  typedef struct _tagSTACKFRAME64 {
-    ADDRESS64 AddrPC;
-    ADDRESS64 AddrReturn;
-    ADDRESS64 AddrFrame;
-    ADDRESS64 AddrStack;
-    ADDRESS64 AddrBStore;
-    PVOID FuncTableEntry;
-    DWORD64 Params[4];
-    WINBOOL Far;
-    WINBOOL Virtual;
-    DWORD64 Reserved[3];
-    KDHELP64 KdHelp;
-  } STACKFRAME64,*LPSTACKFRAME64;
-
-#ifdef _IMAGEHLP64
-#define STACKFRAME STACKFRAME64
-#define LPSTACKFRAME LPSTACKFRAME64
-#else
-  typedef struct _tagSTACKFRAME {
-    ADDRESS AddrPC;
-    ADDRESS AddrReturn;
-    ADDRESS AddrFrame;
-    ADDRESS AddrStack;
-    PVOID FuncTableEntry;
-    DWORD Params[4];
-    WINBOOL Far;
-    WINBOOL Virtual;
-    DWORD Reserved[3];
-    KDHELP KdHelp;
-    ADDRESS AddrBStore;
-  } STACKFRAME,*LPSTACKFRAME;
-#endif
-
-  typedef WINBOOL (WINAPI *PREAD_PROCESS_MEMORY_ROUTINE64)(HANDLE hProcess,DWORD64 qwBaseAddress,PVOID lpBuffer,DWORD nSize,LPDWORD lpNumberOfBytesRead);
-  typedef PVOID (WINAPI *PFUNCTION_TABLE_ACCESS_ROUTINE64)(HANDLE hProcess,DWORD64 AddrBase);
-  typedef DWORD64 (WINAPI *PGET_MODULE_BASE_ROUTINE64)(HANDLE hProcess,DWORD64 Address);
-  typedef DWORD64 (WINAPI *PTRANSLATE_ADDRESS_ROUTINE64)(HANDLE hProcess,HANDLE hThread,LPADDRESS64 lpaddr);
-
-  WINBOOL IMAGEAPI StackWalk64(DWORD MachineType,HANDLE hProcess,HANDLE hThread,LPSTACKFRAME64 StackFrame,PVOID ContextRecord,PREAD_PROCESS_MEMORY_ROUTINE64 ReadMemoryRoutine,PFUNCTION_TABLE_ACCESS_ROUTINE64 FunctionTableAccessRoutine,PGET_MODULE_BASE_ROUTINE64 GetModuleBaseRoutine,PTRANSLATE_ADDRESS_ROUTINE64 TranslateAddress);
-
-#ifdef _IMAGEHLP64
-#define PREAD_PROCESS_MEMORY_ROUTINE PREAD_PROCESS_MEMORY_ROUTINE64
-#define PFUNCTION_TABLE_ACCESS_ROUTINE PFUNCTION_TABLE_ACCESS_ROUTINE64
-#define PGET_MODULE_BASE_ROUTINE PGET_MODULE_BASE_ROUTINE64
-#define PTRANSLATE_ADDRESS_ROUTINE PTRANSLATE_ADDRESS_ROUTINE64
-#define StackWalk StackWalk64
-#else
-  typedef WINBOOL (WINAPI *PREAD_PROCESS_MEMORY_ROUTINE)(HANDLE hProcess,DWORD lpBaseAddress,PVOID lpBuffer,DWORD nSize,PDWORD lpNumberOfBytesRead);
-  typedef PVOID (WINAPI *PFUNCTION_TABLE_ACCESS_ROUTINE)(HANDLE hProcess,DWORD AddrBase);
-  typedef DWORD (WINAPI *PGET_MODULE_BASE_ROUTINE)(HANDLE hProcess,DWORD Address);
-  typedef DWORD (WINAPI *PTRANSLATE_ADDRESS_ROUTINE)(HANDLE hProcess,HANDLE hThread,LPADDRESS lpaddr);
-
-  WINBOOL IMAGEAPI StackWalk(DWORD MachineType,HANDLE hProcess,HANDLE hThread,LPSTACKFRAME StackFrame,PVOID ContextRecord,PREAD_PROCESS_MEMORY_ROUTINE ReadMemoryRoutine,PFUNCTION_TABLE_ACCESS_ROUTINE FunctionTableAccessRoutine,PGET_MODULE_BASE_ROUTINE GetModuleBaseRoutine,PTRANSLATE_ADDRESS_ROUTINE TranslateAddress);
-#endif
-
-#define API_VERSION_NUMBER 11
-
-  typedef struct API_VERSION {
-    USHORT MajorVersion;
-    USHORT MinorVersion;
-    USHORT Revision;
-    USHORT Reserved;
-  } API_VERSION,*LPAPI_VERSION;
-
-  LPAPI_VERSION IMAGEAPI ImagehlpApiVersion(VOID);
-  LPAPI_VERSION IMAGEAPI ImagehlpApiVersionEx(LPAPI_VERSION AppVersion);
-  DWORD IMAGEAPI GetTimestampForLoadedLibrary(HMODULE Module);
-
-  typedef WINBOOL (CALLBACK *PSYM_ENUMMODULES_CALLBACK64)(PCSTR ModuleName,DWORD64 BaseOfDll,PVOID UserContext);
-  typedef WINBOOL (CALLBACK *PSYM_ENUMSYMBOLS_CALLBACK64)(PCSTR SymbolName,DWORD64 SymbolAddress,ULONG SymbolSize,PVOID UserContext);
-  typedef WINBOOL (CALLBACK *PSYM_ENUMSYMBOLS_CALLBACK64W)(PCWSTR SymbolName,DWORD64 SymbolAddress,ULONG SymbolSize,PVOID UserContext);
-  typedef WINBOOL (CALLBACK *PENUMLOADED_MODULES_CALLBACK64)(PCSTR ModuleName,DWORD64 ModuleBase,ULONG ModuleSize,PVOID UserContext);
-  typedef WINBOOL (CALLBACK *PSYMBOL_REGISTERED_CALLBACK64)(HANDLE hProcess,ULONG ActionCode,ULONG64 CallbackData,ULONG64 UserContext);
-  typedef PVOID (CALLBACK *PSYMBOL_FUNCENTRY_CALLBACK)(HANDLE hProcess,DWORD AddrBase,PVOID UserContext);
-  typedef PVOID (CALLBACK *PSYMBOL_FUNCENTRY_CALLBACK64)(HANDLE hProcess,ULONG64 AddrBase,ULONG64 UserContext);
-
-#ifdef _IMAGEHLP64
-#define PSYM_ENUMMODULES_CALLBACK PSYM_ENUMMODULES_CALLBACK64
-#define PSYM_ENUMSYMBOLS_CALLBACK PSYM_ENUMSYMBOLS_CALLBACK64
-#define PSYM_ENUMSYMBOLS_CALLBACKW PSYM_ENUMSYMBOLS_CALLBACK64W
-#define PENUMLOADED_MODULES_CALLBACK PENUMLOADED_MODULES_CALLBACK64
-#define PSYMBOL_REGISTERED_CALLBACK PSYMBOL_REGISTERED_CALLBACK64
-#define PSYMBOL_FUNCENTRY_CALLBACK PSYMBOL_FUNCENTRY_CALLBACK64
-#else
-  typedef WINBOOL (CALLBACK *PSYM_ENUMMODULES_CALLBACK)(PCSTR ModuleName,ULONG BaseOfDll,PVOID UserContext);
-  typedef WINBOOL (CALLBACK *PSYM_ENUMSYMBOLS_CALLBACK)(PCSTR SymbolName,ULONG SymbolAddress,ULONG SymbolSize,PVOID UserContext);
-  typedef WINBOOL (CALLBACK *PSYM_ENUMSYMBOLS_CALLBACKW)(PCWSTR SymbolName,ULONG SymbolAddress,ULONG SymbolSize,PVOID UserContext);
-  typedef WINBOOL (CALLBACK *PENUMLOADED_MODULES_CALLBACK)(PCSTR ModuleName,ULONG ModuleBase,ULONG ModuleSize,PVOID UserContext);
-  typedef WINBOOL (CALLBACK *PSYMBOL_REGISTERED_CALLBACK)(HANDLE hProcess,ULONG ActionCode,PVOID CallbackData,PVOID UserContext);
-#endif
-
-#define SYMFLAG_VALUEPRESENT 0x00000001
-#define SYMFLAG_REGISTER 0x00000008
-#define SYMFLAG_REGREL 0x00000010
-#define SYMFLAG_FRAMEREL 0x00000020
-#define SYMFLAG_PARAMETER 0x00000040
-#define SYMFLAG_LOCAL 0x00000080
-#define SYMFLAG_CONSTANT 0x00000100
-#define SYMFLAG_EXPORT 0x00000200
-#define SYMFLAG_FORWARDER 0x00000400
-#define SYMFLAG_FUNCTION 0x00000800
-#define SYMFLAG_VIRTUAL 0x00001000
-#define SYMFLAG_THUNK 0x00002000
-#define SYMFLAG_TLSREL 0x00004000
-
-  typedef enum {
-    SymNone = 0,
-    SymCoff,
-    SymCv,
-    SymPdb,
-    SymExport,
-    SymDeferred,
-    SymSym,
-    SymDia,
-    SymVirtual,
-    NumSymTypes
-  } SYM_TYPE;
-
-  typedef struct _IMAGEHLP_SYMBOL64 {
-    DWORD SizeOfStruct;
-    DWORD64 Address;
-    DWORD Size;
-    DWORD Flags;
-    DWORD MaxNameLength;
-    CHAR Name[1];
-  } IMAGEHLP_SYMBOL64,*PIMAGEHLP_SYMBOL64;
-
-  typedef struct _IMAGEHLP_SYMBOL64_PACKAGE {
-    IMAGEHLP_SYMBOL64 sym;
-    CHAR name[MAX_SYM_NAME + 1];
-  } IMAGEHLP_SYMBOL64_PACKAGE,*PIMAGEHLP_SYMBOL64_PACKAGE;
-
-#ifdef _IMAGEHLP64
-
-#define IMAGEHLP_SYMBOL IMAGEHLP_SYMBOL64
-#define PIMAGEHLP_SYMBOL PIMAGEHLP_SYMBOL64
-#define IMAGEHLP_SYMBOL_PACKAGE IMAGEHLP_SYMBOL64_PACKAGE
-#define PIMAGEHLP_SYMBOL_PACKAGE PIMAGEHLP_SYMBOL64_PACKAGE
-#else
-
-  typedef struct _IMAGEHLP_SYMBOL {
-    DWORD SizeOfStruct;
-    DWORD Address;
-    DWORD Size;
-    DWORD Flags;
-    DWORD MaxNameLength;
-    CHAR Name[1];
-  } IMAGEHLP_SYMBOL,*PIMAGEHLP_SYMBOL;
-
-  typedef struct _IMAGEHLP_SYMBOL_PACKAGE {
-    IMAGEHLP_SYMBOL sym;
-    CHAR name[MAX_SYM_NAME + 1];
-  } IMAGEHLP_SYMBOL_PACKAGE,*PIMAGEHLP_SYMBOL_PACKAGE;
-#endif
-
-  typedef struct _IMAGEHLP_MODULE64 {
-    DWORD SizeOfStruct;
-    DWORD64 BaseOfImage;
-    DWORD ImageSize;
-    DWORD TimeDateStamp;
-    DWORD CheckSum;
-    DWORD NumSyms;
-    SYM_TYPE SymType;
-    CHAR ModuleName[32];
-    CHAR ImageName[256];
-    CHAR LoadedImageName[256];
-    CHAR LoadedPdbName[256];
-    DWORD CVSig;
-    CHAR CVData[MAX_PATH*3];
-    DWORD PdbSig;
-    GUID PdbSig70;
-    DWORD PdbAge;
-    WINBOOL PdbUnmatched;
-    WINBOOL DbgUnmatched;
-    WINBOOL LineNumbers;
-    WINBOOL GlobalSymbols;
-    WINBOOL TypeInfo;
-    WINBOOL SourceIndexed;
-    WINBOOL Publics;
-  } IMAGEHLP_MODULE64,*PIMAGEHLP_MODULE64;
-
-  typedef struct _IMAGEHLP_MODULE64W {
-    DWORD SizeOfStruct;
-    DWORD64 BaseOfImage;
-    DWORD ImageSize;
-    DWORD TimeDateStamp;
-    DWORD CheckSum;
-    DWORD NumSyms;
-    SYM_TYPE SymType;
-    WCHAR ModuleName[32];
-    WCHAR ImageName[256];
-    WCHAR LoadedImageName[256];
-    WCHAR LoadedPdbName[256];
-    DWORD CVSig;
-    WCHAR CVData[MAX_PATH*3];
-    DWORD PdbSig;
-    GUID PdbSig70;
-    DWORD PdbAge;
-    WINBOOL PdbUnmatched;
-    WINBOOL DbgUnmatched;
-    WINBOOL LineNumbers;
-    WINBOOL GlobalSymbols;
-    WINBOOL TypeInfo;
-    WINBOOL SourceIndexed;
-    WINBOOL Publics;
-  } IMAGEHLP_MODULEW64,*PIMAGEHLP_MODULEW64;
-
-#ifdef _IMAGEHLP64
-#define IMAGEHLP_MODULE IMAGEHLP_MODULE64
-#define PIMAGEHLP_MODULE PIMAGEHLP_MODULE64
-#define IMAGEHLP_MODULEW IMAGEHLP_MODULEW64
-#define PIMAGEHLP_MODULEW PIMAGEHLP_MODULEW64
-#else
-  typedef struct _IMAGEHLP_MODULE {
-    DWORD SizeOfStruct;
-    DWORD BaseOfImage;
-    DWORD ImageSize;
-    DWORD TimeDateStamp;
-    DWORD CheckSum;
-    DWORD NumSyms;
-    SYM_TYPE SymType;
-    CHAR ModuleName[32];
-    CHAR ImageName[256];
-    CHAR LoadedImageName[256];
-  } IMAGEHLP_MODULE,*PIMAGEHLP_MODULE;
-
-  typedef struct _IMAGEHLP_MODULEW {
-    DWORD SizeOfStruct;
-    DWORD BaseOfImage;
-    DWORD ImageSize;
-    DWORD TimeDateStamp;
-    DWORD CheckSum;
-    DWORD NumSyms;
-    SYM_TYPE SymType;
-    WCHAR ModuleName[32];
-    WCHAR ImageName[256];
-    WCHAR LoadedImageName[256];
-  } IMAGEHLP_MODULEW,*PIMAGEHLP_MODULEW;
-#endif
-
-  typedef struct _IMAGEHLP_LINE64 {
-    DWORD SizeOfStruct;
-    PVOID Key;
-    DWORD LineNumber;
-    PCHAR FileName;
-    DWORD64 Address;
-  } IMAGEHLP_LINE64,*PIMAGEHLP_LINE64;
-
-#ifdef _IMAGEHLP64
-#define IMAGEHLP_LINE IMAGEHLP_LINE64
-#define PIMAGEHLP_LINE PIMAGEHLP_LINE64
-#else
-  typedef struct _IMAGEHLP_LINE {
-    DWORD SizeOfStruct;
-    PVOID Key;
-    DWORD LineNumber;
-    PCHAR FileName;
-    DWORD Address;
-  } IMAGEHLP_LINE,*PIMAGEHLP_LINE;
-#endif
-
-  typedef struct _SOURCEFILE {
-    DWORD64 ModBase;
-    PCHAR FileName;
-  } SOURCEFILE,*PSOURCEFILE;
-
-#define CBA_DEFERRED_SYMBOL_LOAD_START 0x00000001
-#define CBA_DEFERRED_SYMBOL_LOAD_COMPLETE 0x00000002
-#define CBA_DEFERRED_SYMBOL_LOAD_FAILURE 0x00000003
-#define CBA_SYMBOLS_UNLOADED 0x00000004
-#define CBA_DUPLICATE_SYMBOL 0x00000005
-#define CBA_READ_MEMORY 0x00000006
-#define CBA_DEFERRED_SYMBOL_LOAD_CANCEL 0x00000007
-#define CBA_SET_OPTIONS 0x00000008
-#define CBA_EVENT 0x00000010
-#define CBA_DEFERRED_SYMBOL_LOAD_PARTIAL 0x00000020
-#define CBA_DEBUG_INFO 0x10000000
-
-  typedef struct _IMAGEHLP_CBA_READ_MEMORY {
-    DWORD64 addr;
-    PVOID buf;
-    DWORD bytes;
-    DWORD *bytesread;
-  } IMAGEHLP_CBA_READ_MEMORY,*PIMAGEHLP_CBA_READ_MEMORY;
-
-  enum {
-    sevInfo = 0,
-    sevProblem,
-    sevAttn,
-    sevFatal,
-    sevMax
-  };
-
-  typedef struct _IMAGEHLP_CBA_EVENT {
-    DWORD severity;
-    DWORD code;
-    PCHAR desc;
-    PVOID object;
-  } IMAGEHLP_CBA_EVENT,*PIMAGEHLP_CBA_EVENT;
-
-  typedef struct _IMAGEHLP_DEFERRED_SYMBOL_LOAD64 {
-    DWORD SizeOfStruct;
-    DWORD64 BaseOfImage;
-    DWORD CheckSum;
-    DWORD TimeDateStamp;
-    CHAR FileName[MAX_PATH];
-    BOOLEAN Reparse;
-    HANDLE hFile;
-    DWORD Flags;
-  } IMAGEHLP_DEFERRED_SYMBOL_LOAD64,*PIMAGEHLP_DEFERRED_SYMBOL_LOAD64;
-
-#define DSLFLAG_MISMATCHED_PDB 0x1
-#define DSLFLAG_MISMATCHED_DBG 0x2
-
-#ifdef _IMAGEHLP64
-#define IMAGEHLP_DEFERRED_SYMBOL_LOAD IMAGEHLP_DEFERRED_SYMBOL_LOAD64
-#define PIMAGEHLP_DEFERRED_SYMBOL_LOAD PIMAGEHLP_DEFERRED_SYMBOL_LOAD64
-#else
-  typedef struct _IMAGEHLP_DEFERRED_SYMBOL_LOAD {
-    DWORD SizeOfStruct;
-    DWORD BaseOfImage;
-    DWORD CheckSum;
-    DWORD TimeDateStamp;
-    CHAR FileName[MAX_PATH];
-    BOOLEAN Reparse;
-    HANDLE hFile;
-  } IMAGEHLP_DEFERRED_SYMBOL_LOAD,*PIMAGEHLP_DEFERRED_SYMBOL_LOAD;
-#endif
-
-  typedef struct _IMAGEHLP_DUPLICATE_SYMBOL64 {
-    DWORD SizeOfStruct;
-    DWORD NumberOfDups;
-    PIMAGEHLP_SYMBOL64 Symbol;
-    DWORD SelectedSymbol;
-  } IMAGEHLP_DUPLICATE_SYMBOL64,*PIMAGEHLP_DUPLICATE_SYMBOL64;
-
-#ifdef _IMAGEHLP64
-#define IMAGEHLP_DUPLICATE_SYMBOL IMAGEHLP_DUPLICATE_SYMBOL64
-#define PIMAGEHLP_DUPLICATE_SYMBOL PIMAGEHLP_DUPLICATE_SYMBOL64
-#else
-  typedef struct _IMAGEHLP_DUPLICATE_SYMBOL {
-    DWORD SizeOfStruct;
-    DWORD NumberOfDups;
-    PIMAGEHLP_SYMBOL Symbol;
-    DWORD SelectedSymbol;
-  } IMAGEHLP_DUPLICATE_SYMBOL,*PIMAGEHLP_DUPLICATE_SYMBOL;
-#endif
-
-  WINBOOL IMAGEAPI SymSetParentWindow(HWND hwnd);
-  PCHAR IMAGEAPI SymSetHomeDirectory(HANDLE hProcess,PCSTR dir);
-  PCHAR IMAGEAPI SymGetHomeDirectory(DWORD type,PSTR dir,size_t size);
-
-  typedef enum {
-    hdBase = 0,
-    hdSym,
-    hdSrc,
-    hdMax
-  };
-
-#define SYMOPT_CASE_INSENSITIVE 0x00000001
-#define SYMOPT_UNDNAME 0x00000002
-#define SYMOPT_DEFERRED_LOADS 0x00000004
-#define SYMOPT_NO_CPP 0x00000008
-#define SYMOPT_LOAD_LINES 0x00000010
-#define SYMOPT_OMAP_FIND_NEAREST 0x00000020
-#define SYMOPT_LOAD_ANYTHING 0x00000040
-#define SYMOPT_IGNORE_CVREC 0x00000080
-#define SYMOPT_NO_UNQUALIFIED_LOADS 0x00000100
-#define SYMOPT_FAIL_CRITICAL_ERRORS 0x00000200
-#define SYMOPT_EXACT_SYMBOLS 0x00000400
-#define SYMOPT_ALLOW_ABSOLUTE_SYMBOLS 0x00000800
-#define SYMOPT_IGNORE_NT_SYMPATH 0x00001000
-#define SYMOPT_INCLUDE_32BIT_MODULES 0x00002000
-#define SYMOPT_PUBLICS_ONLY 0x00004000
-#define SYMOPT_NO_PUBLICS 0x00008000
-#define SYMOPT_AUTO_PUBLICS 0x00010000
-#define SYMOPT_NO_IMAGE_SEARCH 0x00020000
-#define SYMOPT_SECURE 0x00040000
-#define SYMOPT_NO_PROMPTS 0x00080000
-
-#define SYMOPT_DEBUG 0x80000000
-
-  DWORD IMAGEAPI SymSetOptions(DWORD SymOptions);
-  DWORD IMAGEAPI SymGetOptions(VOID);
-  WINBOOL IMAGEAPI SymCleanup(HANDLE hProcess);
-  WINBOOL IMAGEAPI SymMatchString(PCSTR string,PCSTR expression,WINBOOL fCase);
-
-  typedef WINBOOL (CALLBACK *PSYM_ENUMSOURCEFILES_CALLBACK)(PSOURCEFILE pSourceFile,PVOID UserContext);
-#define PSYM_ENUMSOURCFILES_CALLBACK PSYM_ENUMSOURCEFILES_CALLBACK
-
-  WINBOOL IMAGEAPI SymEnumSourceFiles(HANDLE hProcess,ULONG64 ModBase,PCSTR Mask,PSYM_ENUMSOURCEFILES_CALLBACK cbSrcFiles,PVOID UserContext);
-  WINBOOL IMAGEAPI SymEnumerateModules64(HANDLE hProcess,PSYM_ENUMMODULES_CALLBACK64 EnumModulesCallback,PVOID UserContext);
-
-#ifdef _IMAGEHLP64
-#define SymEnumerateModules SymEnumerateModules64
-#else
-  WINBOOL IMAGEAPI SymEnumerateModules(HANDLE hProcess,PSYM_ENUMMODULES_CALLBACK EnumModulesCallback,PVOID UserContext);
-#endif
-
-  WINBOOL IMAGEAPI SymEnumerateSymbols64(HANDLE hProcess,DWORD64 BaseOfDll,PSYM_ENUMSYMBOLS_CALLBACK64 EnumSymbolsCallback,PVOID UserContext);
-  WINBOOL IMAGEAPI SymEnumerateSymbolsW64(HANDLE hProcess,DWORD64 BaseOfDll,PSYM_ENUMSYMBOLS_CALLBACK64W EnumSymbolsCallback,PVOID UserContext);
-
-#ifdef _IMAGEHLP64
-#define SymEnumerateSymbols SymEnumerateSymbols64
-#define SymEnumerateSymbolsW SymEnumerateSymbolsW64
-#else
-  WINBOOL IMAGEAPI SymEnumerateSymbols(HANDLE hProcess,DWORD BaseOfDll,PSYM_ENUMSYMBOLS_CALLBACK EnumSymbolsCallback,PVOID UserContext);
-  WINBOOL IMAGEAPI SymEnumerateSymbolsW(HANDLE hProcess,DWORD BaseOfDll,PSYM_ENUMSYMBOLS_CALLBACKW EnumSymbolsCallback,PVOID UserContext);
-#endif
-
-  WINBOOL IMAGEAPI EnumerateLoadedModules64(HANDLE hProcess,PENUMLOADED_MODULES_CALLBACK64 EnumLoadedModulesCallback,PVOID UserContext);
-
-#ifdef _IMAGEHLP64
-#define EnumerateLoadedModules EnumerateLoadedModules64
-#else
-  WINBOOL IMAGEAPI EnumerateLoadedModules(HANDLE hProcess,PENUMLOADED_MODULES_CALLBACK EnumLoadedModulesCallback,PVOID UserContext);
-#endif
-
-  PVOID IMAGEAPI SymFunctionTableAccess64(HANDLE hProcess,DWORD64 AddrBase);
-
-#ifdef _IMAGEHLP64
-#define SymFunctionTableAccess SymFunctionTableAccess64
-#else
-  PVOID IMAGEAPI SymFunctionTableAccess(HANDLE hProcess,DWORD AddrBase);
-#endif
-
-  WINBOOL IMAGEAPI SymGetModuleInfo64(HANDLE hProcess,DWORD64 qwAddr,PIMAGEHLP_MODULE64 ModuleInfo);
-  WINBOOL IMAGEAPI SymGetModuleInfoW64(HANDLE hProcess,DWORD64 qwAddr,PIMAGEHLP_MODULEW64 ModuleInfo);
-
-#ifdef _IMAGEHLP64
-#define SymGetModuleInfo SymGetModuleInfo64
-#define SymGetModuleInfoW SymGetModuleInfoW64
-#else
-  WINBOOL IMAGEAPI SymGetModuleInfo(HANDLE hProcess,DWORD dwAddr,PIMAGEHLP_MODULE ModuleInfo);
-  WINBOOL IMAGEAPI SymGetModuleInfoW(HANDLE hProcess,DWORD dwAddr,PIMAGEHLP_MODULEW ModuleInfo);
-#endif
-
-  DWORD64 IMAGEAPI SymGetModuleBase64(HANDLE hProcess,DWORD64 qwAddr);
-
-#ifdef _IMAGEHLP64
-#define SymGetModuleBase SymGetModuleBase64
-#else
-  DWORD IMAGEAPI SymGetModuleBase(HANDLE hProcess,DWORD dwAddr);
-#endif
-
-  WINBOOL IMAGEAPI SymGetSymNext64(HANDLE hProcess,PIMAGEHLP_SYMBOL64 Symbol);
-
-#ifdef _IMAGEHLP64
-#define SymGetSymNext SymGetSymNext64
-#else
-  WINBOOL IMAGEAPI SymGetSymNext(HANDLE hProcess,PIMAGEHLP_SYMBOL Symbol);
-#endif
-
-  WINBOOL IMAGEAPI SymGetSymPrev64(HANDLE hProcess,PIMAGEHLP_SYMBOL64 Symbol);
-
-#ifdef _IMAGEHLP64
-#define SymGetSymPrev SymGetSymPrev64
-#else
-  WINBOOL IMAGEAPI SymGetSymPrev(HANDLE hProcess,PIMAGEHLP_SYMBOL Symbol);
-#endif
-
-  typedef struct _SRCCODEINFO {
-    DWORD SizeOfStruct;
-    PVOID Key;
-    DWORD64 ModBase;
-    CHAR Obj[MAX_PATH + 1];
-    CHAR FileName[MAX_PATH + 1];
-    DWORD LineNumber;
-    DWORD64 Address;
-  } SRCCODEINFO,*PSRCCODEINFO;
-
-  typedef WINBOOL (CALLBACK *PSYM_ENUMLINES_CALLBACK)(PSRCCODEINFO LineInfo,PVOID UserContext);
-
-  WINBOOL IMAGEAPI SymEnumLines(HANDLE hProcess,ULONG64 Base,PCSTR Obj,PCSTR File,PSYM_ENUMLINES_CALLBACK EnumLinesCallback,PVOID UserContext);
-  WINBOOL IMAGEAPI SymGetLineFromAddr64(HANDLE hProcess,DWORD64 qwAddr,PDWORD pdwDisplacement,PIMAGEHLP_LINE64 Line64);
-
-#ifdef _IMAGEHLP64
-#define SymGetLineFromAddr SymGetLineFromAddr64
-#else
-  WINBOOL IMAGEAPI SymGetLineFromAddr(HANDLE hProcess,DWORD dwAddr,PDWORD pdwDisplacement,PIMAGEHLP_LINE Line);
-#endif
-
-  WINBOOL IMAGEAPI SymGetLineFromName64(HANDLE hProcess,PCSTR ModuleName,PCSTR FileName,DWORD dwLineNumber,PLONG plDisplacement,PIMAGEHLP_LINE64 Line);
-
-#ifdef _IMAGEHLP64
-#define SymGetLineFromName SymGetLineFromName64
-#else
-  WINBOOL IMAGEAPI SymGetLineFromName(HANDLE hProcess,PCSTR ModuleName,PCSTR FileName,DWORD dwLineNumber,PLONG plDisplacement,PIMAGEHLP_LINE Line);
-#endif
-
-  WINBOOL IMAGEAPI SymGetLineNext64(HANDLE hProcess,PIMAGEHLP_LINE64 Line);
-
-#ifdef _IMAGEHLP64
-#define SymGetLineNext SymGetLineNext64
-#else
-  WINBOOL IMAGEAPI SymGetLineNext(HANDLE hProcess,PIMAGEHLP_LINE Line);
-#endif
-
-  WINBOOL IMAGEAPI SymGetLinePrev64(HANDLE hProcess,PIMAGEHLP_LINE64 Line);
-
-#ifdef _IMAGEHLP64
-#define SymGetLinePrev SymGetLinePrev64
-#else
-  WINBOOL IMAGEAPI SymGetLinePrev(HANDLE hProcess,PIMAGEHLP_LINE Line);
-#endif
-
-  WINBOOL IMAGEAPI SymMatchFileName(PCSTR FileName,PCSTR Match,PSTR *FileNameStop,PSTR *MatchStop);
-  WINBOOL IMAGEAPI SymInitialize(HANDLE hProcess,PCSTR UserSearchPath,WINBOOL fInvadeProcess);
-  WINBOOL IMAGEAPI SymGetSearchPath(HANDLE hProcess,PSTR SearchPath,DWORD SearchPathLength);
-  WINBOOL IMAGEAPI SymSetSearchPath(HANDLE hProcess,PCSTR SearchPath);
-  DWORD64 IMAGEAPI SymLoadModule64(HANDLE hProcess,HANDLE hFile,PSTR ImageName,PSTR ModuleName,DWORD64 BaseOfDll,DWORD SizeOfDll);
-
-#define SLMFLAG_VIRTUAL 0x1
-
-  DWORD64 IMAGEAPI SymLoadModuleEx(HANDLE hProcess,HANDLE hFile,PCSTR ImageName,PCSTR ModuleName,DWORD64 BaseOfDll,DWORD DllSize,PMODLOAD_DATA Data,DWORD Flags);
-
-#ifdef _IMAGEHLP64
-#define SymLoadModule SymLoadModule64
-#else
-  DWORD IMAGEAPI SymLoadModule(HANDLE hProcess,HANDLE hFile,PCSTR ImageName,PCSTR ModuleName,DWORD BaseOfDll,DWORD SizeOfDll);
-#endif
-
-  WINBOOL IMAGEAPI SymUnloadModule64(HANDLE hProcess,DWORD64 BaseOfDll);
-
-#ifdef _IMAGEHLP64
-#define SymUnloadModule SymUnloadModule64
-#else
-  WINBOOL IMAGEAPI SymUnloadModule(HANDLE hProcess,DWORD BaseOfDll);
-#endif
-
-  WINBOOL IMAGEAPI SymUnDName64(PIMAGEHLP_SYMBOL64 sym,PSTR UnDecName,DWORD UnDecNameLength);
-
-#ifdef _IMAGEHLP64
-#define SymUnDName SymUnDName64
-#else
-  WINBOOL IMAGEAPI SymUnDName(PIMAGEHLP_SYMBOL sym,PSTR UnDecName,DWORD UnDecNameLength);
-#endif
-
-  WINBOOL IMAGEAPI SymRegisterCallback64(HANDLE hProcess,PSYMBOL_REGISTERED_CALLBACK64 CallbackFunction,ULONG64 UserContext);
-
-  WINBOOL IMAGEAPI SymRegisterFunctionEntryCallback64(HANDLE hProcess,PSYMBOL_FUNCENTRY_CALLBACK64 CallbackFunction,ULONG64 UserContext);
-
-#ifdef _IMAGEHLP64
-#define SymRegisterCallback SymRegisterCallback64
-#define SymRegisterFunctionEntryCallback SymRegisterFunctionEntryCallback64
-#else
-  WINBOOL IMAGEAPI SymRegisterCallback(HANDLE hProcess,PSYMBOL_REGISTERED_CALLBACK CallbackFunction,PVOID UserContext);
-  WINBOOL IMAGEAPI SymRegisterFunctionEntryCallback(HANDLE hProcess,PSYMBOL_FUNCENTRY_CALLBACK CallbackFunction,PVOID UserContext);
-#endif
-
-  typedef struct _IMAGEHLP_SYMBOL_SRC {
-    DWORD sizeofstruct;
-    DWORD type;
-    char file[MAX_PATH];
-  } IMAGEHLP_SYMBOL_SRC,*PIMAGEHLP_SYMBOL_SRC;
-
-  typedef struct _MODULE_TYPE_INFO {
-    USHORT dataLength;
-    USHORT leaf;
-    BYTE data[1];
-  } MODULE_TYPE_INFO,*PMODULE_TYPE_INFO;
-
-  typedef struct _SYMBOL_INFO {
-    ULONG SizeOfStruct;
-    ULONG TypeIndex;
-    ULONG64 Reserved[2];
-    ULONG info;
-    ULONG Size;
-    ULONG64 ModBase;
-    ULONG Flags;
-    ULONG64 Value;
-    ULONG64 Address;
-    ULONG Register;
-    ULONG Scope;
-    ULONG Tag;
-    ULONG NameLen;
-    ULONG MaxNameLen;
-    CHAR Name[1];
-  } SYMBOL_INFO,*PSYMBOL_INFO;
-
-  typedef struct _SYMBOL_INFO_PACKAGE {
-    SYMBOL_INFO si;
-    CHAR name[MAX_SYM_NAME + 1];
-  } SYMBOL_INFO_PACKAGE,*PSYMBOL_INFO_PACKAGE;
-
-  typedef struct _IMAGEHLP_STACK_FRAME {
-    ULONG64 InstructionOffset;
-    ULONG64 ReturnOffset;
-    ULONG64 FrameOffset;
-    ULONG64 StackOffset;
-    ULONG64 BackingStoreOffset;
-    ULONG64 FuncTableEntry;
-    ULONG64 Params[4];
-    ULONG64 Reserved[5];
-    WINBOOL Virtual;
-    ULONG Reserved2;
-  } IMAGEHLP_STACK_FRAME,*PIMAGEHLP_STACK_FRAME;
-
-  typedef VOID IMAGEHLP_CONTEXT,*PIMAGEHLP_CONTEXT;
-
-  WINBOOL IMAGEAPI SymSetContext(HANDLE hProcess,PIMAGEHLP_STACK_FRAME StackFrame,PIMAGEHLP_CONTEXT Context);
-  WINBOOL IMAGEAPI SymFromAddr(HANDLE hProcess,DWORD64 Address,PDWORD64 Displacement,PSYMBOL_INFO Symbol);
-  WINBOOL IMAGEAPI SymFromToken(HANDLE hProcess,DWORD64 Base,DWORD Token,PSYMBOL_INFO Symbol);
-  WINBOOL IMAGEAPI SymFromName(HANDLE hProcess,PCSTR Name,PSYMBOL_INFO Symbol);
-
-  typedef WINBOOL (CALLBACK *PSYM_ENUMERATESYMBOLS_CALLBACK)(PSYMBOL_INFO pSymInfo,ULONG SymbolSize,PVOID UserContext);
-
-  WINBOOL IMAGEAPI SymEnumSymbols(HANDLE hProcess,ULONG64 BaseOfDll,PCSTR Mask,PSYM_ENUMERATESYMBOLS_CALLBACK EnumSymbolsCallback,PVOID UserContext);
-  WINBOOL IMAGEAPI SymEnumSymbolsForAddr(HANDLE hProcess,DWORD64 Address,PSYM_ENUMERATESYMBOLS_CALLBACK EnumSymbolsCallback,PVOID UserContext);
-
-#define SYMENUMFLAG_FULLSRCH 1
-#define SYMENUMFLAG_SPEEDSRCH 2
-
-  typedef enum _IMAGEHLP_SYMBOL_TYPE_INFO {
-    TI_GET_SYMTAG,
-    TI_GET_SYMNAME,
-    TI_GET_LENGTH,
-    TI_GET_TYPE,
-    TI_GET_TYPEID,
-    TI_GET_BASETYPE,
-    TI_GET_ARRAYINDEXTYPEID,
-    TI_FINDCHILDREN,
-    TI_GET_DATAKIND,
-    TI_GET_ADDRESSOFFSET,
-    TI_GET_OFFSET,
-    TI_GET_VALUE,
-    TI_GET_COUNT,
-    TI_GET_CHILDRENCOUNT,
-    TI_GET_BITPOSITION,
-    TI_GET_VIRTUALBASECLASS,
-    TI_GET_VIRTUALTABLESHAPEID,
-    TI_GET_VIRTUALBASEPOINTEROFFSET,
-    TI_GET_CLASSPARENTID,
-    TI_GET_NESTED,
-    TI_GET_SYMINDEX,
-    TI_GET_LEXICALPARENT,
-    TI_GET_ADDRESS,
-    TI_GET_THISADJUST,
-    TI_GET_UDTKIND,
-    TI_IS_EQUIV_TO,
-    TI_GET_CALLING_CONVENTION
-  } IMAGEHLP_SYMBOL_TYPE_INFO;
-
-  typedef struct _TI_FINDCHILDREN_PARAMS {
-    ULONG Count;
-    ULONG Start;
-    ULONG ChildId[1];
-  } TI_FINDCHILDREN_PARAMS;
-
-  WINBOOL IMAGEAPI SymGetTypeInfo(HANDLE hProcess,DWORD64 ModBase,ULONG TypeId,IMAGEHLP_SYMBOL_TYPE_INFO GetType,PVOID pInfo);
-  WINBOOL IMAGEAPI SymEnumTypes(HANDLE hProcess,ULONG64 BaseOfDll,PSYM_ENUMERATESYMBOLS_CALLBACK EnumSymbolsCallback,PVOID UserContext);
-  WINBOOL IMAGEAPI SymGetTypeFromName(HANDLE hProcess,ULONG64 BaseOfDll,PCSTR Name,PSYMBOL_INFO Symbol);
-  WINBOOL IMAGEAPI SymAddSymbol(HANDLE hProcess,ULONG64 BaseOfDll,PCSTR Name,DWORD64 Address,DWORD Size,DWORD Flags);
-  WINBOOL IMAGEAPI SymDeleteSymbol(HANDLE hProcess,ULONG64 BaseOfDll,PCSTR Name,DWORD64 Address,DWORD Flags);
-
-  typedef WINBOOL (WINAPI *PDBGHELP_CREATE_USER_DUMP_CALLBACK)(DWORD DataType,PVOID *Data,LPDWORD DataLength,PVOID UserData);
-
-  WINBOOL WINAPI DbgHelpCreateUserDump(LPCSTR FileName,PDBGHELP_CREATE_USER_DUMP_CALLBACK Callback,PVOID UserData);
-  WINBOOL WINAPI DbgHelpCreateUserDumpW(LPCWSTR FileName,PDBGHELP_CREATE_USER_DUMP_CALLBACK Callback,PVOID UserData);
-  WINBOOL IMAGEAPI SymGetSymFromAddr64(HANDLE hProcess,DWORD64 qwAddr,PDWORD64 pdwDisplacement,PIMAGEHLP_SYMBOL64 Symbol);
-
-#ifdef _IMAGEHLP64
-#define SymGetSymFromAddr SymGetSymFromAddr64
-#else
-  WINBOOL IMAGEAPI SymGetSymFromAddr(HANDLE hProcess,DWORD dwAddr,PDWORD pdwDisplacement,PIMAGEHLP_SYMBOL Symbol);
-#endif
-
-  WINBOOL IMAGEAPI SymGetSymFromName64(HANDLE hProcess,PCSTR Name,PIMAGEHLP_SYMBOL64 Symbol);
-
-#ifdef _IMAGEHLP64
-#define SymGetSymFromName SymGetSymFromName64
-#else
-  WINBOOL IMAGEAPI SymGetSymFromName(HANDLE hProcess,PCSTR Name,PIMAGEHLP_SYMBOL Symbol);
-#endif
-
-  DBHLP_DEPRECIATED WINBOOL IMAGEAPI FindFileInPath(HANDLE hprocess,PCSTR SearchPath,PCSTR FileName,PVOID id,DWORD two,DWORD three,DWORD flags,PSTR FilePath);
-  DBHLP_DEPRECIATED WINBOOL IMAGEAPI FindFileInSearchPath(HANDLE hprocess,PCSTR SearchPath,PCSTR FileName,DWORD one,DWORD two,DWORD three,PSTR FilePath);
-  DBHLP_DEPRECIATED WINBOOL IMAGEAPI SymEnumSym(HANDLE hProcess,ULONG64 BaseOfDll,PSYM_ENUMERATESYMBOLS_CALLBACK EnumSymbolsCallback,PVOID UserContext);
-
-#define SYMF_OMAP_GENERATED 0x00000001
-#define SYMF_OMAP_MODIFIED 0x00000002
-#define SYMF_REGISTER 0x00000008
-#define SYMF_REGREL 0x00000010
-#define SYMF_FRAMEREL 0x00000020
-#define SYMF_PARAMETER 0x00000040
-#define SYMF_LOCAL 0x00000080
-#define SYMF_CONSTANT 0x00000100
-#define SYMF_EXPORT 0x00000200
-#define SYMF_FORWARDER 0x00000400
-#define SYMF_FUNCTION 0x00000800
-#define SYMF_VIRTUAL 0x00001000
-#define SYMF_THUNK 0x00002000
-#define SYMF_TLSREL 0x00004000
-
-#define IMAGEHLP_SYMBOL_INFO_VALUEPRESENT 1
-#define IMAGEHLP_SYMBOL_INFO_REGISTER SYMF_REGISTER
-#define IMAGEHLP_SYMBOL_INFO_REGRELATIVE SYMF_REGREL
-#define IMAGEHLP_SYMBOL_INFO_FRAMERELATIVE SYMF_FRAMEREL
-#define IMAGEHLP_SYMBOL_INFO_PARAMETER SYMF_PARAMETER
-#define IMAGEHLP_SYMBOL_INFO_LOCAL SYMF_LOCAL
-#define IMAGEHLP_SYMBOL_INFO_CONSTANT SYMF_CONSTANT
-#define IMAGEHLP_SYMBOL_FUNCTION SYMF_FUNCTION
-#define IMAGEHLP_SYMBOL_VIRTUAL SYMF_VIRTUAL
-#define IMAGEHLP_SYMBOL_THUNK SYMF_THUNK
-#define IMAGEHLP_SYMBOL_INFO_TLSRELATIVE SYMF_TLSREL
-
-#include <pshpack4.h>
-
-#define MINIDUMP_SIGNATURE ('PMDM')
-#define MINIDUMP_VERSION (42899)
-  typedef DWORD RVA;
-  typedef ULONG64 RVA64;
-
-  typedef struct _MINIDUMP_LOCATION_DESCRIPTOR {
-    ULONG32 DataSize;
-    RVA Rva;
-  } MINIDUMP_LOCATION_DESCRIPTOR;
-
-  typedef struct _MINIDUMP_LOCATION_DESCRIPTOR64 {
-    ULONG64 DataSize;
-    RVA64 Rva;
-  } MINIDUMP_LOCATION_DESCRIPTOR64;
-
-  typedef struct _MINIDUMP_MEMORY_DESCRIPTOR {
-    ULONG64 StartOfMemoryRange;
-    MINIDUMP_LOCATION_DESCRIPTOR Memory;
-  } MINIDUMP_MEMORY_DESCRIPTOR,*PMINIDUMP_MEMORY_DESCRIPTOR;
-
-  typedef struct _MINIDUMP_MEMORY_DESCRIPTOR64 {
-    ULONG64 StartOfMemoryRange;
-    ULONG64 DataSize;
-  } MINIDUMP_MEMORY_DESCRIPTOR64,*PMINIDUMP_MEMORY_DESCRIPTOR64;
-
-  typedef struct _MINIDUMP_HEADER {
-    ULONG32 Signature;
-    ULONG32 Version;
-    ULONG32 NumberOfStreams;
-    RVA StreamDirectoryRva;
-    ULONG32 CheckSum;
-    __MINGW_EXTENSION union {
-      ULONG32 Reserved;
-      ULONG32 TimeDateStamp;
-    };
-    ULONG64 Flags;
-  } MINIDUMP_HEADER,*PMINIDUMP_HEADER;
-
-  typedef struct _MINIDUMP_DIRECTORY {
-    ULONG32 StreamType;
-    MINIDUMP_LOCATION_DESCRIPTOR Location;
-  } MINIDUMP_DIRECTORY,*PMINIDUMP_DIRECTORY;
-
-  typedef struct _MINIDUMP_STRING {
-    ULONG32 Length;
-    WCHAR Buffer[0];
-  } MINIDUMP_STRING,*PMINIDUMP_STRING;
-
-  typedef enum _MINIDUMP_STREAM_TYPE {
-    UnusedStream = 0,
-    ReservedStream0 = 1,
-    ReservedStream1 = 2,
-    ThreadListStream = 3,
-    ModuleListStream = 4,
-    MemoryListStream = 5,
-    ExceptionStream = 6,
-    SystemInfoStream = 7,
-    ThreadExListStream = 8,
-    Memory64ListStream = 9,
-    CommentStreamA = 10,
-    CommentStreamW = 11,
-    HandleDataStream = 12,
-    FunctionTableStream = 13,
-    UnloadedModuleListStream = 14,
-    MiscInfoStream = 15,
-    LastReservedStream = 0xffff
-  } MINIDUMP_STREAM_TYPE;
-
-  typedef union _CPU_INFORMATION {
-    struct {
-      ULONG32 VendorId[3];
-      ULONG32 VersionInformation;
-      ULONG32 FeatureInformation;
-      ULONG32 AMDExtendedCpuFeatures;
-    } X86CpuInfo;
-    struct {
-      ULONG64 ProcessorFeatures[2];
-    } OtherCpuInfo;
-  } CPU_INFORMATION,*PCPU_INFORMATION;
-
-  typedef struct _MINIDUMP_SYSTEM_INFO {
-    USHORT ProcessorArchitecture;
-    USHORT ProcessorLevel;
-    USHORT ProcessorRevision;
-    __MINGW_EXTENSION union {
-      USHORT Reserved0;
-      __MINGW_EXTENSION struct {
-	UCHAR NumberOfProcessors;
-	UCHAR ProductType;
-      };
-    };
-    ULONG32 MajorVersion;
-    ULONG32 MinorVersion;
-    ULONG32 BuildNumber;
-    ULONG32 PlatformId;
-    RVA CSDVersionRva;
-    __MINGW_EXTENSION union {
-      ULONG32 Reserved1;
-      __MINGW_EXTENSION struct {
-	USHORT SuiteMask;
-	USHORT Reserved2;
-      };
-    };
-    CPU_INFORMATION Cpu;
-  } MINIDUMP_SYSTEM_INFO,*PMINIDUMP_SYSTEM_INFO;
-
-  C_ASSERT(sizeof(((PPROCESS_INFORMATION)0)->dwThreadId)==4);
-
-  typedef struct _MINIDUMP_THREAD {
-    ULONG32 ThreadId;
-    ULONG32 SuspendCount;
-    ULONG32 PriorityClass;
-    ULONG32 Priority;
-    ULONG64 Teb;
-    MINIDUMP_MEMORY_DESCRIPTOR Stack;
-    MINIDUMP_LOCATION_DESCRIPTOR ThreadContext;
-  } MINIDUMP_THREAD,*PMINIDUMP_THREAD;
-
-  typedef struct _MINIDUMP_THREAD_LIST {
-    ULONG32 NumberOfThreads;
-    MINIDUMP_THREAD Threads[0];
-  } MINIDUMP_THREAD_LIST,*PMINIDUMP_THREAD_LIST;
-
-  typedef struct _MINIDUMP_THREAD_EX {
-    ULONG32 ThreadId;
-    ULONG32 SuspendCount;
-    ULONG32 PriorityClass;
-    ULONG32 Priority;
-    ULONG64 Teb;
-    MINIDUMP_MEMORY_DESCRIPTOR Stack;
-    MINIDUMP_LOCATION_DESCRIPTOR ThreadContext;
-    MINIDUMP_MEMORY_DESCRIPTOR BackingStore;
-  } MINIDUMP_THREAD_EX,*PMINIDUMP_THREAD_EX;
-
-  typedef struct _MINIDUMP_THREAD_EX_LIST {
-    ULONG32 NumberOfThreads;
-    MINIDUMP_THREAD_EX Threads[0];
-  } MINIDUMP_THREAD_EX_LIST,*PMINIDUMP_THREAD_EX_LIST;
-
-  typedef struct _MINIDUMP_EXCEPTION {
-    ULONG32 ExceptionCode;
-    ULONG32 ExceptionFlags;
-    ULONG64 ExceptionRecord;
-    ULONG64 ExceptionAddress;
-    ULONG32 NumberParameters;
-    ULONG32 __unusedAlignment;
-    ULONG64 ExceptionInformation[EXCEPTION_MAXIMUM_PARAMETERS];
-  } MINIDUMP_EXCEPTION,*PMINIDUMP_EXCEPTION;
-
-  typedef struct MINIDUMP_EXCEPTION_STREAM {
-    ULONG32 ThreadId;
-    ULONG32 __alignment;
-    MINIDUMP_EXCEPTION ExceptionRecord;
-    MINIDUMP_LOCATION_DESCRIPTOR ThreadContext;
-  } MINIDUMP_EXCEPTION_STREAM,*PMINIDUMP_EXCEPTION_STREAM;
-
-  typedef struct _MINIDUMP_MODULE {
-    ULONG64 BaseOfImage;
-    ULONG32 SizeOfImage;
-    ULONG32 CheckSum;
-    ULONG32 TimeDateStamp;
-    RVA ModuleNameRva;
-    VS_FIXEDFILEINFO VersionInfo;
-    MINIDUMP_LOCATION_DESCRIPTOR CvRecord;
-    MINIDUMP_LOCATION_DESCRIPTOR MiscRecord;
-    ULONG64 Reserved0;
-    ULONG64 Reserved1;
-  } MINIDUMP_MODULE,*PMINIDUMP_MODULE;
-
-  typedef struct _MINIDUMP_MODULE_LIST {
-    ULONG32 NumberOfModules;
-    MINIDUMP_MODULE Modules[0];
-  } MINIDUMP_MODULE_LIST,*PMINIDUMP_MODULE_LIST;
-
-  typedef struct _MINIDUMP_MEMORY_LIST {
-    ULONG32 NumberOfMemoryRanges;
-    MINIDUMP_MEMORY_DESCRIPTOR MemoryRanges[0];
-  } MINIDUMP_MEMORY_LIST,*PMINIDUMP_MEMORY_LIST;
-
-  typedef struct _MINIDUMP_MEMORY64_LIST {
-    ULONG64 NumberOfMemoryRanges;
-    RVA64 BaseRva;
-    MINIDUMP_MEMORY_DESCRIPTOR64 MemoryRanges[0];
-  } MINIDUMP_MEMORY64_LIST,*PMINIDUMP_MEMORY64_LIST;
-
-  typedef struct _MINIDUMP_EXCEPTION_INFORMATION {
-    DWORD ThreadId;
-    PEXCEPTION_POINTERS ExceptionPointers;
-    WINBOOL ClientPointers;
-  } MINIDUMP_EXCEPTION_INFORMATION,*PMINIDUMP_EXCEPTION_INFORMATION;
-
-  typedef struct _MINIDUMP_EXCEPTION_INFORMATION64 {
-    DWORD ThreadId;
-    ULONG64 ExceptionRecord;
-    ULONG64 ContextRecord;
-    WINBOOL ClientPointers;
-  } MINIDUMP_EXCEPTION_INFORMATION64,*PMINIDUMP_EXCEPTION_INFORMATION64;
-
-  typedef struct _MINIDUMP_HANDLE_DESCRIPTOR {
-    ULONG64 Handle;
-    RVA TypeNameRva;
-    RVA ObjectNameRva;
-    ULONG32 Attributes;
-    ULONG32 GrantedAccess;
-    ULONG32 HandleCount;
-    ULONG32 PointerCount;
-  } MINIDUMP_HANDLE_DESCRIPTOR,*PMINIDUMP_HANDLE_DESCRIPTOR;
-
-  typedef struct _MINIDUMP_HANDLE_DATA_STREAM {
-    ULONG32 SizeOfHeader;
-    ULONG32 SizeOfDescriptor;
-    ULONG32 NumberOfDescriptors;
-    ULONG32 Reserved;
-  } MINIDUMP_HANDLE_DATA_STREAM,*PMINIDUMP_HANDLE_DATA_STREAM;
-
-  typedef struct _MINIDUMP_FUNCTION_TABLE_DESCRIPTOR {
-    ULONG64 MinimumAddress;
-    ULONG64 MaximumAddress;
-    ULONG64 BaseAddress;
-    ULONG32 EntryCount;
-    ULONG32 SizeOfAlignPad;
-  } MINIDUMP_FUNCTION_TABLE_DESCRIPTOR,*PMINIDUMP_FUNCTION_TABLE_DESCRIPTOR;
-
-  typedef struct _MINIDUMP_FUNCTION_TABLE_STREAM {
-    ULONG32 SizeOfHeader;
-    ULONG32 SizeOfDescriptor;
-    ULONG32 SizeOfNativeDescriptor;
-    ULONG32 SizeOfFunctionEntry;
-    ULONG32 NumberOfDescriptors;
-    ULONG32 SizeOfAlignPad;
-  } MINIDUMP_FUNCTION_TABLE_STREAM,*PMINIDUMP_FUNCTION_TABLE_STREAM;
-
-  typedef struct _MINIDUMP_UNLOADED_MODULE {
-    ULONG64 BaseOfImage;
-    ULONG32 SizeOfImage;
-    ULONG32 CheckSum;
-    ULONG32 TimeDateStamp;
-    RVA ModuleNameRva;
-  } MINIDUMP_UNLOADED_MODULE,*PMINIDUMP_UNLOADED_MODULE;
-
-  typedef struct _MINIDUMP_UNLOADED_MODULE_LIST {
-    ULONG32 SizeOfHeader;
-    ULONG32 SizeOfEntry;
-    ULONG32 NumberOfEntries;
-  } MINIDUMP_UNLOADED_MODULE_LIST,*PMINIDUMP_UNLOADED_MODULE_LIST;
-
-#define MINIDUMP_MISC1_PROCESS_ID 0x00000001
-#define MINIDUMP_MISC1_PROCESS_TIMES 0x00000002
-#define MINIDUMP_MISC1_PROCESSOR_POWER_INFO 0x00000004
-
-  typedef struct _MINIDUMP_MISC_INFO {
-    ULONG32 SizeOfInfo;
-    ULONG32 Flags1;
-    ULONG32 ProcessId;
-    ULONG32 ProcessCreateTime;
-    ULONG32 ProcessUserTime;
-    ULONG32 ProcessKernelTime;
-  } MINIDUMP_MISC_INFO,*PMINIDUMP_MISC_INFO;
-
-  typedef struct _MINIDUMP_USER_RECORD {
-    ULONG32 Type;
-    MINIDUMP_LOCATION_DESCRIPTOR Memory;
-  } MINIDUMP_USER_RECORD,*PMINIDUMP_USER_RECORD;
-
-  typedef struct _MINIDUMP_USER_STREAM {
-    ULONG32 Type;
-    ULONG BufferSize;
-    PVOID Buffer;
-  } MINIDUMP_USER_STREAM,*PMINIDUMP_USER_STREAM;
-
-  typedef struct _MINIDUMP_USER_STREAM_INFORMATION {
-    ULONG UserStreamCount;
-    PMINIDUMP_USER_STREAM UserStreamArray;
-  } MINIDUMP_USER_STREAM_INFORMATION,*PMINIDUMP_USER_STREAM_INFORMATION;
-
-  typedef enum _MINIDUMP_CALLBACK_TYPE {
-    ModuleCallback,
-    ThreadCallback,
-    ThreadExCallback,
-    IncludeThreadCallback,
-    IncludeModuleCallback,
-    MemoryCallback
-  } MINIDUMP_CALLBACK_TYPE;
-
-  typedef struct _MINIDUMP_THREAD_CALLBACK {
-    ULONG ThreadId;
-    HANDLE ThreadHandle;
-    CONTEXT Context;
-    ULONG SizeOfContext;
-    ULONG64 StackBase;
-    ULONG64 StackEnd;
-  } MINIDUMP_THREAD_CALLBACK,*PMINIDUMP_THREAD_CALLBACK;
-
-  typedef struct _MINIDUMP_THREAD_EX_CALLBACK {
-    ULONG ThreadId;
-    HANDLE ThreadHandle;
-    CONTEXT Context;
-    ULONG SizeOfContext;
-    ULONG64 StackBase;
-    ULONG64 StackEnd;
-    ULONG64 BackingStoreBase;
-    ULONG64 BackingStoreEnd;
-  } MINIDUMP_THREAD_EX_CALLBACK,*PMINIDUMP_THREAD_EX_CALLBACK;
-
-  typedef struct _MINIDUMP_INCLUDE_THREAD_CALLBACK {
-    ULONG ThreadId;
-  } MINIDUMP_INCLUDE_THREAD_CALLBACK,*PMINIDUMP_INCLUDE_THREAD_CALLBACK;
-
-  typedef enum _THREAD_WRITE_FLAGS {
-    ThreadWriteThread              = 0x0001,
-    ThreadWriteStack               = 0x0002,
-    ThreadWriteContext             = 0x0004,
-    ThreadWriteBackingStore        = 0x0008,
-    ThreadWriteInstructionWindow   = 0x0010,
-    ThreadWriteThreadData          = 0x0020,
-    ThreadWriteThreadInfo          = 0x0040
-  } THREAD_WRITE_FLAGS;
-
-  typedef struct _MINIDUMP_MODULE_CALLBACK {
-    PWCHAR FullPath;
-    ULONG64 BaseOfImage;
-    ULONG SizeOfImage;
-    ULONG CheckSum;
-    ULONG TimeDateStamp;
-    VS_FIXEDFILEINFO VersionInfo;
-    PVOID CvRecord;
-    ULONG SizeOfCvRecord;
-    PVOID MiscRecord;
-    ULONG SizeOfMiscRecord;
-  } MINIDUMP_MODULE_CALLBACK,*PMINIDUMP_MODULE_CALLBACK;
-
-  typedef struct _MINIDUMP_INCLUDE_MODULE_CALLBACK {
-    ULONG64 BaseOfImage;
-  } MINIDUMP_INCLUDE_MODULE_CALLBACK,*PMINIDUMP_INCLUDE_MODULE_CALLBACK;
-
-  typedef enum _MODULE_WRITE_FLAGS {
-    ModuleWriteModule          = 0x0001,
-    ModuleWriteDataSeg         = 0x0002,
-    ModuleWriteMiscRecord      = 0x0004,
-    ModuleWriteCvRecord        = 0x0008,
-    ModuleReferencedByMemory   = 0x0010,
-    ModuleWriteTlsData         = 0x0020,
-    ModuleWriteCodeSegs        = 0x0040
-  } MODULE_WRITE_FLAGS;
-
-  typedef enum _MINIDUMP_SECONDARY_FLAGS {
-    MiniSecondaryWithoutPowerInfo   = 0x00000001
-  } MINIDUMP_SECONDARY_FLAGS;
-
-  typedef struct _MINIDUMP_CALLBACK_INPUT {
-    ULONG ProcessId;
-    HANDLE ProcessHandle;
-    ULONG CallbackType;
-    __MINGW_EXTENSION union {
-      MINIDUMP_THREAD_CALLBACK Thread;
-      MINIDUMP_THREAD_EX_CALLBACK ThreadEx;
-      MINIDUMP_MODULE_CALLBACK Module;
-      MINIDUMP_INCLUDE_THREAD_CALLBACK IncludeThread;
-      MINIDUMP_INCLUDE_MODULE_CALLBACK IncludeModule;
-    };
-  } MINIDUMP_CALLBACK_INPUT,*PMINIDUMP_CALLBACK_INPUT;
-
-typedef struct _MINIDUMP_MEMORY_INFO {
-  ULONG64 BaseAddress;
-  ULONG64 AllocationBase;
-  ULONG32 AllocationProtect;
-  ULONG32 __alignment1;
-  ULONG64 RegionSize;
-  ULONG32 State;
-  ULONG32 Protect;
-  ULONG32 Type;
-  ULONG32 __alignment2;
-} MINIDUMP_MEMORY_INFO, *PMINIDUMP_MEMORY_INFO;
-
-typedef struct _MINIDUMP_MISC_INFO_2 {
-  ULONG32 SizeOfInfo;
-  ULONG32 Flags1;
-  ULONG32 ProcessId;
-  ULONG32 ProcessCreateTime;
-  ULONG32 ProcessUserTime;
-  ULONG32 ProcessKernelTime;
-  ULONG32 ProcessorMaxMhz;
-  ULONG32 ProcessorCurrentMhz;
-  ULONG32 ProcessorMhzLimit;
-  ULONG32 ProcessorMaxIdleState;
-  ULONG32 ProcessorCurrentIdleState;
-} MINIDUMP_MISC_INFO_2, *PMINIDUMP_MISC_INFO_2;
-
-typedef struct _MINIDUMP_MEMORY_INFO_LIST {
-  ULONG   SizeOfHeader;
-  ULONG   SizeOfEntry;
-  ULONG64 NumberOfEntries;
-} MINIDUMP_MEMORY_INFO_LIST, *PMINIDUMP_MEMORY_INFO_LIST;
-
-  typedef struct _MINIDUMP_CALLBACK_OUTPUT {
-    __MINGW_EXTENSION union {
-      ULONG ModuleWriteFlags;
-      ULONG ThreadWriteFlags;
-      ULONG SecondaryFlags;
-      __MINGW_EXTENSION struct {
-	ULONG64 MemoryBase;
-	ULONG MemorySize;
-      };
-      __MINGW_EXTENSION struct {
-	WINBOOL CheckCancel;
-	WINBOOL Cancel;
-      };
-      HANDLE Handle;
-    };
-    __MINGW_EXTENSION struct {
-      MINIDUMP_MEMORY_INFO VmRegion;
-      WINBOOL Continue;
-    };
-    HRESULT Status;
-  } MINIDUMP_CALLBACK_OUTPUT, *PMINIDUMP_CALLBACK_OUTPUT;
-
-  typedef enum _MINIDUMP_TYPE {
-    MiniDumpNormal                           = 0x00000000,
-    MiniDumpWithDataSegs                     = 0x00000001,
-    MiniDumpWithFullMemory                   = 0x00000002,
-    MiniDumpWithHandleData                   = 0x00000004,
-    MiniDumpFilterMemory                     = 0x00000008,
-    MiniDumpScanMemory                       = 0x00000010,
-    MiniDumpWithUnloadedModules              = 0x00000020,
-    MiniDumpWithIndirectlyReferencedMemory   = 0x00000040,
-    MiniDumpFilterModulePaths                = 0x00000080,
-    MiniDumpWithProcessThreadData            = 0x00000100,
-    MiniDumpWithPrivateReadWriteMemory       = 0x00000200,
-    MiniDumpWithoutOptionalData              = 0x00000400,
-    MiniDumpWithFullMemoryInfo               = 0x00000800,
-    MiniDumpWithThreadInfo                   = 0x00001000,
-    MiniDumpWithCodeSegs                     = 0x00002000,
-    MiniDumpWithoutAuxiliaryState            = 0x00004000,
-    MiniDumpWithFullAuxiliaryState           = 0x00008000,
-    MiniDumpWithPrivateWriteCopyMemory       = 0x00010000,
-    MiniDumpIgnoreInaccessibleMemory         = 0x00020000,
-    MiniDumpWithTokenInformation             = 0x00040000
-  } MINIDUMP_TYPE;
-
-#define MINIDUMP_THREAD_INFO_ERROR_THREAD    0x00000001
-#define MINIDUMP_THREAD_INFO_WRITING_THREAD  0x00000002
-#define MINIDUMP_THREAD_INFO_EXITED_THREAD   0x00000004
-#define MINIDUMP_THREAD_INFO_INVALID_INFO    0x00000008
-#define MINIDUMP_THREAD_INFO_INVALID_CONTEXT 0x00000010
-#define MINIDUMP_THREAD_INFO_INVALID_TEB     0x00000020
-
-typedef struct _MINIDUMP_THREAD_INFO {
-  ULONG32 ThreadId;
-  ULONG32 DumpFlags;
-  ULONG32 DumpError;
-  ULONG32 ExitStatus;
-  ULONG64 CreateTime;
-  ULONG64 ExitTime;
-  ULONG64 KernelTime;
-  ULONG64 UserTime;
-  ULONG64 StartAddress;
-  ULONG64 Affinity;
-} MINIDUMP_THREAD_INFO, *PMINIDUMP_THREAD_INFO;
-
-typedef struct _MINIDUMP_THREAD_INFO_LIST {
-  ULONG   SizeOfHeader;
-  ULONG   SizeOfEntry;
-  ULONG   NumberOfEntries; /* FIXME: msdn says ULONG64 */
-} MINIDUMP_THREAD_INFO_LIST, *PMINIDUMP_THREAD_INFO_LIST;
-
-  typedef WINBOOL (WINAPI *MINIDUMP_CALLBACK_ROUTINE)(PVOID CallbackParam,CONST PMINIDUMP_CALLBACK_INPUT CallbackInput,PMINIDUMP_CALLBACK_OUTPUT CallbackOutput);
-
-  typedef struct _MINIDUMP_CALLBACK_INFORMATION {
-    MINIDUMP_CALLBACK_ROUTINE CallbackRoutine;
-    PVOID CallbackParam;
-  } MINIDUMP_CALLBACK_INFORMATION,*PMINIDUMP_CALLBACK_INFORMATION;
-
-#define RVA_TO_ADDR(Mapping,Rva) ((PVOID)(((ULONG_PTR) (Mapping)) + (Rva)))
-
-  WINBOOL WINAPI MiniDumpWriteDump(HANDLE hProcess,DWORD ProcessId,HANDLE hFile,MINIDUMP_TYPE DumpType,CONST PMINIDUMP_EXCEPTION_INFORMATION ExceptionParam,CONST PMINIDUMP_USER_STREAM_INFORMATION UserStreamParam,CONST PMINIDUMP_CALLBACK_INFORMATION CallbackParam);
-  WINBOOL WINAPI MiniDumpReadDumpStream(PVOID BaseOfDump,ULONG StreamNumber,PMINIDUMP_DIRECTORY *Dir,PVOID *StreamPointer,ULONG *StreamSize);
-
-#include <poppack.h>
+#include <mingw_inc/_dbg_LOAD_IMAGE.h>
+#include <mingw_inc/_dbg_common.h>
 
 #ifdef __cplusplus
 }
diff --git a/mingw-w64-headers/include/imagehlp.h b/mingw-w64-headers/include/imagehlp.h
index ac59c63..4c65788 100644
--- a/mingw-w64-headers/include/imagehlp.h
+++ b/mingw-w64-headers/include/imagehlp.h
@@ -20,39 +20,7 @@
 extern "C" {
 #endif
 
-#ifndef WINAPI
-#define WINAPI __stdcall
-#endif
-
-#define IMAGEAPI DECLSPEC_IMPORT WINAPI
-#define DBHLP_DEPRECIATED __declspec(deprecated)
-
-#define DBHLPAPI IMAGEAPI
-
-#define IMAGE_SEPARATION (64*1024)
-
-  typedef struct _LOADED_IMAGE {
-    PSTR ModuleName;
-    HANDLE hFile;
-    PUCHAR MappedAddress;
-#ifdef _IMAGEHLP64
-    PIMAGE_NT_HEADERS64 FileHeader;
-#else
-    PIMAGE_NT_HEADERS32 FileHeader;
-#endif
-    PIMAGE_SECTION_HEADER LastRvaSection;
-    ULONG NumberOfSections;
-    PIMAGE_SECTION_HEADER Sections;
-    ULONG Characteristics;
-    BOOLEAN fSystemImage;
-    BOOLEAN fDOSImage;
-    BOOLEAN fReadOnly;
-    UCHAR Version;
-    LIST_ENTRY Links;
-    ULONG SizeOfImage;
-  } LOADED_IMAGE,*PLOADED_IMAGE;
-
-#define MAX_SYM_NAME 2000
+#include <mingw_inc/_dbg_LOAD_IMAGE.h>
 
   typedef enum _IMAGEHLP_STATUS_REASON {
     BindOutOfMemory,
@@ -135,1395 +103,7 @@
   WINBOOL IMAGEAPI UpdateDebugInfoFile(PCSTR ImageFileName,PCSTR SymbolPath,PSTR DebugFilePath,PIMAGE_NT_HEADERS32 NtHeaders);
   WINBOOL IMAGEAPI UpdateDebugInfoFileEx(PCSTR ImageFileName,PCSTR SymbolPath,PSTR DebugFilePath,PIMAGE_NT_HEADERS32 NtHeaders,DWORD OldChecksum);
 
-  typedef WINBOOL (CALLBACK *PFIND_DEBUG_FILE_CALLBACK)(HANDLE FileHandle,PCSTR FileName,PVOID CallerData);
-  typedef WINBOOL (CALLBACK *PFINDFILEINPATHCALLBACK)(PCSTR filename,PVOID context);
-  typedef WINBOOL (CALLBACK *PFIND_EXE_FILE_CALLBACK)(HANDLE FileHandle,PCSTR FileName,PVOID CallerData);
-
-  typedef WINBOOL (WINAPI *PSYMBOLSERVERPROC)(LPCSTR,LPCSTR,PVOID,DWORD,DWORD,LPSTR);
-  typedef WINBOOL (WINAPI *PSYMBOLSERVEROPENPROC)(VOID);
-  typedef WINBOOL (WINAPI *PSYMBOLSERVERCLOSEPROC)(VOID);
-  typedef WINBOOL (WINAPI *PSYMBOLSERVERSETOPTIONSPROC)(UINT_PTR,ULONG64);
-  typedef WINBOOL (CALLBACK WINAPI *PSYMBOLSERVERCALLBACKPROC)(UINT_PTR action,ULONG64 data,ULONG64 context);
-  typedef UINT_PTR (WINAPI *PSYMBOLSERVERGETOPTIONSPROC)();
-  typedef WINBOOL (WINAPI *PSYMBOLSERVERPINGPROC)(LPCSTR);
-
-  HANDLE IMAGEAPI FindDebugInfoFile(PCSTR FileName,PCSTR SymbolPath,PSTR DebugFilePath);
-  HANDLE IMAGEAPI FindDebugInfoFileEx(PCSTR FileName,PCSTR SymbolPath,PSTR DebugFilePath,PFIND_DEBUG_FILE_CALLBACK Callback,PVOID CallerData);
-  WINBOOL IMAGEAPI SymFindFileInPath(HANDLE hprocess,PCSTR SearchPath,PCSTR FileName,PVOID id,DWORD two,DWORD three,DWORD flags,LPSTR FoundFile,PFINDFILEINPATHCALLBACK callback,PVOID context);
-  HANDLE IMAGEAPI FindExecutableImage(PCSTR FileName,PCSTR SymbolPath,PSTR ImageFilePath);
-  HANDLE IMAGEAPI FindExecutableImageEx(PCSTR FileName,PCSTR SymbolPath,PSTR ImageFilePath,PFIND_EXE_FILE_CALLBACK Callback,PVOID CallerData);
-  PIMAGE_NT_HEADERS IMAGEAPI ImageNtHeader(PVOID Base);
-  PVOID IMAGEAPI ImageDirectoryEntryToDataEx(PVOID Base,BOOLEAN MappedAsImage,USHORT DirectoryEntry,PULONG Size,PIMAGE_SECTION_HEADER *FoundHeader);
-  PVOID IMAGEAPI ImageDirectoryEntryToData(PVOID Base,BOOLEAN MappedAsImage,USHORT DirectoryEntry,PULONG Size);
-  PIMAGE_SECTION_HEADER IMAGEAPI ImageRvaToSection(PIMAGE_NT_HEADERS NtHeaders,PVOID Base,ULONG Rva);
-  PVOID IMAGEAPI ImageRvaToVa(PIMAGE_NT_HEADERS NtHeaders,PVOID Base,ULONG Rva,PIMAGE_SECTION_HEADER *LastRvaSection);
-
-#define SSRVOPT_CALLBACK 0x0001
-#define SSRVOPT_DWORD 0x0002
-#define SSRVOPT_DWORDPTR 0x0004
-#define SSRVOPT_GUIDPTR 0x0008
-#define SSRVOPT_OLDGUIDPTR 0x0010
-#define SSRVOPT_UNATTENDED 0x0020
-#define SSRVOPT_NOCOPY 0x0040
-#define SSRVOPT_PARENTWIN 0x0080
-#define SSRVOPT_PARAMTYPE 0x0100
-#define SSRVOPT_SECURE 0x0200
-#define SSRVOPT_TRACE 0x0400
-#define SSRVOPT_SETCONTEXT 0x0800
-#define SSRVOPT_PROXY 0x1000
-#define SSRVOPT_DOWNSTREAM_STORE 0x2000
-#define SSRVOPT_RESET ((ULONG_PTR)-1)
-
-#define SSRVACTION_TRACE 1
-#define SSRVACTION_QUERYCANCEL 2
-#define SSRVACTION_EVENT 3
-
-#ifndef _WIN64
-  typedef struct _IMAGE_DEBUG_INFORMATION {
-    LIST_ENTRY List;
-    DWORD ReservedSize;
-    PVOID ReservedMappedBase;
-    USHORT ReservedMachine;
-    USHORT ReservedCharacteristics;
-    DWORD ReservedCheckSum;
-    DWORD ImageBase;
-    DWORD SizeOfImage;
-    DWORD ReservedNumberOfSections;
-    PIMAGE_SECTION_HEADER ReservedSections;
-    DWORD ReservedExportedNamesSize;
-    PSTR ReservedExportedNames;
-    DWORD ReservedNumberOfFunctionTableEntries;
-    PIMAGE_FUNCTION_ENTRY ReservedFunctionTableEntries;
-    DWORD ReservedLowestFunctionStartingAddress;
-    DWORD ReservedHighestFunctionEndingAddress;
-    DWORD ReservedNumberOfFpoTableEntries;
-    PFPO_DATA ReservedFpoTableEntries;
-    DWORD SizeOfCoffSymbols;
-    PIMAGE_COFF_SYMBOLS_HEADER CoffSymbols;
-    DWORD ReservedSizeOfCodeViewSymbols;
-    PVOID ReservedCodeViewSymbols;
-    PSTR ImageFilePath;
-    PSTR ImageFileName;
-    PSTR ReservedDebugFilePath;
-    DWORD ReservedTimeDateStamp;
-    WINBOOL ReservedRomImage;
-    PIMAGE_DEBUG_DIRECTORY ReservedDebugDirectory;
-    DWORD ReservedNumberOfDebugDirectories;
-    DWORD ReservedOriginalFunctionTableBaseAddress;
-    DWORD Reserved[2];
-  } IMAGE_DEBUG_INFORMATION,*PIMAGE_DEBUG_INFORMATION;
-
-  PIMAGE_DEBUG_INFORMATION IMAGEAPI MapDebugInformation(HANDLE FileHandle,PSTR FileName,PSTR SymbolPath,DWORD ImageBase);
-  WINBOOL IMAGEAPI UnmapDebugInformation(PIMAGE_DEBUG_INFORMATION DebugInfo);
-#endif
-
-  typedef WINBOOL (CALLBACK *PENUMDIRTREE_CALLBACK)(LPCSTR FilePath,PVOID CallerData);
-
-  WINBOOL IMAGEAPI SearchTreeForFile(PSTR RootPath,PSTR InputPathName,PSTR OutputPathBuffer);
-  WINBOOL IMAGEAPI EnumDirTree(HANDLE hProcess,PSTR RootPath,PSTR InputPathName,PSTR OutputPathBuffer,PENUMDIRTREE_CALLBACK Callback,PVOID CallbackData);
-  WINBOOL IMAGEAPI MakeSureDirectoryPathExists(PCSTR DirPath);
-
-#define UNDNAME_COMPLETE (0x0000)
-#define UNDNAME_NO_LEADING_UNDERSCORES (0x0001)
-#define UNDNAME_NO_MS_KEYWORDS (0x0002)
-#define UNDNAME_NO_FUNCTION_RETURNS (0x0004)
-#define UNDNAME_NO_ALLOCATION_MODEL (0x0008)
-#define UNDNAME_NO_ALLOCATION_LANGUAGE (0x0010)
-#define UNDNAME_NO_MS_THISTYPE (0x0020)
-#define UNDNAME_NO_CV_THISTYPE (0x0040)
-#define UNDNAME_NO_THISTYPE (0x0060)
-#define UNDNAME_NO_ACCESS_SPECIFIERS (0x0080)
-#define UNDNAME_NO_THROW_SIGNATURES (0x0100)
-#define UNDNAME_NO_MEMBER_TYPE (0x0200)
-#define UNDNAME_NO_RETURN_UDT_MODEL (0x0400)
-#define UNDNAME_32_BIT_DECODE (0x0800)
-#define UNDNAME_NAME_ONLY (0x1000)
-
-#define UNDNAME_NO_ARGUMENTS (0x2000)
-#define UNDNAME_NO_SPECIAL_SYMS (0x4000)
-
-  DWORD IMAGEAPI WINAPI UnDecorateSymbolName(PCSTR DecoratedName,PSTR UnDecoratedName,DWORD UndecoratedLength,DWORD Flags);
-
-#define DBHHEADER_DEBUGDIRS 0x1
-
-  typedef struct _MODLOAD_DATA {
-    DWORD ssize;
-    DWORD ssig;
-    PVOID data;
-    DWORD size;
-    DWORD flags;
-  } MODLOAD_DATA,*PMODLOAD_DATA;
-
-  typedef enum {
-    AddrMode1616,
-    AddrMode1632,
-    AddrModeReal,
-    AddrModeFlat
-  } ADDRESS_MODE;
-
-  typedef struct _tagADDRESS64 {
-    DWORD64 Offset;
-    WORD Segment;
-    ADDRESS_MODE Mode;
-  } ADDRESS64,*LPADDRESS64;
-
-#ifdef _IMAGEHLP64
-#define ADDRESS ADDRESS64
-#define LPADDRESS LPADDRESS64
-#else
-  typedef struct _tagADDRESS {
-    DWORD Offset;
-    WORD Segment;
-    ADDRESS_MODE Mode;
-  } ADDRESS,*LPADDRESS;
-
-  static __inline void Address32To64(LPADDRESS a32,LPADDRESS64 a64) {
-    a64->Offset = (ULONG64)(LONG64)(LONG)a32->Offset;
-    a64->Segment = a32->Segment;
-    a64->Mode = a32->Mode;
-  }
-
-  static __inline void Address64To32(LPADDRESS64 a64,LPADDRESS a32) {
-    a32->Offset = (ULONG)a64->Offset;
-    a32->Segment = a64->Segment;
-    a32->Mode = a64->Mode;
-  }
-#endif
-
-  typedef struct _KDHELP64 {
-    DWORD64 Thread;
-    DWORD ThCallbackStack;
-    DWORD ThCallbackBStore;
-    DWORD NextCallback;
-    DWORD FramePointer;
-    DWORD64 KiCallUserMode;
-    DWORD64 KeUserCallbackDispatcher;
-    DWORD64 SystemRangeStart;
-    DWORD64 KiUserExceptionDispatcher;
-    DWORD64 StackBase;
-    DWORD64 StackLimit;
-    DWORD64 Reserved[5];
-  } KDHELP64,*PKDHELP64;
-
-#ifdef _IMAGEHLP64
-#define KDHELP KDHELP64
-#define PKDHELP PKDHELP64
-#else
-  typedef struct _KDHELP {
-    DWORD Thread;
-    DWORD ThCallbackStack;
-    DWORD NextCallback;
-    DWORD FramePointer;
-    DWORD KiCallUserMode;
-    DWORD KeUserCallbackDispatcher;
-    DWORD SystemRangeStart;
-    DWORD ThCallbackBStore;
-    DWORD KiUserExceptionDispatcher;
-    DWORD StackBase;
-    DWORD StackLimit;
-    DWORD Reserved[5];
-  } KDHELP,*PKDHELP;
-
-  static __inline void KdHelp32To64(PKDHELP p32,PKDHELP64 p64) {
-    p64->Thread = p32->Thread;
-    p64->ThCallbackStack = p32->ThCallbackStack;
-    p64->NextCallback = p32->NextCallback;
-    p64->FramePointer = p32->FramePointer;
-    p64->KiCallUserMode = p32->KiCallUserMode;
-    p64->KeUserCallbackDispatcher = p32->KeUserCallbackDispatcher;
-    p64->SystemRangeStart = p32->SystemRangeStart;
-    p64->KiUserExceptionDispatcher = p32->KiUserExceptionDispatcher;
-    p64->StackBase = p32->StackBase;
-    p64->StackLimit = p32->StackLimit;
-  }
-#endif
-
-  typedef struct _tagSTACKFRAME64 {
-    ADDRESS64 AddrPC;
-    ADDRESS64 AddrReturn;
-    ADDRESS64 AddrFrame;
-    ADDRESS64 AddrStack;
-    ADDRESS64 AddrBStore;
-    PVOID FuncTableEntry;
-    DWORD64 Params[4];
-    WINBOOL Far;
-    WINBOOL Virtual;
-    DWORD64 Reserved[3];
-    KDHELP64 KdHelp;
-  } STACKFRAME64,*LPSTACKFRAME64;
-
-#ifdef _IMAGEHLP64
-#define STACKFRAME STACKFRAME64
-#define LPSTACKFRAME LPSTACKFRAME64
-#else
-  typedef struct _tagSTACKFRAME {
-    ADDRESS AddrPC;
-    ADDRESS AddrReturn;
-    ADDRESS AddrFrame;
-    ADDRESS AddrStack;
-    PVOID FuncTableEntry;
-    DWORD Params[4];
-    WINBOOL Far;
-    WINBOOL Virtual;
-    DWORD Reserved[3];
-    KDHELP KdHelp;
-    ADDRESS AddrBStore;
-  } STACKFRAME,*LPSTACKFRAME;
-#endif
-
-  typedef WINBOOL (WINAPI *PREAD_PROCESS_MEMORY_ROUTINE64)(HANDLE hProcess,DWORD64 qwBaseAddress,PVOID lpBuffer,DWORD nSize,LPDWORD lpNumberOfBytesRead);
-  typedef PVOID (WINAPI *PFUNCTION_TABLE_ACCESS_ROUTINE64)(HANDLE hProcess,DWORD64 AddrBase);
-  typedef DWORD64 (WINAPI *PGET_MODULE_BASE_ROUTINE64)(HANDLE hProcess,DWORD64 Address);
-  typedef DWORD64 (WINAPI *PTRANSLATE_ADDRESS_ROUTINE64)(HANDLE hProcess,HANDLE hThread,LPADDRESS64 lpaddr);
-
-  WINBOOL IMAGEAPI StackWalk64(DWORD MachineType,HANDLE hProcess,HANDLE hThread,LPSTACKFRAME64 StackFrame,PVOID ContextRecord,PREAD_PROCESS_MEMORY_ROUTINE64 ReadMemoryRoutine,PFUNCTION_TABLE_ACCESS_ROUTINE64 FunctionTableAccessRoutine,PGET_MODULE_BASE_ROUTINE64 GetModuleBaseRoutine,PTRANSLATE_ADDRESS_ROUTINE64 TranslateAddress);
-
-#ifdef _IMAGEHLP64
-#define PREAD_PROCESS_MEMORY_ROUTINE PREAD_PROCESS_MEMORY_ROUTINE64
-#define PFUNCTION_TABLE_ACCESS_ROUTINE PFUNCTION_TABLE_ACCESS_ROUTINE64
-#define PGET_MODULE_BASE_ROUTINE PGET_MODULE_BASE_ROUTINE64
-#define PTRANSLATE_ADDRESS_ROUTINE PTRANSLATE_ADDRESS_ROUTINE64
-#define StackWalk StackWalk64
-#else
-  typedef WINBOOL (WINAPI *PREAD_PROCESS_MEMORY_ROUTINE)(HANDLE hProcess,DWORD lpBaseAddress,PVOID lpBuffer,DWORD nSize,PDWORD lpNumberOfBytesRead);
-  typedef PVOID (WINAPI *PFUNCTION_TABLE_ACCESS_ROUTINE)(HANDLE hProcess,DWORD AddrBase);
-  typedef DWORD (WINAPI *PGET_MODULE_BASE_ROUTINE)(HANDLE hProcess,DWORD Address);
-  typedef DWORD (WINAPI *PTRANSLATE_ADDRESS_ROUTINE)(HANDLE hProcess,HANDLE hThread,LPADDRESS lpaddr);
-
-  WINBOOL IMAGEAPI StackWalk(DWORD MachineType,HANDLE hProcess,HANDLE hThread,LPSTACKFRAME StackFrame,PVOID ContextRecord,PREAD_PROCESS_MEMORY_ROUTINE ReadMemoryRoutine,PFUNCTION_TABLE_ACCESS_ROUTINE FunctionTableAccessRoutine,PGET_MODULE_BASE_ROUTINE GetModuleBaseRoutine,PTRANSLATE_ADDRESS_ROUTINE TranslateAddress);
-#endif
-
-#define API_VERSION_NUMBER 11
-
-  typedef struct API_VERSION {
-    USHORT MajorVersion;
-    USHORT MinorVersion;
-    USHORT Revision;
-    USHORT Reserved;
-  } API_VERSION,*LPAPI_VERSION;
-
-  LPAPI_VERSION IMAGEAPI ImagehlpApiVersion(VOID);
-  LPAPI_VERSION IMAGEAPI ImagehlpApiVersionEx(LPAPI_VERSION AppVersion);
-  DWORD IMAGEAPI GetTimestampForLoadedLibrary(HMODULE Module);
-
-  typedef WINBOOL (CALLBACK *PSYM_ENUMMODULES_CALLBACK64)(PCSTR ModuleName,DWORD64 BaseOfDll,PVOID UserContext);
-  typedef WINBOOL (CALLBACK *PSYM_ENUMSYMBOLS_CALLBACK64)(PCSTR SymbolName,DWORD64 SymbolAddress,ULONG SymbolSize,PVOID UserContext);
-  typedef WINBOOL (CALLBACK *PSYM_ENUMSYMBOLS_CALLBACK64W)(PCWSTR SymbolName,DWORD64 SymbolAddress,ULONG SymbolSize,PVOID UserContext);
-  typedef WINBOOL (CALLBACK *PENUMLOADED_MODULES_CALLBACK64)(PCSTR ModuleName,DWORD64 ModuleBase,ULONG ModuleSize,PVOID UserContext);
-  typedef WINBOOL (CALLBACK *PSYMBOL_REGISTERED_CALLBACK64)(HANDLE hProcess,ULONG ActionCode,ULONG64 CallbackData,ULONG64 UserContext);
-  typedef PVOID (CALLBACK *PSYMBOL_FUNCENTRY_CALLBACK)(HANDLE hProcess,DWORD AddrBase,PVOID UserContext);
-  typedef PVOID (CALLBACK *PSYMBOL_FUNCENTRY_CALLBACK64)(HANDLE hProcess,ULONG64 AddrBase,ULONG64 UserContext);
-
-#ifdef _IMAGEHLP64
-#define PSYM_ENUMMODULES_CALLBACK PSYM_ENUMMODULES_CALLBACK64
-#define PSYM_ENUMSYMBOLS_CALLBACK PSYM_ENUMSYMBOLS_CALLBACK64
-#define PSYM_ENUMSYMBOLS_CALLBACKW PSYM_ENUMSYMBOLS_CALLBACK64W
-#define PENUMLOADED_MODULES_CALLBACK PENUMLOADED_MODULES_CALLBACK64
-#define PSYMBOL_REGISTERED_CALLBACK PSYMBOL_REGISTERED_CALLBACK64
-#define PSYMBOL_FUNCENTRY_CALLBACK PSYMBOL_FUNCENTRY_CALLBACK64
-#else
-  typedef WINBOOL (CALLBACK *PSYM_ENUMMODULES_CALLBACK)(PCSTR ModuleName,ULONG BaseOfDll,PVOID UserContext);
-  typedef WINBOOL (CALLBACK *PSYM_ENUMSYMBOLS_CALLBACK)(PCSTR SymbolName,ULONG SymbolAddress,ULONG SymbolSize,PVOID UserContext);
-  typedef WINBOOL (CALLBACK *PSYM_ENUMSYMBOLS_CALLBACKW)(PCWSTR SymbolName,ULONG SymbolAddress,ULONG SymbolSize,PVOID UserContext);
-  typedef WINBOOL (CALLBACK *PENUMLOADED_MODULES_CALLBACK)(PCSTR ModuleName,ULONG ModuleBase,ULONG ModuleSize,PVOID UserContext);
-  typedef WINBOOL (CALLBACK *PSYMBOL_REGISTERED_CALLBACK)(HANDLE hProcess,ULONG ActionCode,PVOID CallbackData,PVOID UserContext);
-#endif
-
-#define SYMFLAG_VALUEPRESENT 0x00000001
-#define SYMFLAG_REGISTER 0x00000008
-#define SYMFLAG_REGREL 0x00000010
-#define SYMFLAG_FRAMEREL 0x00000020
-#define SYMFLAG_PARAMETER 0x00000040
-#define SYMFLAG_LOCAL 0x00000080
-#define SYMFLAG_CONSTANT 0x00000100
-#define SYMFLAG_EXPORT 0x00000200
-#define SYMFLAG_FORWARDER 0x00000400
-#define SYMFLAG_FUNCTION 0x00000800
-#define SYMFLAG_VIRTUAL 0x00001000
-#define SYMFLAG_THUNK 0x00002000
-#define SYMFLAG_TLSREL 0x00004000
-
-  typedef enum {
-    SymNone = 0,
-    SymCoff,
-    SymCv,
-    SymPdb,
-    SymExport,
-    SymDeferred,
-    SymSym,
-    SymDia,
-    SymVirtual,
-    NumSymTypes
-  } SYM_TYPE;
-
-  typedef struct _IMAGEHLP_SYMBOL64 {
-    DWORD SizeOfStruct;
-    DWORD64 Address;
-    DWORD Size;
-    DWORD Flags;
-    DWORD MaxNameLength;
-    CHAR Name[1];
-  } IMAGEHLP_SYMBOL64,*PIMAGEHLP_SYMBOL64;
-
-  typedef struct _IMAGEHLP_SYMBOL64_PACKAGE {
-    IMAGEHLP_SYMBOL64 sym;
-    CHAR name[MAX_SYM_NAME + 1];
-  } IMAGEHLP_SYMBOL64_PACKAGE,*PIMAGEHLP_SYMBOL64_PACKAGE;
-
-#ifdef _IMAGEHLP64
-
-#define IMAGEHLP_SYMBOL IMAGEHLP_SYMBOL64
-#define PIMAGEHLP_SYMBOL PIMAGEHLP_SYMBOL64
-#define IMAGEHLP_SYMBOL_PACKAGE IMAGEHLP_SYMBOL64_PACKAGE
-#define PIMAGEHLP_SYMBOL_PACKAGE PIMAGEHLP_SYMBOL64_PACKAGE
-#else
-
-  typedef struct _IMAGEHLP_SYMBOL {
-    DWORD SizeOfStruct;
-    DWORD Address;
-    DWORD Size;
-    DWORD Flags;
-    DWORD MaxNameLength;
-    CHAR Name[1];
-  } IMAGEHLP_SYMBOL,*PIMAGEHLP_SYMBOL;
-
-  typedef struct _IMAGEHLP_SYMBOL_PACKAGE {
-    IMAGEHLP_SYMBOL sym;
-    CHAR name[MAX_SYM_NAME + 1];
-  } IMAGEHLP_SYMBOL_PACKAGE,*PIMAGEHLP_SYMBOL_PACKAGE;
-#endif
-
-  typedef struct _IMAGEHLP_MODULE64 {
-    DWORD SizeOfStruct;
-    DWORD64 BaseOfImage;
-    DWORD ImageSize;
-    DWORD TimeDateStamp;
-    DWORD CheckSum;
-    DWORD NumSyms;
-    SYM_TYPE SymType;
-    CHAR ModuleName[32];
-    CHAR ImageName[256];
-    CHAR LoadedImageName[256];
-    CHAR LoadedPdbName[256];
-    DWORD CVSig;
-    CHAR CVData[MAX_PATH*3];
-    DWORD PdbSig;
-    GUID PdbSig70;
-    DWORD PdbAge;
-    WINBOOL PdbUnmatched;
-    WINBOOL DbgUnmatched;
-    WINBOOL LineNumbers;
-    WINBOOL GlobalSymbols;
-    WINBOOL TypeInfo;
-    WINBOOL SourceIndexed;
-    WINBOOL Publics;
-  } IMAGEHLP_MODULE64,*PIMAGEHLP_MODULE64;
-
-  typedef struct _IMAGEHLP_MODULE64W {
-    DWORD SizeOfStruct;
-    DWORD64 BaseOfImage;
-    DWORD ImageSize;
-    DWORD TimeDateStamp;
-    DWORD CheckSum;
-    DWORD NumSyms;
-    SYM_TYPE SymType;
-    WCHAR ModuleName[32];
-    WCHAR ImageName[256];
-    WCHAR LoadedImageName[256];
-    WCHAR LoadedPdbName[256];
-    DWORD CVSig;
-    WCHAR CVData[MAX_PATH*3];
-    DWORD PdbSig;
-    GUID PdbSig70;
-    DWORD PdbAge;
-    WINBOOL PdbUnmatched;
-    WINBOOL DbgUnmatched;
-    WINBOOL LineNumbers;
-    WINBOOL GlobalSymbols;
-    WINBOOL TypeInfo;
-    WINBOOL SourceIndexed;
-    WINBOOL Publics;
-  } IMAGEHLP_MODULEW64,*PIMAGEHLP_MODULEW64;
-
-#ifdef _IMAGEHLP64
-#define IMAGEHLP_MODULE IMAGEHLP_MODULE64
-#define PIMAGEHLP_MODULE PIMAGEHLP_MODULE64
-#define IMAGEHLP_MODULEW IMAGEHLP_MODULEW64
-#define PIMAGEHLP_MODULEW PIMAGEHLP_MODULEW64
-#else
-  typedef struct _IMAGEHLP_MODULE {
-    DWORD SizeOfStruct;
-    DWORD BaseOfImage;
-    DWORD ImageSize;
-    DWORD TimeDateStamp;
-    DWORD CheckSum;
-    DWORD NumSyms;
-    SYM_TYPE SymType;
-    CHAR ModuleName[32];
-    CHAR ImageName[256];
-    CHAR LoadedImageName[256];
-  } IMAGEHLP_MODULE,*PIMAGEHLP_MODULE;
-
-  typedef struct _IMAGEHLP_MODULEW {
-    DWORD SizeOfStruct;
-    DWORD BaseOfImage;
-    DWORD ImageSize;
-    DWORD TimeDateStamp;
-    DWORD CheckSum;
-    DWORD NumSyms;
-    SYM_TYPE SymType;
-    WCHAR ModuleName[32];
-    WCHAR ImageName[256];
-    WCHAR LoadedImageName[256];
-  } IMAGEHLP_MODULEW,*PIMAGEHLP_MODULEW;
-#endif
-
-  typedef struct _IMAGEHLP_LINE64 {
-    DWORD SizeOfStruct;
-    PVOID Key;
-    DWORD LineNumber;
-    PCHAR FileName;
-    DWORD64 Address;
-  } IMAGEHLP_LINE64,*PIMAGEHLP_LINE64;
-
-#ifdef _IMAGEHLP64
-#define IMAGEHLP_LINE IMAGEHLP_LINE64
-#define PIMAGEHLP_LINE PIMAGEHLP_LINE64
-#else
-  typedef struct _IMAGEHLP_LINE {
-    DWORD SizeOfStruct;
-    PVOID Key;
-    DWORD LineNumber;
-    PCHAR FileName;
-    DWORD Address;
-  } IMAGEHLP_LINE,*PIMAGEHLP_LINE;
-#endif
-
-  typedef struct _SOURCEFILE {
-    DWORD64 ModBase;
-    PCHAR FileName;
-  } SOURCEFILE,*PSOURCEFILE;
-
-#define CBA_DEFERRED_SYMBOL_LOAD_START 0x00000001
-#define CBA_DEFERRED_SYMBOL_LOAD_COMPLETE 0x00000002
-#define CBA_DEFERRED_SYMBOL_LOAD_FAILURE 0x00000003
-#define CBA_SYMBOLS_UNLOADED 0x00000004
-#define CBA_DUPLICATE_SYMBOL 0x00000005
-#define CBA_READ_MEMORY 0x00000006
-#define CBA_DEFERRED_SYMBOL_LOAD_CANCEL 0x00000007
-#define CBA_SET_OPTIONS 0x00000008
-#define CBA_EVENT 0x00000010
-#define CBA_DEFERRED_SYMBOL_LOAD_PARTIAL 0x00000020
-#define CBA_DEBUG_INFO 0x10000000
-
-  typedef struct _IMAGEHLP_CBA_READ_MEMORY {
-    DWORD64 addr;
-    PVOID buf;
-    DWORD bytes;
-    DWORD *bytesread;
-  } IMAGEHLP_CBA_READ_MEMORY,*PIMAGEHLP_CBA_READ_MEMORY;
-
-  enum {
-    sevInfo = 0,
-    sevProblem,
-    sevAttn,
-    sevFatal,
-    sevMax
-  };
-
-  typedef struct _IMAGEHLP_CBA_EVENT {
-    DWORD severity;
-    DWORD code;
-    PCHAR desc;
-    PVOID object;
-  } IMAGEHLP_CBA_EVENT,*PIMAGEHLP_CBA_EVENT;
-
-  typedef struct _IMAGEHLP_DEFERRED_SYMBOL_LOAD64 {
-    DWORD SizeOfStruct;
-    DWORD64 BaseOfImage;
-    DWORD CheckSum;
-    DWORD TimeDateStamp;
-    CHAR FileName[MAX_PATH];
-    BOOLEAN Reparse;
-    HANDLE hFile;
-    DWORD Flags;
-  } IMAGEHLP_DEFERRED_SYMBOL_LOAD64,*PIMAGEHLP_DEFERRED_SYMBOL_LOAD64;
-
-#define DSLFLAG_MISMATCHED_PDB 0x1
-#define DSLFLAG_MISMATCHED_DBG 0x2
-
-#ifdef _IMAGEHLP64
-#define IMAGEHLP_DEFERRED_SYMBOL_LOAD IMAGEHLP_DEFERRED_SYMBOL_LOAD64
-#define PIMAGEHLP_DEFERRED_SYMBOL_LOAD PIMAGEHLP_DEFERRED_SYMBOL_LOAD64
-#else
-  typedef struct _IMAGEHLP_DEFERRED_SYMBOL_LOAD {
-    DWORD SizeOfStruct;
-    DWORD BaseOfImage;
-    DWORD CheckSum;
-    DWORD TimeDateStamp;
-    CHAR FileName[MAX_PATH];
-    BOOLEAN Reparse;
-    HANDLE hFile;
-  } IMAGEHLP_DEFERRED_SYMBOL_LOAD,*PIMAGEHLP_DEFERRED_SYMBOL_LOAD;
-#endif
-
-  typedef struct _IMAGEHLP_DUPLICATE_SYMBOL64 {
-    DWORD SizeOfStruct;
-    DWORD NumberOfDups;
-    PIMAGEHLP_SYMBOL64 Symbol;
-    DWORD SelectedSymbol;
-  } IMAGEHLP_DUPLICATE_SYMBOL64,*PIMAGEHLP_DUPLICATE_SYMBOL64;
-
-#ifdef _IMAGEHLP64
-#define IMAGEHLP_DUPLICATE_SYMBOL IMAGEHLP_DUPLICATE_SYMBOL64
-#define PIMAGEHLP_DUPLICATE_SYMBOL PIMAGEHLP_DUPLICATE_SYMBOL64
-#else
-  typedef struct _IMAGEHLP_DUPLICATE_SYMBOL {
-    DWORD SizeOfStruct;
-    DWORD NumberOfDups;
-    PIMAGEHLP_SYMBOL Symbol;
-    DWORD SelectedSymbol;
-  } IMAGEHLP_DUPLICATE_SYMBOL,*PIMAGEHLP_DUPLICATE_SYMBOL;
-#endif
-
-  WINBOOL IMAGEAPI SymSetParentWindow(HWND hwnd);
-  PCHAR IMAGEAPI SymSetHomeDirectory(HANDLE hProcess,PCSTR dir);
-  PCHAR IMAGEAPI SymGetHomeDirectory(DWORD type,PSTR dir,size_t size);
-
-  typedef enum {
-    hdBase = 0,
-    hdSym,
-    hdSrc,
-    hdMax
-  };
-
-#define SYMOPT_CASE_INSENSITIVE 0x00000001
-#define SYMOPT_UNDNAME 0x00000002
-#define SYMOPT_DEFERRED_LOADS 0x00000004
-#define SYMOPT_NO_CPP 0x00000008
-#define SYMOPT_LOAD_LINES 0x00000010
-#define SYMOPT_OMAP_FIND_NEAREST 0x00000020
-#define SYMOPT_LOAD_ANYTHING 0x00000040
-#define SYMOPT_IGNORE_CVREC 0x00000080
-#define SYMOPT_NO_UNQUALIFIED_LOADS 0x00000100
-#define SYMOPT_FAIL_CRITICAL_ERRORS 0x00000200
-#define SYMOPT_EXACT_SYMBOLS 0x00000400
-#define SYMOPT_ALLOW_ABSOLUTE_SYMBOLS 0x00000800
-#define SYMOPT_IGNORE_NT_SYMPATH 0x00001000
-#define SYMOPT_INCLUDE_32BIT_MODULES 0x00002000
-#define SYMOPT_PUBLICS_ONLY 0x00004000
-#define SYMOPT_NO_PUBLICS 0x00008000
-#define SYMOPT_AUTO_PUBLICS 0x00010000
-#define SYMOPT_NO_IMAGE_SEARCH 0x00020000
-#define SYMOPT_SECURE 0x00040000
-#define SYMOPT_NO_PROMPTS 0x00080000
-
-#define SYMOPT_DEBUG 0x80000000
-
-  DWORD IMAGEAPI SymSetOptions(DWORD SymOptions);
-  DWORD IMAGEAPI SymGetOptions(VOID);
-  WINBOOL IMAGEAPI SymCleanup(HANDLE hProcess);
-  WINBOOL IMAGEAPI SymMatchString(PCSTR string,PCSTR expression,WINBOOL fCase);
-
-  typedef WINBOOL (CALLBACK *PSYM_ENUMSOURCEFILES_CALLBACK)(PSOURCEFILE pSourceFile,PVOID UserContext);
-#define PSYM_ENUMSOURCFILES_CALLBACK PSYM_ENUMSOURCEFILES_CALLBACK
-
-  WINBOOL IMAGEAPI SymEnumSourceFiles(HANDLE hProcess,ULONG64 ModBase,PCSTR Mask,PSYM_ENUMSOURCEFILES_CALLBACK cbSrcFiles,PVOID UserContext);
-  WINBOOL IMAGEAPI SymEnumerateModules64(HANDLE hProcess,PSYM_ENUMMODULES_CALLBACK64 EnumModulesCallback,PVOID UserContext);
-
-#ifdef _IMAGEHLP64
-#define SymEnumerateModules SymEnumerateModules64
-#else
-  WINBOOL IMAGEAPI SymEnumerateModules(HANDLE hProcess,PSYM_ENUMMODULES_CALLBACK EnumModulesCallback,PVOID UserContext);
-#endif
-
-  WINBOOL IMAGEAPI SymEnumerateSymbols64(HANDLE hProcess,DWORD64 BaseOfDll,PSYM_ENUMSYMBOLS_CALLBACK64 EnumSymbolsCallback,PVOID UserContext);
-  WINBOOL IMAGEAPI SymEnumerateSymbolsW64(HANDLE hProcess,DWORD64 BaseOfDll,PSYM_ENUMSYMBOLS_CALLBACK64W EnumSymbolsCallback,PVOID UserContext);
-
-#ifdef _IMAGEHLP64
-#define SymEnumerateSymbols SymEnumerateSymbols64
-#define SymEnumerateSymbolsW SymEnumerateSymbolsW64
-#else
-  WINBOOL IMAGEAPI SymEnumerateSymbols(HANDLE hProcess,DWORD BaseOfDll,PSYM_ENUMSYMBOLS_CALLBACK EnumSymbolsCallback,PVOID UserContext);
-  WINBOOL IMAGEAPI SymEnumerateSymbolsW(HANDLE hProcess,DWORD BaseOfDll,PSYM_ENUMSYMBOLS_CALLBACKW EnumSymbolsCallback,PVOID UserContext);
-#endif
-
-  WINBOOL IMAGEAPI EnumerateLoadedModules64(HANDLE hProcess,PENUMLOADED_MODULES_CALLBACK64 EnumLoadedModulesCallback,PVOID UserContext);
-
-#ifdef _IMAGEHLP64
-#define EnumerateLoadedModules EnumerateLoadedModules64
-#else
-  WINBOOL IMAGEAPI EnumerateLoadedModules(HANDLE hProcess,PENUMLOADED_MODULES_CALLBACK EnumLoadedModulesCallback,PVOID UserContext);
-#endif
-
-  PVOID IMAGEAPI SymFunctionTableAccess64(HANDLE hProcess,DWORD64 AddrBase);
-
-#ifdef _IMAGEHLP64
-#define SymFunctionTableAccess SymFunctionTableAccess64
-#else
-  PVOID IMAGEAPI SymFunctionTableAccess(HANDLE hProcess,DWORD AddrBase);
-#endif
-
-  WINBOOL IMAGEAPI SymGetModuleInfo64(HANDLE hProcess,DWORD64 qwAddr,PIMAGEHLP_MODULE64 ModuleInfo);
-  WINBOOL IMAGEAPI SymGetModuleInfoW64(HANDLE hProcess,DWORD64 qwAddr,PIMAGEHLP_MODULEW64 ModuleInfo);
-
-#ifdef _IMAGEHLP64
-#define SymGetModuleInfo SymGetModuleInfo64
-#define SymGetModuleInfoW SymGetModuleInfoW64
-#else
-  WINBOOL IMAGEAPI SymGetModuleInfo(HANDLE hProcess,DWORD dwAddr,PIMAGEHLP_MODULE ModuleInfo);
-  WINBOOL IMAGEAPI SymGetModuleInfoW(HANDLE hProcess,DWORD dwAddr,PIMAGEHLP_MODULEW ModuleInfo);
-#endif
-
-  DWORD64 IMAGEAPI SymGetModuleBase64(HANDLE hProcess,DWORD64 qwAddr);
-
-#ifdef _IMAGEHLP64
-#define SymGetModuleBase SymGetModuleBase64
-#else
-  DWORD IMAGEAPI SymGetModuleBase(HANDLE hProcess,DWORD dwAddr);
-#endif
-
-  WINBOOL IMAGEAPI SymGetSymNext64(HANDLE hProcess,PIMAGEHLP_SYMBOL64 Symbol);
-
-#ifdef _IMAGEHLP64
-#define SymGetSymNext SymGetSymNext64
-#else
-  WINBOOL IMAGEAPI SymGetSymNext(HANDLE hProcess,PIMAGEHLP_SYMBOL Symbol);
-#endif
-
-  WINBOOL IMAGEAPI SymGetSymPrev64(HANDLE hProcess,PIMAGEHLP_SYMBOL64 Symbol);
-
-#ifdef _IMAGEHLP64
-#define SymGetSymPrev SymGetSymPrev64
-#else
-  WINBOOL IMAGEAPI SymGetSymPrev(HANDLE hProcess,PIMAGEHLP_SYMBOL Symbol);
-#endif
-
-  typedef struct _SRCCODEINFO {
-    DWORD SizeOfStruct;
-    PVOID Key;
-    DWORD64 ModBase;
-    CHAR Obj[MAX_PATH + 1];
-    CHAR FileName[MAX_PATH + 1];
-    DWORD LineNumber;
-    DWORD64 Address;
-  } SRCCODEINFO,*PSRCCODEINFO;
-
-  typedef WINBOOL (CALLBACK *PSYM_ENUMLINES_CALLBACK)(PSRCCODEINFO LineInfo,PVOID UserContext);
-
-  WINBOOL IMAGEAPI SymEnumLines(HANDLE hProcess,ULONG64 Base,PCSTR Obj,PCSTR File,PSYM_ENUMLINES_CALLBACK EnumLinesCallback,PVOID UserContext);
-  WINBOOL IMAGEAPI SymGetLineFromAddr64(HANDLE hProcess,DWORD64 qwAddr,PDWORD pdwDisplacement,PIMAGEHLP_LINE64 Line64);
-
-#ifdef _IMAGEHLP64
-#define SymGetLineFromAddr SymGetLineFromAddr64
-#else
-  WINBOOL IMAGEAPI SymGetLineFromAddr(HANDLE hProcess,DWORD dwAddr,PDWORD pdwDisplacement,PIMAGEHLP_LINE Line);
-#endif
-
-  WINBOOL IMAGEAPI SymGetLineFromName64(HANDLE hProcess,PCSTR ModuleName,PCSTR FileName,DWORD dwLineNumber,PLONG plDisplacement,PIMAGEHLP_LINE64 Line);
-
-#ifdef _IMAGEHLP64
-#define SymGetLineFromName SymGetLineFromName64
-#else
-  WINBOOL IMAGEAPI SymGetLineFromName(HANDLE hProcess,PCSTR ModuleName,PCSTR FileName,DWORD dwLineNumber,PLONG plDisplacement,PIMAGEHLP_LINE Line);
-#endif
-
-  WINBOOL IMAGEAPI SymGetLineNext64(HANDLE hProcess,PIMAGEHLP_LINE64 Line);
-
-#ifdef _IMAGEHLP64
-#define SymGetLineNext SymGetLineNext64
-#else
-  WINBOOL IMAGEAPI SymGetLineNext(HANDLE hProcess,PIMAGEHLP_LINE Line);
-#endif
-
-  WINBOOL IMAGEAPI SymGetLinePrev64(HANDLE hProcess,PIMAGEHLP_LINE64 Line);
-
-#ifdef _IMAGEHLP64
-#define SymGetLinePrev SymGetLinePrev64
-#else
-  WINBOOL IMAGEAPI SymGetLinePrev(HANDLE hProcess,PIMAGEHLP_LINE Line);
-#endif
-
-  WINBOOL IMAGEAPI SymMatchFileName(PCSTR FileName,PCSTR Match,PSTR *FileNameStop,PSTR *MatchStop);
-  WINBOOL IMAGEAPI SymInitialize(HANDLE hProcess,PCSTR UserSearchPath,WINBOOL fInvadeProcess);
-  WINBOOL IMAGEAPI SymGetSearchPath(HANDLE hProcess,PSTR SearchPath,DWORD SearchPathLength);
-  WINBOOL IMAGEAPI SymSetSearchPath(HANDLE hProcess,PCSTR SearchPath);
-  DWORD64 IMAGEAPI SymLoadModule64(HANDLE hProcess,HANDLE hFile,PSTR ImageName,PSTR ModuleName,DWORD64 BaseOfDll,DWORD SizeOfDll);
-
-#define SLMFLAG_VIRTUAL 0x1
-
-  DWORD64 IMAGEAPI SymLoadModuleEx(HANDLE hProcess,HANDLE hFile,PCSTR ImageName,PCSTR ModuleName,DWORD64 BaseOfDll,DWORD DllSize,PMODLOAD_DATA Data,DWORD Flags);
-
-#ifdef _IMAGEHLP64
-#define SymLoadModule SymLoadModule64
-#else
-  DWORD IMAGEAPI SymLoadModule(HANDLE hProcess,HANDLE hFile,PCSTR ImageName,PCSTR ModuleName,DWORD BaseOfDll,DWORD SizeOfDll);
-#endif
-
-  WINBOOL IMAGEAPI SymUnloadModule64(HANDLE hProcess,DWORD64 BaseOfDll);
-
-#ifdef _IMAGEHLP64
-#define SymUnloadModule SymUnloadModule64
-#else
-  WINBOOL IMAGEAPI SymUnloadModule(HANDLE hProcess,DWORD BaseOfDll);
-#endif
-
-  WINBOOL IMAGEAPI SymUnDName64(PIMAGEHLP_SYMBOL64 sym,PSTR UnDecName,DWORD UnDecNameLength);
-
-#ifdef _IMAGEHLP64
-#define SymUnDName SymUnDName64
-#else
-  WINBOOL IMAGEAPI SymUnDName(PIMAGEHLP_SYMBOL sym,PSTR UnDecName,DWORD UnDecNameLength);
-#endif
-
-  WINBOOL IMAGEAPI SymRegisterCallback64(HANDLE hProcess,PSYMBOL_REGISTERED_CALLBACK64 CallbackFunction,ULONG64 UserContext);
-
-  WINBOOL IMAGEAPI SymRegisterFunctionEntryCallback64(HANDLE hProcess,PSYMBOL_FUNCENTRY_CALLBACK64 CallbackFunction,ULONG64 UserContext);
-
-#ifdef _IMAGEHLP64
-#define SymRegisterCallback SymRegisterCallback64
-#define SymRegisterFunctionEntryCallback SymRegisterFunctionEntryCallback64
-#else
-  WINBOOL IMAGEAPI SymRegisterCallback(HANDLE hProcess,PSYMBOL_REGISTERED_CALLBACK CallbackFunction,PVOID UserContext);
-  WINBOOL IMAGEAPI SymRegisterFunctionEntryCallback(HANDLE hProcess,PSYMBOL_FUNCENTRY_CALLBACK CallbackFunction,PVOID UserContext);
-#endif
-
-  typedef struct _IMAGEHLP_SYMBOL_SRC {
-    DWORD sizeofstruct;
-    DWORD type;
-    char file[MAX_PATH];
-  } IMAGEHLP_SYMBOL_SRC,*PIMAGEHLP_SYMBOL_SRC;
-
-  typedef struct _MODULE_TYPE_INFO {
-    USHORT dataLength;
-    USHORT leaf;
-    BYTE data[1];
-  } MODULE_TYPE_INFO,*PMODULE_TYPE_INFO;
-
-  typedef struct _SYMBOL_INFO {
-    ULONG SizeOfStruct;
-    ULONG TypeIndex;
-    ULONG64 Reserved[2];
-    ULONG info;
-    ULONG Size;
-    ULONG64 ModBase;
-    ULONG Flags;
-    ULONG64 Value;
-    ULONG64 Address;
-    ULONG Register;
-    ULONG Scope;
-    ULONG Tag;
-    ULONG NameLen;
-    ULONG MaxNameLen;
-    CHAR Name[1];
-  } SYMBOL_INFO,*PSYMBOL_INFO;
-
-  typedef struct _SYMBOL_INFO_PACKAGE {
-    SYMBOL_INFO si;
-    CHAR name[MAX_SYM_NAME + 1];
-  } SYMBOL_INFO_PACKAGE,*PSYMBOL_INFO_PACKAGE;
-
-  typedef struct _IMAGEHLP_STACK_FRAME {
-    ULONG64 InstructionOffset;
-    ULONG64 ReturnOffset;
-    ULONG64 FrameOffset;
-    ULONG64 StackOffset;
-    ULONG64 BackingStoreOffset;
-    ULONG64 FuncTableEntry;
-    ULONG64 Params[4];
-    ULONG64 Reserved[5];
-    WINBOOL Virtual;
-    ULONG Reserved2;
-  } IMAGEHLP_STACK_FRAME,*PIMAGEHLP_STACK_FRAME;
-
-  typedef VOID IMAGEHLP_CONTEXT,*PIMAGEHLP_CONTEXT;
-
-  WINBOOL IMAGEAPI SymSetContext(HANDLE hProcess,PIMAGEHLP_STACK_FRAME StackFrame,PIMAGEHLP_CONTEXT Context);
-  WINBOOL IMAGEAPI SymFromAddr(HANDLE hProcess,DWORD64 Address,PDWORD64 Displacement,PSYMBOL_INFO Symbol);
-  WINBOOL IMAGEAPI SymFromToken(HANDLE hProcess,DWORD64 Base,DWORD Token,PSYMBOL_INFO Symbol);
-  WINBOOL IMAGEAPI SymFromName(HANDLE hProcess,PCSTR Name,PSYMBOL_INFO Symbol);
-
-  typedef WINBOOL (CALLBACK *PSYM_ENUMERATESYMBOLS_CALLBACK)(PSYMBOL_INFO pSymInfo,ULONG SymbolSize,PVOID UserContext);
-
-  WINBOOL IMAGEAPI SymEnumSymbols(HANDLE hProcess,ULONG64 BaseOfDll,PCSTR Mask,PSYM_ENUMERATESYMBOLS_CALLBACK EnumSymbolsCallback,PVOID UserContext);
-  WINBOOL IMAGEAPI SymEnumSymbolsForAddr(HANDLE hProcess,DWORD64 Address,PSYM_ENUMERATESYMBOLS_CALLBACK EnumSymbolsCallback,PVOID UserContext);
-
-#define SYMENUMFLAG_FULLSRCH 1
-#define SYMENUMFLAG_SPEEDSRCH 2
-
-  typedef enum _IMAGEHLP_SYMBOL_TYPE_INFO {
-    TI_GET_SYMTAG,
-    TI_GET_SYMNAME,
-    TI_GET_LENGTH,
-    TI_GET_TYPE,
-    TI_GET_TYPEID,
-    TI_GET_BASETYPE,
-    TI_GET_ARRAYINDEXTYPEID,
-    TI_FINDCHILDREN,
-    TI_GET_DATAKIND,
-    TI_GET_ADDRESSOFFSET,
-    TI_GET_OFFSET,
-    TI_GET_VALUE,
-    TI_GET_COUNT,
-    TI_GET_CHILDRENCOUNT,
-    TI_GET_BITPOSITION,
-    TI_GET_VIRTUALBASECLASS,
-    TI_GET_VIRTUALTABLESHAPEID,
-    TI_GET_VIRTUALBASEPOINTEROFFSET,
-    TI_GET_CLASSPARENTID,
-    TI_GET_NESTED,
-    TI_GET_SYMINDEX,
-    TI_GET_LEXICALPARENT,
-    TI_GET_ADDRESS,
-    TI_GET_THISADJUST,
-    TI_GET_UDTKIND,
-    TI_IS_EQUIV_TO,
-    TI_GET_CALLING_CONVENTION
-  } IMAGEHLP_SYMBOL_TYPE_INFO;
-
-  typedef struct _TI_FINDCHILDREN_PARAMS {
-    ULONG Count;
-    ULONG Start;
-    ULONG ChildId[1];
-  } TI_FINDCHILDREN_PARAMS;
-
-  WINBOOL IMAGEAPI SymGetTypeInfo(HANDLE hProcess,DWORD64 ModBase,ULONG TypeId,IMAGEHLP_SYMBOL_TYPE_INFO GetType,PVOID pInfo);
-  WINBOOL IMAGEAPI SymEnumTypes(HANDLE hProcess,ULONG64 BaseOfDll,PSYM_ENUMERATESYMBOLS_CALLBACK EnumSymbolsCallback,PVOID UserContext);
-  WINBOOL IMAGEAPI SymGetTypeFromName(HANDLE hProcess,ULONG64 BaseOfDll,PCSTR Name,PSYMBOL_INFO Symbol);
-  WINBOOL IMAGEAPI SymAddSymbol(HANDLE hProcess,ULONG64 BaseOfDll,PCSTR Name,DWORD64 Address,DWORD Size,DWORD Flags);
-  WINBOOL IMAGEAPI SymDeleteSymbol(HANDLE hProcess,ULONG64 BaseOfDll,PCSTR Name,DWORD64 Address,DWORD Flags);
-
-  typedef WINBOOL (WINAPI *PDBGHELP_CREATE_USER_DUMP_CALLBACK)(DWORD DataType,PVOID *Data,LPDWORD DataLength,PVOID UserData);
-
-  WINBOOL WINAPI DbgHelpCreateUserDump(LPCSTR FileName,PDBGHELP_CREATE_USER_DUMP_CALLBACK Callback,PVOID UserData);
-  WINBOOL WINAPI DbgHelpCreateUserDumpW(LPCWSTR FileName,PDBGHELP_CREATE_USER_DUMP_CALLBACK Callback,PVOID UserData);
-  WINBOOL IMAGEAPI SymGetSymFromAddr64(HANDLE hProcess,DWORD64 qwAddr,PDWORD64 pdwDisplacement,PIMAGEHLP_SYMBOL64 Symbol);
-
-#ifdef _IMAGEHLP64
-#define SymGetSymFromAddr SymGetSymFromAddr64
-#else
-  WINBOOL IMAGEAPI SymGetSymFromAddr(HANDLE hProcess,DWORD dwAddr,PDWORD pdwDisplacement,PIMAGEHLP_SYMBOL Symbol);
-#endif
-
-  WINBOOL IMAGEAPI SymGetSymFromName64(HANDLE hProcess,PCSTR Name,PIMAGEHLP_SYMBOL64 Symbol);
-
-#ifdef _IMAGEHLP64
-#define SymGetSymFromName SymGetSymFromName64
-#else
-  WINBOOL IMAGEAPI SymGetSymFromName(HANDLE hProcess,PCSTR Name,PIMAGEHLP_SYMBOL Symbol);
-#endif
-
-  DBHLP_DEPRECIATED WINBOOL IMAGEAPI FindFileInPath(HANDLE hprocess,PCSTR SearchPath,PCSTR FileName,PVOID id,DWORD two,DWORD three,DWORD flags,PSTR FilePath);
-  DBHLP_DEPRECIATED WINBOOL IMAGEAPI FindFileInSearchPath(HANDLE hprocess,PCSTR SearchPath,PCSTR FileName,DWORD one,DWORD two,DWORD three,PSTR FilePath);
-  DBHLP_DEPRECIATED WINBOOL IMAGEAPI SymEnumSym(HANDLE hProcess,ULONG64 BaseOfDll,PSYM_ENUMERATESYMBOLS_CALLBACK EnumSymbolsCallback,PVOID UserContext);
-
-#define SYMF_OMAP_GENERATED 0x00000001
-#define SYMF_OMAP_MODIFIED 0x00000002
-#define SYMF_REGISTER 0x00000008
-#define SYMF_REGREL 0x00000010
-#define SYMF_FRAMEREL 0x00000020
-#define SYMF_PARAMETER 0x00000040
-#define SYMF_LOCAL 0x00000080
-#define SYMF_CONSTANT 0x00000100
-#define SYMF_EXPORT 0x00000200
-#define SYMF_FORWARDER 0x00000400
-#define SYMF_FUNCTION 0x00000800
-#define SYMF_VIRTUAL 0x00001000
-#define SYMF_THUNK 0x00002000
-#define SYMF_TLSREL 0x00004000
-
-#define IMAGEHLP_SYMBOL_INFO_VALUEPRESENT 1
-#define IMAGEHLP_SYMBOL_INFO_REGISTER SYMF_REGISTER
-#define IMAGEHLP_SYMBOL_INFO_REGRELATIVE SYMF_REGREL
-#define IMAGEHLP_SYMBOL_INFO_FRAMERELATIVE SYMF_FRAMEREL
-#define IMAGEHLP_SYMBOL_INFO_PARAMETER SYMF_PARAMETER
-#define IMAGEHLP_SYMBOL_INFO_LOCAL SYMF_LOCAL
-#define IMAGEHLP_SYMBOL_INFO_CONSTANT SYMF_CONSTANT
-#define IMAGEHLP_SYMBOL_FUNCTION SYMF_FUNCTION
-#define IMAGEHLP_SYMBOL_VIRTUAL SYMF_VIRTUAL
-#define IMAGEHLP_SYMBOL_THUNK SYMF_THUNK
-#define IMAGEHLP_SYMBOL_INFO_TLSRELATIVE SYMF_TLSREL
-
-#include <pshpack4.h>
-
-#define MINIDUMP_SIGNATURE ('PMDM')
-#define MINIDUMP_VERSION (42899)
-  typedef DWORD RVA;
-  typedef ULONG64 RVA64;
-
-  typedef struct _MINIDUMP_LOCATION_DESCRIPTOR {
-    ULONG32 DataSize;
-    RVA Rva;
-  } MINIDUMP_LOCATION_DESCRIPTOR;
-
-  typedef struct _MINIDUMP_LOCATION_DESCRIPTOR64 {
-    ULONG64 DataSize;
-    RVA64 Rva;
-  } MINIDUMP_LOCATION_DESCRIPTOR64;
-
-  typedef struct _MINIDUMP_MEMORY_DESCRIPTOR {
-    ULONG64 StartOfMemoryRange;
-    MINIDUMP_LOCATION_DESCRIPTOR Memory;
-  } MINIDUMP_MEMORY_DESCRIPTOR,*PMINIDUMP_MEMORY_DESCRIPTOR;
-
-  typedef struct _MINIDUMP_MEMORY_DESCRIPTOR64 {
-    ULONG64 StartOfMemoryRange;
-    ULONG64 DataSize;
-  } MINIDUMP_MEMORY_DESCRIPTOR64,*PMINIDUMP_MEMORY_DESCRIPTOR64;
-
-  typedef struct _MINIDUMP_HEADER {
-    ULONG32 Signature;
-    ULONG32 Version;
-    ULONG32 NumberOfStreams;
-    RVA StreamDirectoryRva;
-    ULONG32 CheckSum;
-    __MINGW_EXTENSION union {
-      ULONG32 Reserved;
-      ULONG32 TimeDateStamp;
-    };
-    ULONG64 Flags;
-  } MINIDUMP_HEADER,*PMINIDUMP_HEADER;
-
-  typedef struct _MINIDUMP_DIRECTORY {
-    ULONG32 StreamType;
-    MINIDUMP_LOCATION_DESCRIPTOR Location;
-  } MINIDUMP_DIRECTORY,*PMINIDUMP_DIRECTORY;
-
-  typedef struct _MINIDUMP_STRING {
-    ULONG32 Length;
-    WCHAR Buffer[0];
-  } MINIDUMP_STRING,*PMINIDUMP_STRING;
-
-  typedef enum _MINIDUMP_STREAM_TYPE {
-    UnusedStream = 0,
-    ReservedStream0 = 1,
-    ReservedStream1 = 2,
-    ThreadListStream = 3,
-    ModuleListStream = 4,
-    MemoryListStream = 5,
-    ExceptionStream = 6,
-    SystemInfoStream = 7,
-    ThreadExListStream = 8,
-    Memory64ListStream = 9,
-    CommentStreamA = 10,
-    CommentStreamW = 11,
-    HandleDataStream = 12,
-    FunctionTableStream = 13,
-    UnloadedModuleListStream = 14,
-    MiscInfoStream = 15,
-    LastReservedStream = 0xffff
-  } MINIDUMP_STREAM_TYPE;
-
-  typedef union _CPU_INFORMATION {
-    struct {
-      ULONG32 VendorId[3];
-      ULONG32 VersionInformation;
-      ULONG32 FeatureInformation;
-      ULONG32 AMDExtendedCpuFeatures;
-    } X86CpuInfo;
-    struct {
-      ULONG64 ProcessorFeatures[2];
-    } OtherCpuInfo;
-  } CPU_INFORMATION,*PCPU_INFORMATION;
-
-  typedef struct _MINIDUMP_SYSTEM_INFO {
-    USHORT ProcessorArchitecture;
-    USHORT ProcessorLevel;
-    USHORT ProcessorRevision;
-    __MINGW_EXTENSION union {
-      USHORT Reserved0;
-      __MINGW_EXTENSION struct {
-	UCHAR NumberOfProcessors;
-	UCHAR ProductType;
-      };
-    };
-    ULONG32 MajorVersion;
-    ULONG32 MinorVersion;
-    ULONG32 BuildNumber;
-    ULONG32 PlatformId;
-    RVA CSDVersionRva;
-    __MINGW_EXTENSION union {
-      ULONG32 Reserved1;
-      __MINGW_EXTENSION struct {
-	USHORT SuiteMask;
-	USHORT Reserved2;
-      };
-    };
-    CPU_INFORMATION Cpu;
-  } MINIDUMP_SYSTEM_INFO,*PMINIDUMP_SYSTEM_INFO;
-
-  C_ASSERT(sizeof(((PPROCESS_INFORMATION)0)->dwThreadId)==4);
-
-  typedef struct _MINIDUMP_THREAD {
-    ULONG32 ThreadId;
-    ULONG32 SuspendCount;
-    ULONG32 PriorityClass;
-    ULONG32 Priority;
-    ULONG64 Teb;
-    MINIDUMP_MEMORY_DESCRIPTOR Stack;
-    MINIDUMP_LOCATION_DESCRIPTOR ThreadContext;
-  } MINIDUMP_THREAD,*PMINIDUMP_THREAD;
-
-  typedef struct _MINIDUMP_THREAD_LIST {
-    ULONG32 NumberOfThreads;
-    MINIDUMP_THREAD Threads[0];
-  } MINIDUMP_THREAD_LIST,*PMINIDUMP_THREAD_LIST;
-
-  typedef struct _MINIDUMP_THREAD_EX {
-    ULONG32 ThreadId;
-    ULONG32 SuspendCount;
-    ULONG32 PriorityClass;
-    ULONG32 Priority;
-    ULONG64 Teb;
-    MINIDUMP_MEMORY_DESCRIPTOR Stack;
-    MINIDUMP_LOCATION_DESCRIPTOR ThreadContext;
-    MINIDUMP_MEMORY_DESCRIPTOR BackingStore;
-  } MINIDUMP_THREAD_EX,*PMINIDUMP_THREAD_EX;
-
-  typedef struct _MINIDUMP_THREAD_EX_LIST {
-    ULONG32 NumberOfThreads;
-    MINIDUMP_THREAD_EX Threads[0];
-  } MINIDUMP_THREAD_EX_LIST,*PMINIDUMP_THREAD_EX_LIST;
-
-  typedef struct _MINIDUMP_EXCEPTION {
-    ULONG32 ExceptionCode;
-    ULONG32 ExceptionFlags;
-    ULONG64 ExceptionRecord;
-    ULONG64 ExceptionAddress;
-    ULONG32 NumberParameters;
-    ULONG32 __unusedAlignment;
-    ULONG64 ExceptionInformation[EXCEPTION_MAXIMUM_PARAMETERS];
-  } MINIDUMP_EXCEPTION,*PMINIDUMP_EXCEPTION;
-
-  typedef struct MINIDUMP_EXCEPTION_STREAM {
-    ULONG32 ThreadId;
-    ULONG32 __alignment;
-    MINIDUMP_EXCEPTION ExceptionRecord;
-    MINIDUMP_LOCATION_DESCRIPTOR ThreadContext;
-  } MINIDUMP_EXCEPTION_STREAM,*PMINIDUMP_EXCEPTION_STREAM;
-
-  typedef struct _MINIDUMP_MODULE {
-    ULONG64 BaseOfImage;
-    ULONG32 SizeOfImage;
-    ULONG32 CheckSum;
-    ULONG32 TimeDateStamp;
-    RVA ModuleNameRva;
-    VS_FIXEDFILEINFO VersionInfo;
-    MINIDUMP_LOCATION_DESCRIPTOR CvRecord;
-    MINIDUMP_LOCATION_DESCRIPTOR MiscRecord;
-    ULONG64 Reserved0;
-    ULONG64 Reserved1;
-  } MINIDUMP_MODULE,*PMINIDUMP_MODULE;
-
-  typedef struct _MINIDUMP_MODULE_LIST {
-    ULONG32 NumberOfModules;
-    MINIDUMP_MODULE Modules[0];
-  } MINIDUMP_MODULE_LIST,*PMINIDUMP_MODULE_LIST;
-
-  typedef struct _MINIDUMP_MEMORY_LIST {
-    ULONG32 NumberOfMemoryRanges;
-    MINIDUMP_MEMORY_DESCRIPTOR MemoryRanges[0];
-  } MINIDUMP_MEMORY_LIST,*PMINIDUMP_MEMORY_LIST;
-
-  typedef struct _MINIDUMP_MEMORY64_LIST {
-    ULONG64 NumberOfMemoryRanges;
-    RVA64 BaseRva;
-    MINIDUMP_MEMORY_DESCRIPTOR64 MemoryRanges[0];
-  } MINIDUMP_MEMORY64_LIST,*PMINIDUMP_MEMORY64_LIST;
-
-  typedef struct _MINIDUMP_EXCEPTION_INFORMATION {
-    DWORD ThreadId;
-    PEXCEPTION_POINTERS ExceptionPointers;
-    WINBOOL ClientPointers;
-  } MINIDUMP_EXCEPTION_INFORMATION,*PMINIDUMP_EXCEPTION_INFORMATION;
-
-  typedef struct _MINIDUMP_EXCEPTION_INFORMATION64 {
-    DWORD ThreadId;
-    ULONG64 ExceptionRecord;
-    ULONG64 ContextRecord;
-    WINBOOL ClientPointers;
-  } MINIDUMP_EXCEPTION_INFORMATION64,*PMINIDUMP_EXCEPTION_INFORMATION64;
-
-  typedef struct _MINIDUMP_HANDLE_DESCRIPTOR {
-    ULONG64 Handle;
-    RVA TypeNameRva;
-    RVA ObjectNameRva;
-    ULONG32 Attributes;
-    ULONG32 GrantedAccess;
-    ULONG32 HandleCount;
-    ULONG32 PointerCount;
-  } MINIDUMP_HANDLE_DESCRIPTOR,*PMINIDUMP_HANDLE_DESCRIPTOR;
-
-  typedef struct _MINIDUMP_HANDLE_DATA_STREAM {
-    ULONG32 SizeOfHeader;
-    ULONG32 SizeOfDescriptor;
-    ULONG32 NumberOfDescriptors;
-    ULONG32 Reserved;
-  } MINIDUMP_HANDLE_DATA_STREAM,*PMINIDUMP_HANDLE_DATA_STREAM;
-
-  typedef struct _MINIDUMP_FUNCTION_TABLE_DESCRIPTOR {
-    ULONG64 MinimumAddress;
-    ULONG64 MaximumAddress;
-    ULONG64 BaseAddress;
-    ULONG32 EntryCount;
-    ULONG32 SizeOfAlignPad;
-  } MINIDUMP_FUNCTION_TABLE_DESCRIPTOR,*PMINIDUMP_FUNCTION_TABLE_DESCRIPTOR;
-
-  typedef struct _MINIDUMP_FUNCTION_TABLE_STREAM {
-    ULONG32 SizeOfHeader;
-    ULONG32 SizeOfDescriptor;
-    ULONG32 SizeOfNativeDescriptor;
-    ULONG32 SizeOfFunctionEntry;
-    ULONG32 NumberOfDescriptors;
-    ULONG32 SizeOfAlignPad;
-  } MINIDUMP_FUNCTION_TABLE_STREAM,*PMINIDUMP_FUNCTION_TABLE_STREAM;
-
-  typedef struct _MINIDUMP_UNLOADED_MODULE {
-    ULONG64 BaseOfImage;
-    ULONG32 SizeOfImage;
-    ULONG32 CheckSum;
-    ULONG32 TimeDateStamp;
-    RVA ModuleNameRva;
-  } MINIDUMP_UNLOADED_MODULE,*PMINIDUMP_UNLOADED_MODULE;
-
-  typedef struct _MINIDUMP_UNLOADED_MODULE_LIST {
-    ULONG32 SizeOfHeader;
-    ULONG32 SizeOfEntry;
-    ULONG32 NumberOfEntries;
-  } MINIDUMP_UNLOADED_MODULE_LIST,*PMINIDUMP_UNLOADED_MODULE_LIST;
-
-#define MINIDUMP_MISC1_PROCESS_ID 0x00000001
-#define MINIDUMP_MISC1_PROCESS_TIMES 0x00000002
-#define MINIDUMP_MISC1_PROCESSOR_POWER_INFO 0x00000004
-
-  typedef struct _MINIDUMP_MISC_INFO {
-    ULONG32 SizeOfInfo;
-    ULONG32 Flags1;
-    ULONG32 ProcessId;
-    ULONG32 ProcessCreateTime;
-    ULONG32 ProcessUserTime;
-    ULONG32 ProcessKernelTime;
-  } MINIDUMP_MISC_INFO,*PMINIDUMP_MISC_INFO;
-
-  typedef struct _MINIDUMP_USER_RECORD {
-    ULONG32 Type;
-    MINIDUMP_LOCATION_DESCRIPTOR Memory;
-  } MINIDUMP_USER_RECORD,*PMINIDUMP_USER_RECORD;
-
-  typedef struct _MINIDUMP_USER_STREAM {
-    ULONG32 Type;
-    ULONG BufferSize;
-    PVOID Buffer;
-  } MINIDUMP_USER_STREAM,*PMINIDUMP_USER_STREAM;
-
-  typedef struct _MINIDUMP_USER_STREAM_INFORMATION {
-    ULONG UserStreamCount;
-    PMINIDUMP_USER_STREAM UserStreamArray;
-  } MINIDUMP_USER_STREAM_INFORMATION,*PMINIDUMP_USER_STREAM_INFORMATION;
-
-  typedef enum _MINIDUMP_CALLBACK_TYPE {
-    ModuleCallback,
-    ThreadCallback,
-    ThreadExCallback,
-    IncludeThreadCallback,
-    IncludeModuleCallback,
-    MemoryCallback
-  } MINIDUMP_CALLBACK_TYPE;
-
-  typedef struct _MINIDUMP_THREAD_CALLBACK {
-    ULONG ThreadId;
-    HANDLE ThreadHandle;
-    CONTEXT Context;
-    ULONG SizeOfContext;
-    ULONG64 StackBase;
-    ULONG64 StackEnd;
-  } MINIDUMP_THREAD_CALLBACK,*PMINIDUMP_THREAD_CALLBACK;
-
-  typedef struct _MINIDUMP_THREAD_EX_CALLBACK {
-    ULONG ThreadId;
-    HANDLE ThreadHandle;
-    CONTEXT Context;
-    ULONG SizeOfContext;
-    ULONG64 StackBase;
-    ULONG64 StackEnd;
-    ULONG64 BackingStoreBase;
-    ULONG64 BackingStoreEnd;
-  } MINIDUMP_THREAD_EX_CALLBACK,*PMINIDUMP_THREAD_EX_CALLBACK;
-
-  typedef struct _MINIDUMP_INCLUDE_THREAD_CALLBACK {
-    ULONG ThreadId;
-  } MINIDUMP_INCLUDE_THREAD_CALLBACK,*PMINIDUMP_INCLUDE_THREAD_CALLBACK;
-
-  typedef enum _THREAD_WRITE_FLAGS {
-    ThreadWriteThread              = 0x0001,
-    ThreadWriteStack               = 0x0002,
-    ThreadWriteContext             = 0x0004,
-    ThreadWriteBackingStore        = 0x0008,
-    ThreadWriteInstructionWindow   = 0x0010,
-    ThreadWriteThreadData          = 0x0020,
-    ThreadWriteThreadInfo          = 0x0040
-  } THREAD_WRITE_FLAGS;
-
-  typedef struct _MINIDUMP_MODULE_CALLBACK {
-    PWCHAR FullPath;
-    ULONG64 BaseOfImage;
-    ULONG SizeOfImage;
-    ULONG CheckSum;
-    ULONG TimeDateStamp;
-    VS_FIXEDFILEINFO VersionInfo;
-    PVOID CvRecord;
-    ULONG SizeOfCvRecord;
-    PVOID MiscRecord;
-    ULONG SizeOfMiscRecord;
-  } MINIDUMP_MODULE_CALLBACK,*PMINIDUMP_MODULE_CALLBACK;
-
-  typedef struct _MINIDUMP_INCLUDE_MODULE_CALLBACK {
-    ULONG64 BaseOfImage;
-  } MINIDUMP_INCLUDE_MODULE_CALLBACK,*PMINIDUMP_INCLUDE_MODULE_CALLBACK;
-
-  typedef enum _MODULE_WRITE_FLAGS {
-    ModuleWriteModule          = 0x0001,
-    ModuleWriteDataSeg         = 0x0002,
-    ModuleWriteMiscRecord      = 0x0004,
-    ModuleWriteCvRecord        = 0x0008,
-    ModuleReferencedByMemory   = 0x0010,
-    ModuleWriteTlsData         = 0x0020,
-    ModuleWriteCodeSegs        = 0x0040
-  } MODULE_WRITE_FLAGS;
-
-  typedef enum _MINIDUMP_SECONDARY_FLAGS {
-    MiniSecondaryWithoutPowerInfo   = 0x00000001
-  } MINIDUMP_SECONDARY_FLAGS;
-
-  typedef struct _MINIDUMP_CALLBACK_INPUT {
-    ULONG ProcessId;
-    HANDLE ProcessHandle;
-    ULONG CallbackType;
-    __MINGW_EXTENSION union {
-      MINIDUMP_THREAD_CALLBACK Thread;
-      MINIDUMP_THREAD_EX_CALLBACK ThreadEx;
-      MINIDUMP_MODULE_CALLBACK Module;
-      MINIDUMP_INCLUDE_THREAD_CALLBACK IncludeThread;
-      MINIDUMP_INCLUDE_MODULE_CALLBACK IncludeModule;
-    };
-  } MINIDUMP_CALLBACK_INPUT,*PMINIDUMP_CALLBACK_INPUT;
-
-typedef struct _MINIDUMP_MEMORY_INFO {
-  ULONG64 BaseAddress;
-  ULONG64 AllocationBase;
-  ULONG32 AllocationProtect;
-  ULONG32 __alignment1;
-  ULONG64 RegionSize;
-  ULONG32 State;
-  ULONG32 Protect;
-  ULONG32 Type;
-  ULONG32 __alignment2;
-} MINIDUMP_MEMORY_INFO, *PMINIDUMP_MEMORY_INFO;
-
-typedef struct _MINIDUMP_MISC_INFO_2 {
-  ULONG32 SizeOfInfo;
-  ULONG32 Flags1;
-  ULONG32 ProcessId;
-  ULONG32 ProcessCreateTime;
-  ULONG32 ProcessUserTime;
-  ULONG32 ProcessKernelTime;
-  ULONG32 ProcessorMaxMhz;
-  ULONG32 ProcessorCurrentMhz;
-  ULONG32 ProcessorMhzLimit;
-  ULONG32 ProcessorMaxIdleState;
-  ULONG32 ProcessorCurrentIdleState;
-} MINIDUMP_MISC_INFO_2, *PMINIDUMP_MISC_INFO_2;
-
-typedef struct _MINIDUMP_MEMORY_INFO_LIST {
-  ULONG   SizeOfHeader;
-  ULONG   SizeOfEntry;
-  ULONG64 NumberOfEntries;
-} MINIDUMP_MEMORY_INFO_LIST, *PMINIDUMP_MEMORY_INFO_LIST;
-
-  typedef struct _MINIDUMP_CALLBACK_OUTPUT {
-    __MINGW_EXTENSION union {
-      ULONG ModuleWriteFlags;
-      ULONG ThreadWriteFlags;
-      ULONG SecondaryFlags;
-      __MINGW_EXTENSION struct {
-	ULONG64 MemoryBase;
-	ULONG MemorySize;
-      };
-      __MINGW_EXTENSION struct {
-	WINBOOL CheckCancel;
-	WINBOOL Cancel;
-      };
-      HANDLE Handle;
-    };
-    __MINGW_EXTENSION struct {
-      MINIDUMP_MEMORY_INFO VmRegion;
-      WINBOOL Continue;
-    };
-    HRESULT Status;
-  } MINIDUMP_CALLBACK_OUTPUT, *PMINIDUMP_CALLBACK_OUTPUT;
-
-  typedef enum _MINIDUMP_TYPE {
-    MiniDumpNormal                           = 0x00000000,
-    MiniDumpWithDataSegs                     = 0x00000001,
-    MiniDumpWithFullMemory                   = 0x00000002,
-    MiniDumpWithHandleData                   = 0x00000004,
-    MiniDumpFilterMemory                     = 0x00000008,
-    MiniDumpScanMemory                       = 0x00000010,
-    MiniDumpWithUnloadedModules              = 0x00000020,
-    MiniDumpWithIndirectlyReferencedMemory   = 0x00000040,
-    MiniDumpFilterModulePaths                = 0x00000080,
-    MiniDumpWithProcessThreadData            = 0x00000100,
-    MiniDumpWithPrivateReadWriteMemory       = 0x00000200,
-    MiniDumpWithoutOptionalData              = 0x00000400,
-    MiniDumpWithFullMemoryInfo               = 0x00000800,
-    MiniDumpWithThreadInfo                   = 0x00001000,
-    MiniDumpWithCodeSegs                     = 0x00002000,
-    MiniDumpWithoutAuxiliaryState            = 0x00004000,
-    MiniDumpWithFullAuxiliaryState           = 0x00008000,
-    MiniDumpWithPrivateWriteCopyMemory       = 0x00010000,
-    MiniDumpIgnoreInaccessibleMemory         = 0x00020000,
-    MiniDumpWithTokenInformation             = 0x00040000
-  } MINIDUMP_TYPE;
-
-#define MINIDUMP_THREAD_INFO_ERROR_THREAD    0x00000001
-#define MINIDUMP_THREAD_INFO_WRITING_THREAD  0x00000002
-#define MINIDUMP_THREAD_INFO_EXITED_THREAD   0x00000004
-#define MINIDUMP_THREAD_INFO_INVALID_INFO    0x00000008
-#define MINIDUMP_THREAD_INFO_INVALID_CONTEXT 0x00000010
-#define MINIDUMP_THREAD_INFO_INVALID_TEB     0x00000020
-
-typedef struct _MINIDUMP_THREAD_INFO {
-  ULONG32 ThreadId;
-  ULONG32 DumpFlags;
-  ULONG32 DumpError;
-  ULONG32 ExitStatus;
-  ULONG64 CreateTime;
-  ULONG64 ExitTime;
-  ULONG64 KernelTime;
-  ULONG64 UserTime;
-  ULONG64 StartAddress;
-  ULONG64 Affinity;
-} MINIDUMP_THREAD_INFO, *PMINIDUMP_THREAD_INFO;
-
-typedef struct _MINIDUMP_THREAD_INFO_LIST {
-  ULONG   SizeOfHeader;
-  ULONG   SizeOfEntry;
-  ULONG   NumberOfEntries; /* FIXME: msdn says ULONG64 */
-} MINIDUMP_THREAD_INFO_LIST, *PMINIDUMP_THREAD_INFO_LIST;
-
-  typedef WINBOOL (WINAPI *MINIDUMP_CALLBACK_ROUTINE)(PVOID CallbackParam,CONST PMINIDUMP_CALLBACK_INPUT CallbackInput,PMINIDUMP_CALLBACK_OUTPUT CallbackOutput);
-
-  typedef struct _MINIDUMP_CALLBACK_INFORMATION {
-    MINIDUMP_CALLBACK_ROUTINE CallbackRoutine;
-    PVOID CallbackParam;
-  } MINIDUMP_CALLBACK_INFORMATION,*PMINIDUMP_CALLBACK_INFORMATION;
-
-#define RVA_TO_ADDR(Mapping,Rva) ((PVOID)(((ULONG_PTR) (Mapping)) + (Rva)))
-
-  WINBOOL WINAPI MiniDumpWriteDump(HANDLE hProcess,DWORD ProcessId,HANDLE hFile,MINIDUMP_TYPE DumpType,CONST PMINIDUMP_EXCEPTION_INFORMATION ExceptionParam,CONST PMINIDUMP_USER_STREAM_INFORMATION UserStreamParam,CONST PMINIDUMP_CALLBACK_INFORMATION CallbackParam);
-  WINBOOL WINAPI MiniDumpReadDumpStream(PVOID BaseOfDump,ULONG StreamNumber,PMINIDUMP_DIRECTORY *Dir,PVOID *StreamPointer,ULONG *StreamSize);
-
-#include <poppack.h>
+#include <mingw_inc/_dbg_common.h>
 
 #ifdef __cplusplus
 }
diff --git a/mingw-w64-headers/include/mingw_inc/_dbg_LOAD_IMAGE.h b/mingw-w64-headers/include/mingw_inc/_dbg_LOAD_IMAGE.h
new file mode 100644
index 0000000..817b219
--- /dev/null
+++ b/mingw-w64-headers/include/mingw_inc/_dbg_LOAD_IMAGE.h
@@ -0,0 +1,43 @@
+#pragma once
+
+#ifndef WINAPI
+#define WINAPI __stdcall
+#endif
+
+#define IMAGEAPI DECLSPEC_IMPORT WINAPI
+#define DBHLP_DEPRECIATED __declspec(deprecated)
+
+#define DBHLPAPI IMAGEAPI
+
+#define IMAGE_SEPARATION (64*1024)
+
+  typedef struct _LOADED_IMAGE {
+    PSTR ModuleName;
+    HANDLE hFile;
+    PUCHAR MappedAddress;
+#ifdef _IMAGEHLP64
+    PIMAGE_NT_HEADERS64 FileHeader;
+#else
+    PIMAGE_NT_HEADERS32 FileHeader;
+#endif
+    PIMAGE_SECTION_HEADER LastRvaSection;
+    ULONG NumberOfSections;
+    PIMAGE_SECTION_HEADER Sections;
+    ULONG Characteristics;
+    BOOLEAN fSystemImage;
+    BOOLEAN fDOSImage;
+    BOOLEAN fReadOnly;
+    UCHAR Version;
+    LIST_ENTRY Links;
+    ULONG SizeOfImage;
+  } LOADED_IMAGE,*PLOADED_IMAGE;
+
+#define MAX_SYM_NAME 2000
+
+  typedef struct _MODLOAD_DATA {
+    DWORD ssize;
+    DWORD ssig;
+    PVOID data;
+    DWORD size;
+    DWORD flags;
+  } MODLOAD_DATA,*PMODLOAD_DATA;
diff --git a/mingw-w64-headers/include/mingw_inc/_dbg_common.h b/mingw-w64-headers/include/mingw_inc/_dbg_common.h
new file mode 100644
index 0000000..c7a2587
--- /dev/null
+++ b/mingw-w64-headers/include/mingw_inc/_dbg_common.h
@@ -0,0 +1,1977 @@
+#pragma once
+
+  typedef WINBOOL (CALLBACK *PFIND_DEBUG_FILE_CALLBACK)(HANDLE FileHandle,PCSTR FileName,PVOID CallerData);
+  typedef WINBOOL (CALLBACK *PFIND_DEBUG_FILE_CALLBACKW)(HANDLE FileHandle,PCWSTR FileName,PVOID CallerData);
+  typedef WINBOOL (CALLBACK *PFINDFILEINPATHCALLBACK)(PCSTR filename,PVOID context);
+  typedef WINBOOL (CALLBACK *PFINDFILEINPATHCALLBACKW)(PCWSTR filename,PVOID context);
+  typedef WINBOOL (CALLBACK *PFIND_EXE_FILE_CALLBACK)(HANDLE FileHandle,PCSTR FileName,PVOID CallerData);
+  typedef WINBOOL (CALLBACK *PFIND_EXE_FILE_CALLBACKW)(HANDLE FileHandle,PCWSTR FileName,PVOID CallerData);
+
+  typedef WINBOOL (WINAPI *PSYMBOLSERVERPROC)(LPCSTR,LPCSTR,PVOID,DWORD,DWORD,LPSTR);
+  typedef WINBOOL (WINAPI *PSYMBOLSERVEROPENPROC)(VOID);
+  typedef WINBOOL (WINAPI *PSYMBOLSERVERCLOSEPROC)(VOID);
+  typedef WINBOOL (WINAPI *PSYMBOLSERVERSETOPTIONSPROC)(UINT_PTR,ULONG64);
+  typedef WINBOOL (CALLBACK WINAPI *PSYMBOLSERVERCALLBACKPROC)(UINT_PTR action,ULONG64 data,ULONG64 context);
+  typedef UINT_PTR (WINAPI *PSYMBOLSERVERGETOPTIONSPROC)();
+  typedef WINBOOL (WINAPI *PSYMBOLSERVERPINGPROC)(LPCSTR);
+
+  HANDLE IMAGEAPI FindDebugInfoFile(PCSTR FileName,PCSTR SymbolPath,PSTR DebugFilePath);
+  HANDLE IMAGEAPI FindDebugInfoFileEx(PCSTR FileName,PCSTR SymbolPath,PSTR DebugFilePath,PFIND_DEBUG_FILE_CALLBACK Callback,PVOID CallerData);
+  HANDLE IMAGEAPI FindDebugInfoFileExW(PCWSTR FileName,PCWSTR SymbolPath,PWSTR DebugFilePath,PFIND_DEBUG_FILE_CALLBACKW Callback,PVOID CallerData);
+  WINBOOL IMAGEAPI SymFindFileInPath(HANDLE hprocess,PCSTR SearchPath,PCSTR FileName,PVOID id,DWORD two,DWORD three,DWORD flags,LPSTR FoundFile,PFINDFILEINPATHCALLBACK callback,PVOID context);
+  WINBOOL IMAGEAPI SymFindFileInPathW(HANDLE hprocess,PCWSTR SearchPath,PCWSTR FileName,PVOID id,DWORD two,DWORD three,DWORD flags,LPSTR FoundFile,PFINDFILEINPATHCALLBACKW callback,PVOID context);
+  HANDLE IMAGEAPI FindExecutableImage(PCSTR FileName,PCSTR SymbolPath,PSTR ImageFilePath);
+  HANDLE IMAGEAPI FindExecutableImageEx(PCSTR FileName,PCSTR SymbolPath,PSTR ImageFilePath,PFIND_EXE_FILE_CALLBACK Callback,PVOID CallerData);
+  HANDLE IMAGEAPI FindExecutableImageExW(PCWSTR FileName,PCWSTR SymbolPath,PWSTR ImageFilePath,PFIND_EXE_FILE_CALLBACKW Callback,PVOID CallerData);
+  PIMAGE_NT_HEADERS IMAGEAPI ImageNtHeader(PVOID Base);
+  PVOID IMAGEAPI ImageDirectoryEntryToDataEx(PVOID Base,BOOLEAN MappedAsImage,USHORT DirectoryEntry,PULONG Size,PIMAGE_SECTION_HEADER *FoundHeader);
+  PVOID IMAGEAPI ImageDirectoryEntryToData(PVOID Base,BOOLEAN MappedAsImage,USHORT DirectoryEntry,PULONG Size);
+  PIMAGE_SECTION_HEADER IMAGEAPI ImageRvaToSection(PIMAGE_NT_HEADERS NtHeaders,PVOID Base,ULONG Rva);
+  PVOID IMAGEAPI ImageRvaToVa(PIMAGE_NT_HEADERS NtHeaders,PVOID Base,ULONG Rva,PIMAGE_SECTION_HEADER *LastRvaSection);
+
+#define SSRVOPT_CALLBACK 0x0001
+#define SSRVOPT_DWORD 0x0002
+#define SSRVOPT_DWORDPTR 0x0004
+#define SSRVOPT_GUIDPTR 0x0008
+#define SSRVOPT_OLDGUIDPTR 0x0010
+#define SSRVOPT_UNATTENDED 0x0020
+#define SSRVOPT_NOCOPY 0x0040
+#define SSRVOPT_PARENTWIN 0x0080
+#define SSRVOPT_PARAMTYPE 0x0100
+#define SSRVOPT_SECURE 0x0200
+#define SSRVOPT_TRACE 0x0400
+#define SSRVOPT_SETCONTEXT 0x0800
+#define SSRVOPT_PROXY 0x1000
+#define SSRVOPT_DOWNSTREAM_STORE 0x2000
+#define SSRVOPT_RESET ((ULONG_PTR)-1)
+
+#define SSRVACTION_TRACE 1
+#define SSRVACTION_QUERYCANCEL 2
+#define SSRVACTION_EVENT 3
+
+#ifndef _WIN64
+  typedef struct _IMAGE_DEBUG_INFORMATION {
+    LIST_ENTRY List;
+    DWORD ReservedSize;
+    PVOID ReservedMappedBase;
+    USHORT ReservedMachine;
+    USHORT ReservedCharacteristics;
+    DWORD ReservedCheckSum;
+    DWORD ImageBase;
+    DWORD SizeOfImage;
+    DWORD ReservedNumberOfSections;
+    PIMAGE_SECTION_HEADER ReservedSections;
+    DWORD ReservedExportedNamesSize;
+    PSTR ReservedExportedNames;
+    DWORD ReservedNumberOfFunctionTableEntries;
+    PIMAGE_FUNCTION_ENTRY ReservedFunctionTableEntries;
+    DWORD ReservedLowestFunctionStartingAddress;
+    DWORD ReservedHighestFunctionEndingAddress;
+    DWORD ReservedNumberOfFpoTableEntries;
+    PFPO_DATA ReservedFpoTableEntries;
+    DWORD SizeOfCoffSymbols;
+    PIMAGE_COFF_SYMBOLS_HEADER CoffSymbols;
+    DWORD ReservedSizeOfCodeViewSymbols;
+    PVOID ReservedCodeViewSymbols;
+    PSTR ImageFilePath;
+    PSTR ImageFileName;
+    PSTR ReservedDebugFilePath;
+    DWORD ReservedTimeDateStamp;
+    WINBOOL ReservedRomImage;
+    PIMAGE_DEBUG_DIRECTORY ReservedDebugDirectory;
+    DWORD ReservedNumberOfDebugDirectories;
+    DWORD ReservedOriginalFunctionTableBaseAddress;
+    DWORD Reserved[2];
+  } IMAGE_DEBUG_INFORMATION,*PIMAGE_DEBUG_INFORMATION;
+
+  PIMAGE_DEBUG_INFORMATION IMAGEAPI MapDebugInformation(HANDLE FileHandle,PSTR FileName,PSTR SymbolPath,DWORD ImageBase);
+  WINBOOL IMAGEAPI UnmapDebugInformation(PIMAGE_DEBUG_INFORMATION DebugInfo);
+#endif
+
+  typedef WINBOOL (CALLBACK *PENUMDIRTREE_CALLBACK)(LPCSTR FilePath,PVOID CallerData);
+
+  WINBOOL IMAGEAPI SearchTreeForFile(PSTR RootPath,PSTR InputPathName,PSTR OutputPathBuffer);
+  WINBOOL IMAGEAPI SearchTreeForFileW(PWSTR RootPath,PWSTR InputPathName,PWSTR OutputPathBuffer);
+  WINBOOL IMAGEAPI EnumDirTree(HANDLE hProcess,PSTR RootPath,PSTR InputPathName,PSTR OutputPathBuffer,PENUMDIRTREE_CALLBACK Callback,PVOID CallbackData);
+  WINBOOL IMAGEAPI MakeSureDirectoryPathExists(PCSTR DirPath);
+
+#define UNDNAME_COMPLETE (0x0000)
+#define UNDNAME_NO_LEADING_UNDERSCORES (0x0001)
+#define UNDNAME_NO_MS_KEYWORDS (0x0002)
+#define UNDNAME_NO_FUNCTION_RETURNS (0x0004)
+#define UNDNAME_NO_ALLOCATION_MODEL (0x0008)
+#define UNDNAME_NO_ALLOCATION_LANGUAGE (0x0010)
+#define UNDNAME_NO_MS_THISTYPE (0x0020)
+#define UNDNAME_NO_CV_THISTYPE (0x0040)
+#define UNDNAME_NO_THISTYPE (0x0060)
+#define UNDNAME_NO_ACCESS_SPECIFIERS (0x0080)
+#define UNDNAME_NO_THROW_SIGNATURES (0x0100)
+#define UNDNAME_NO_MEMBER_TYPE (0x0200)
+#define UNDNAME_NO_RETURN_UDT_MODEL (0x0400)
+#define UNDNAME_32_BIT_DECODE (0x0800)
+#define UNDNAME_NAME_ONLY (0x1000)
+#define UNDNAME_NO_ARGUMENTS (0x2000)
+#define UNDNAME_NO_SPECIAL_SYMS (0x4000)
+
+#define UNDNAME_NO_ARGUMENTS (0x2000)
+#define UNDNAME_NO_SPECIAL_SYMS (0x4000)
+
+  DWORD IMAGEAPI WINAPI UnDecorateSymbolName(PCSTR DecoratedName,PSTR UnDecoratedName,DWORD UndecoratedLength,DWORD Flags);
+  DWORD IMAGEAPI WINAPI UnDecorateSymbolNameW(PCWSTR DecoratedName,PWSTR UnDecoratedName,DWORD UndecoratedLength,DWORD Flags);
+
+#ifdef DBGHELP_TRANSLATE_TCHAR
+#define UnDecorateSymbolName UnDecorateSymbolNameW
+#endif
+
+#define DBHHEADER_DEBUGDIRS 0x1
+#define DBHHEADER_CVMISC 0x2
+
+  typedef struct _MODLOAD_CVMISC {
+    DWORD  oCV;
+    size_t cCV;
+    DWORD  oMisc;
+    size_t cMisc;
+    DWORD  dtImage;
+    DWORD  cImage;
+  } MODLOAD_CVMISC, *PMODLOAD_CVMISC;
+
+  typedef enum {
+    AddrMode1616,
+    AddrMode1632,
+    AddrModeReal,
+    AddrModeFlat
+  } ADDRESS_MODE;
+
+  typedef struct _tagADDRESS64 {
+    DWORD64 Offset;
+    WORD Segment;
+    ADDRESS_MODE Mode;
+  } ADDRESS64,*LPADDRESS64;
+
+#ifdef _IMAGEHLP64
+#define ADDRESS ADDRESS64
+#define LPADDRESS LPADDRESS64
+#else
+  typedef struct _tagADDRESS {
+    DWORD Offset;
+    WORD Segment;
+    ADDRESS_MODE Mode;
+  } ADDRESS,*LPADDRESS;
+
+  static __inline void Address32To64(LPADDRESS a32,LPADDRESS64 a64) {
+    a64->Offset = (ULONG64)(LONG64)(LONG)a32->Offset;
+    a64->Segment = a32->Segment;
+    a64->Mode = a32->Mode;
+  }
+
+  static __inline void Address64To32(LPADDRESS64 a64,LPADDRESS a32) {
+    a32->Offset = (ULONG)a64->Offset;
+    a32->Segment = a64->Segment;
+    a32->Mode = a64->Mode;
+  }
+#endif
+
+  typedef struct _KDHELP64 {
+    DWORD64 Thread;
+    DWORD ThCallbackStack;
+    DWORD ThCallbackBStore;
+    DWORD NextCallback;
+    DWORD FramePointer;
+    DWORD64 KiCallUserMode;
+    DWORD64 KeUserCallbackDispatcher;
+    DWORD64 SystemRangeStart;
+    DWORD64 KiUserExceptionDispatcher;
+    DWORD64 StackBase;
+    DWORD64 StackLimit;
+    DWORD64 Reserved[5];
+  } KDHELP64,*PKDHELP64;
+
+#ifdef _IMAGEHLP64
+#define KDHELP KDHELP64
+#define PKDHELP PKDHELP64
+#else
+  typedef struct _KDHELP {
+    DWORD Thread;
+    DWORD ThCallbackStack;
+    DWORD NextCallback;
+    DWORD FramePointer;
+    DWORD KiCallUserMode;
+    DWORD KeUserCallbackDispatcher;
+    DWORD SystemRangeStart;
+    DWORD ThCallbackBStore;
+    DWORD KiUserExceptionDispatcher;
+    DWORD StackBase;
+    DWORD StackLimit;
+    DWORD Reserved[5];
+  } KDHELP,*PKDHELP;
+
+  static __inline void KdHelp32To64(PKDHELP p32,PKDHELP64 p64) {
+    p64->Thread = p32->Thread;
+    p64->ThCallbackStack = p32->ThCallbackStack;
+    p64->NextCallback = p32->NextCallback;
+    p64->FramePointer = p32->FramePointer;
+    p64->KiCallUserMode = p32->KiCallUserMode;
+    p64->KeUserCallbackDispatcher = p32->KeUserCallbackDispatcher;
+    p64->SystemRangeStart = p32->SystemRangeStart;
+    p64->KiUserExceptionDispatcher = p32->KiUserExceptionDispatcher;
+    p64->StackBase = p32->StackBase;
+    p64->StackLimit = p32->StackLimit;
+  }
+#endif
+
+  typedef struct _tagSTACKFRAME64 {
+    ADDRESS64 AddrPC;
+    ADDRESS64 AddrReturn;
+    ADDRESS64 AddrFrame;
+    ADDRESS64 AddrStack;
+    ADDRESS64 AddrBStore;
+    PVOID FuncTableEntry;
+    DWORD64 Params[4];
+    WINBOOL Far;
+    WINBOOL Virtual;
+    DWORD64 Reserved[3];
+    KDHELP64 KdHelp;
+  } STACKFRAME64,*LPSTACKFRAME64;
+
+#ifdef _IMAGEHLP64
+#define STACKFRAME STACKFRAME64
+#define LPSTACKFRAME LPSTACKFRAME64
+#else
+  typedef struct _tagSTACKFRAME {
+    ADDRESS AddrPC;
+    ADDRESS AddrReturn;
+    ADDRESS AddrFrame;
+    ADDRESS AddrStack;
+    PVOID FuncTableEntry;
+    DWORD Params[4];
+    WINBOOL Far;
+    WINBOOL Virtual;
+    DWORD Reserved[3];
+    KDHELP KdHelp;
+    ADDRESS AddrBStore;
+  } STACKFRAME,*LPSTACKFRAME;
+#endif
+
+  typedef WINBOOL (WINAPI *PREAD_PROCESS_MEMORY_ROUTINE64)(HANDLE hProcess,DWORD64 qwBaseAddress,PVOID lpBuffer,DWORD nSize,LPDWORD lpNumberOfBytesRead);
+  typedef PVOID (WINAPI *PFUNCTION_TABLE_ACCESS_ROUTINE64)(HANDLE hProcess,DWORD64 AddrBase);
+  typedef DWORD64 (WINAPI *PGET_MODULE_BASE_ROUTINE64)(HANDLE hProcess,DWORD64 Address);
+  typedef DWORD64 (WINAPI *PTRANSLATE_ADDRESS_ROUTINE64)(HANDLE hProcess,HANDLE hThread,LPADDRESS64 lpaddr);
+
+  WINBOOL IMAGEAPI StackWalk64(DWORD MachineType,HANDLE hProcess,HANDLE hThread,LPSTACKFRAME64 StackFrame,PVOID ContextRecord,PREAD_PROCESS_MEMORY_ROUTINE64 ReadMemoryRoutine,PFUNCTION_TABLE_ACCESS_ROUTINE64 FunctionTableAccessRoutine,PGET_MODULE_BASE_ROUTINE64 
+GetModuleBaseRoutine,PTRANSLATE_ADDRESS_ROUTINE64 TranslateAddress);
+
+#ifdef _IMAGEHLP64
+#define PREAD_PROCESS_MEMORY_ROUTINE PREAD_PROCESS_MEMORY_ROUTINE64
+#define PFUNCTION_TABLE_ACCESS_ROUTINE PFUNCTION_TABLE_ACCESS_ROUTINE64
+#define PGET_MODULE_BASE_ROUTINE PGET_MODULE_BASE_ROUTINE64
+#define PTRANSLATE_ADDRESS_ROUTINE PTRANSLATE_ADDRESS_ROUTINE64
+#define StackWalk StackWalk64
+#else
+  typedef WINBOOL (WINAPI *PREAD_PROCESS_MEMORY_ROUTINE)(HANDLE hProcess,DWORD lpBaseAddress,PVOID lpBuffer,DWORD nSize,PDWORD lpNumberOfBytesRead);
+  typedef PVOID (WINAPI *PFUNCTION_TABLE_ACCESS_ROUTINE)(HANDLE hProcess,DWORD AddrBase);
+  typedef DWORD (WINAPI *PGET_MODULE_BASE_ROUTINE)(HANDLE hProcess,DWORD Address);
+  typedef DWORD (WINAPI *PTRANSLATE_ADDRESS_ROUTINE)(HANDLE hProcess,HANDLE hThread,LPADDRESS lpaddr);
+
+  WINBOOL IMAGEAPI StackWalk(DWORD MachineType,HANDLE hProcess,HANDLE hThread,LPSTACKFRAME StackFrame,PVOID ContextRecord,PREAD_PROCESS_MEMORY_ROUTINE ReadMemoryRoutine,PFUNCTION_TABLE_ACCESS_ROUTINE FunctionTableAccessRoutine,PGET_MODULE_BASE_ROUTINE 
+GetModuleBaseRoutine,PTRANSLATE_ADDRESS_ROUTINE TranslateAddress);
+#endif
+
+#define API_VERSION_NUMBER 11
+
+  typedef struct API_VERSION {
+    USHORT MajorVersion;
+    USHORT MinorVersion;
+    USHORT Revision;
+    USHORT Reserved;
+  } API_VERSION,*LPAPI_VERSION;
+
+  LPAPI_VERSION IMAGEAPI ImagehlpApiVersion(VOID);
+  LPAPI_VERSION IMAGEAPI ImagehlpApiVersionEx(LPAPI_VERSION AppVersion);
+  DWORD IMAGEAPI GetTimestampForLoadedLibrary(HMODULE Module);
+
+  typedef WINBOOL (CALLBACK *PSYM_ENUMMODULES_CALLBACK64)(PCSTR ModuleName,DWORD64 BaseOfDll,PVOID UserContext);
+  typedef WINBOOL (CALLBACK *PSYM_ENUMMODULES_CALLBACKW64)(PCWSTR ModuleName,DWORD64 BaseOfDll,PVOID UserContext);
+  typedef WINBOOL (CALLBACK *PSYM_ENUMSYMBOLS_CALLBACK64)(PCSTR SymbolName,DWORD64 SymbolAddress,ULONG SymbolSize,PVOID UserContext);
+  typedef WINBOOL (CALLBACK *PSYM_ENUMSYMBOLS_CALLBACK64W)(PCWSTR SymbolName,DWORD64 SymbolAddress,ULONG SymbolSize,PVOID UserContext);
+  typedef WINBOOL (CALLBACK *PENUMLOADED_MODULES_CALLBACK64)(PCSTR ModuleName,DWORD64 ModuleBase,ULONG ModuleSize,PVOID UserContext);
+  typedef WINBOOL (CALLBACK *PENUMLOADED_MODULES_CALLBACKW64)(PCWSTR ModuleName,DWORD64 ModuleBase,ULONG ModuleSize,PVOID UserContext);
+  typedef WINBOOL (CALLBACK *PSYMBOL_REGISTERED_CALLBACK64)(HANDLE hProcess,ULONG ActionCode,ULONG64 CallbackData,ULONG64 UserContext);
+  typedef PVOID (CALLBACK *PSYMBOL_FUNCENTRY_CALLBACK)(HANDLE hProcess,DWORD AddrBase,PVOID UserContext);
+  typedef PVOID (CALLBACK *PSYMBOL_FUNCENTRY_CALLBACK64)(HANDLE hProcess,ULONG64 AddrBase,ULONG64 UserContext);
+
+#ifdef _IMAGEHLP64
+#define PSYM_ENUMMODULES_CALLBACK PSYM_ENUMMODULES_CALLBACK64
+#define PSYM_ENUMSYMBOLS_CALLBACK PSYM_ENUMSYMBOLS_CALLBACK64
+#define PSYM_ENUMSYMBOLS_CALLBACKW PSYM_ENUMSYMBOLS_CALLBACK64W
+#define PENUMLOADED_MODULES_CALLBACK PENUMLOADED_MODULES_CALLBACK64
+#define PSYMBOL_REGISTERED_CALLBACK PSYMBOL_REGISTERED_CALLBACK64
+#define PSYMBOL_FUNCENTRY_CALLBACK PSYMBOL_FUNCENTRY_CALLBACK64
+#else
+  typedef WINBOOL (CALLBACK *PSYM_ENUMMODULES_CALLBACK)(PCSTR ModuleName,ULONG BaseOfDll,PVOID UserContext);
+  typedef WINBOOL (CALLBACK *PSYM_ENUMSYMBOLS_CALLBACK)(PCSTR SymbolName,ULONG SymbolAddress,ULONG SymbolSize,PVOID UserContext);
+  typedef WINBOOL (CALLBACK *PSYM_ENUMSYMBOLS_CALLBACKW)(PCWSTR SymbolName,ULONG SymbolAddress,ULONG SymbolSize,PVOID UserContext);
+  typedef WINBOOL (CALLBACK *PENUMLOADED_MODULES_CALLBACK)(PCSTR ModuleName,ULONG ModuleBase,ULONG ModuleSize,PVOID UserContext);
+  typedef WINBOOL (CALLBACK *PSYMBOL_REGISTERED_CALLBACK)(HANDLE hProcess,ULONG ActionCode,PVOID CallbackData,PVOID UserContext);
+#endif
+
+#define SYMFLAG_VALUEPRESENT 0x00000001
+#define SYMFLAG_REGISTER 0x00000008
+#define SYMFLAG_REGREL 0x00000010
+#define SYMFLAG_FRAMEREL 0x00000020
+#define SYMFLAG_PARAMETER 0x00000040
+#define SYMFLAG_LOCAL 0x00000080
+#define SYMFLAG_CONSTANT 0x00000100
+#define SYMFLAG_EXPORT 0x00000200
+#define SYMFLAG_FORWARDER 0x00000400
+#define SYMFLAG_FUNCTION 0x00000800
+#define SYMFLAG_VIRTUAL 0x00001000
+#define SYMFLAG_THUNK 0x00002000
+#define SYMFLAG_TLSREL 0x00004000
+
+  typedef enum {
+    SymNone = 0,
+    SymCoff,
+    SymCv,
+    SymPdb,
+    SymExport,
+    SymDeferred,
+    SymSym,
+    SymDia,
+    SymVirtual,
+    NumSymTypes
+  } SYM_TYPE;
+
+  typedef struct _IMAGEHLP_SYMBOL64 {
+    DWORD SizeOfStruct;
+    DWORD64 Address;
+    DWORD Size;
+    DWORD Flags;
+    DWORD MaxNameLength;
+    CHAR Name[1];
+  } IMAGEHLP_SYMBOL64,*PIMAGEHLP_SYMBOL64;
+
+  typedef struct _IMAGEHLP_SYMBOL64_PACKAGE {
+    IMAGEHLP_SYMBOL64 sym;
+    CHAR name[MAX_SYM_NAME + 1];
+  } IMAGEHLP_SYMBOL64_PACKAGE,*PIMAGEHLP_SYMBOL64_PACKAGE;
+
+#ifdef _IMAGEHLP64
+
+#define IMAGEHLP_SYMBOL IMAGEHLP_SYMBOL64
+#define PIMAGEHLP_SYMBOL PIMAGEHLP_SYMBOL64
+#define IMAGEHLP_SYMBOL_PACKAGE IMAGEHLP_SYMBOL64_PACKAGE
+#define PIMAGEHLP_SYMBOL_PACKAGE PIMAGEHLP_SYMBOL64_PACKAGE
+#else
+
+  typedef struct _IMAGEHLP_SYMBOL {
+    DWORD SizeOfStruct;
+    DWORD Address;
+    DWORD Size;
+    DWORD Flags;
+    DWORD MaxNameLength;
+    CHAR Name[1];
+  } IMAGEHLP_SYMBOL,*PIMAGEHLP_SYMBOL;
+
+  typedef struct _IMAGEHLP_SYMBOL_PACKAGE {
+    IMAGEHLP_SYMBOL sym;
+    CHAR name[MAX_SYM_NAME + 1];
+  } IMAGEHLP_SYMBOL_PACKAGE,*PIMAGEHLP_SYMBOL_PACKAGE;
+#endif
+
+  typedef struct _IMAGEHLP_MODULE64 {
+    DWORD SizeOfStruct;
+    DWORD64 BaseOfImage;
+    DWORD ImageSize;
+    DWORD TimeDateStamp;
+    DWORD CheckSum;
+    DWORD NumSyms;
+    SYM_TYPE SymType;
+    CHAR ModuleName[32];
+    CHAR ImageName[256];
+    CHAR LoadedImageName[256];
+    CHAR LoadedPdbName[256];
+    DWORD CVSig;
+    CHAR CVData[MAX_PATH*3];
+    DWORD PdbSig;
+    GUID PdbSig70;
+    DWORD PdbAge;
+    WINBOOL PdbUnmatched;
+    WINBOOL DbgUnmatched;
+    WINBOOL LineNumbers;
+    WINBOOL GlobalSymbols;
+    WINBOOL TypeInfo;
+    WINBOOL SourceIndexed;
+    WINBOOL Publics;
+  } IMAGEHLP_MODULE64,*PIMAGEHLP_MODULE64;
+
+  typedef struct _IMAGEHLP_MODULE64W {
+    DWORD SizeOfStruct;
+    DWORD64 BaseOfImage;
+    DWORD ImageSize;
+    DWORD TimeDateStamp;
+    DWORD CheckSum;
+    DWORD NumSyms;
+    SYM_TYPE SymType;
+    WCHAR ModuleName[32];
+    WCHAR ImageName[256];
+    WCHAR LoadedImageName[256];
+    WCHAR LoadedPdbName[256];
+    DWORD CVSig;
+    WCHAR CVData[MAX_PATH*3];
+    DWORD PdbSig;
+    GUID PdbSig70;
+    DWORD PdbAge;
+    WINBOOL PdbUnmatched;
+    WINBOOL DbgUnmatched;
+    WINBOOL LineNumbers;
+    WINBOOL GlobalSymbols;
+    WINBOOL TypeInfo;
+    WINBOOL SourceIndexed;
+    WINBOOL Publics;
+  } IMAGEHLP_MODULEW64,*PIMAGEHLP_MODULEW64;
+
+#ifdef _IMAGEHLP64
+#define IMAGEHLP_MODULE IMAGEHLP_MODULE64
+#define PIMAGEHLP_MODULE PIMAGEHLP_MODULE64
+#define IMAGEHLP_MODULEW IMAGEHLP_MODULEW64
+#define PIMAGEHLP_MODULEW PIMAGEHLP_MODULEW64
+#else
+  typedef struct _IMAGEHLP_MODULE {
+    DWORD SizeOfStruct;
+    DWORD BaseOfImage;
+    DWORD ImageSize;
+    DWORD TimeDateStamp;
+    DWORD CheckSum;
+    DWORD NumSyms;
+    SYM_TYPE SymType;
+    CHAR ModuleName[32];
+    CHAR ImageName[256];
+    CHAR LoadedImageName[256];
+  } IMAGEHLP_MODULE,*PIMAGEHLP_MODULE;
+
+  typedef struct _IMAGEHLP_MODULEW {
+    DWORD SizeOfStruct;
+    DWORD BaseOfImage;
+    DWORD ImageSize;
+    DWORD TimeDateStamp;
+    DWORD CheckSum;
+    DWORD NumSyms;
+    SYM_TYPE SymType;
+    WCHAR ModuleName[32];
+    WCHAR ImageName[256];
+    WCHAR LoadedImageName[256];
+  } IMAGEHLP_MODULEW,*PIMAGEHLP_MODULEW;
+#endif
+
+  typedef struct _IMAGEHLP_LINE64 {
+    DWORD SizeOfStruct;
+    PVOID Key;
+    DWORD LineNumber;
+    PCHAR FileName;
+    DWORD64 Address;
+  } IMAGEHLP_LINE64,*PIMAGEHLP_LINE64;
+
+  typedef struct _IMAGEHLP_LINEW64 {
+    DWORD   SizeOfStruct;
+    PVOID   Key;
+    DWORD   LineNumber;
+    PWSTR   FileName;
+    DWORD64 Address;
+  } IMAGEHLP_LINEW64, *PIMAGEHLP_LINEW64;
+
+#ifdef _IMAGEHLP64
+#define IMAGEHLP_LINE IMAGEHLP_LINE64
+#define PIMAGEHLP_LINE PIMAGEHLP_LINE64
+#else
+  typedef struct _IMAGEHLP_LINE {
+    DWORD SizeOfStruct;
+    PVOID Key;
+    DWORD LineNumber;
+    PCHAR FileName;
+    DWORD Address;
+  } IMAGEHLP_LINE,*PIMAGEHLP_LINE;
+#endif
+
+  typedef struct _SOURCEFILE {
+    DWORD64 ModBase;
+    PCHAR FileName;
+  } SOURCEFILE,*PSOURCEFILE;
+
+  typedef struct _SOURCEFILEW {
+    DWORD64 ModBase;
+    PWCHAR FileName;
+  } SOURCEFILEW,*PSOURCEFILEW;
+
+#define CBA_DEFERRED_SYMBOL_LOAD_START 0x00000001
+#define CBA_DEFERRED_SYMBOL_LOAD_COMPLETE 0x00000002
+#define CBA_DEFERRED_SYMBOL_LOAD_FAILURE 0x00000003
+#define CBA_SYMBOLS_UNLOADED 0x00000004
+#define CBA_DUPLICATE_SYMBOL 0x00000005
+#define CBA_READ_MEMORY 0x00000006
+#define CBA_DEFERRED_SYMBOL_LOAD_CANCEL 0x00000007
+#define CBA_SET_OPTIONS 0x00000008
+#define CBA_EVENT 0x00000010
+#define CBA_DEFERRED_SYMBOL_LOAD_PARTIAL 0x00000020
+#define CBA_DEBUG_INFO 0x10000000
+#define CBA_SRCSRV_INFO 0x20000000
+#define CBA_SRCSRV_EVENT 0x40000000
+
+  typedef struct _IMAGEHLP_CBA_READ_MEMORY {
+    DWORD64 addr;
+    PVOID buf;
+    DWORD bytes;
+    DWORD *bytesread;
+  } IMAGEHLP_CBA_READ_MEMORY,*PIMAGEHLP_CBA_READ_MEMORY;
+
+  enum {
+    sevInfo = 0,
+    sevProblem,
+    sevAttn,
+    sevFatal,
+    sevMax
+  };
+
+  typedef struct _IMAGEHLP_CBA_EVENT {
+    DWORD severity;
+    DWORD code;
+    PCHAR desc;
+    PVOID object;
+  } IMAGEHLP_CBA_EVENT,*PIMAGEHLP_CBA_EVENT;
+
+  typedef struct _IMAGEHLP_DEFERRED_SYMBOL_LOAD64 {
+    DWORD SizeOfStruct;
+    DWORD64 BaseOfImage;
+    DWORD CheckSum;
+    DWORD TimeDateStamp;
+    CHAR FileName[MAX_PATH];
+    BOOLEAN Reparse;
+    HANDLE hFile;
+    DWORD Flags;
+  } IMAGEHLP_DEFERRED_SYMBOL_LOAD64,*PIMAGEHLP_DEFERRED_SYMBOL_LOAD64;
+
+#define DSLFLAG_MISMATCHED_PDB 0x1
+#define DSLFLAG_MISMATCHED_DBG 0x2
+
+#ifdef _IMAGEHLP64
+#define IMAGEHLP_DEFERRED_SYMBOL_LOAD IMAGEHLP_DEFERRED_SYMBOL_LOAD64
+#define PIMAGEHLP_DEFERRED_SYMBOL_LOAD PIMAGEHLP_DEFERRED_SYMBOL_LOAD64
+#else
+  typedef struct _IMAGEHLP_DEFERRED_SYMBOL_LOAD {
+    DWORD SizeOfStruct;
+    DWORD BaseOfImage;
+    DWORD CheckSum;
+    DWORD TimeDateStamp;
+    CHAR FileName[MAX_PATH];
+    BOOLEAN Reparse;
+    HANDLE hFile;
+  } IMAGEHLP_DEFERRED_SYMBOL_LOAD,*PIMAGEHLP_DEFERRED_SYMBOL_LOAD;
+#endif
+
+  typedef struct _IMAGEHLP_DUPLICATE_SYMBOL64 {
+    DWORD SizeOfStruct;
+    DWORD NumberOfDups;
+    PIMAGEHLP_SYMBOL64 Symbol;
+    DWORD SelectedSymbol;
+  } IMAGEHLP_DUPLICATE_SYMBOL64,*PIMAGEHLP_DUPLICATE_SYMBOL64;
+
+#ifdef _IMAGEHLP64
+#define IMAGEHLP_DUPLICATE_SYMBOL IMAGEHLP_DUPLICATE_SYMBOL64
+#define PIMAGEHLP_DUPLICATE_SYMBOL PIMAGEHLP_DUPLICATE_SYMBOL64
+#else
+  typedef struct _IMAGEHLP_DUPLICATE_SYMBOL {
+    DWORD SizeOfStruct;
+    DWORD NumberOfDups;
+    PIMAGEHLP_SYMBOL Symbol;
+    DWORD SelectedSymbol;
+  } IMAGEHLP_DUPLICATE_SYMBOL,*PIMAGEHLP_DUPLICATE_SYMBOL;
+#endif
+
+typedef struct _SYMSRV_INDEX_INFO {
+  DWORD sizeofstruct;
+  CHAR file[MAX_PATH +1];
+  WINBOOL  stripped;
+  DWORD timestamp;
+  DWORD size;
+  CHAR dbgfile[MAX_PATH +1];
+  CHAR pdbfile[MAX_PATH + 1];
+  GUID  guid;
+  DWORD sig;
+  DWORD age;
+} SYMSRV_INDEX_INFO, *PSYMSRV_INDEX_INFO;
+
+typedef struct _SYMSRV_INDEX_INFOW {
+  DWORD sizeofstruct;
+  WCHAR file[MAX_PATH +1];
+  WINBOOL  stripped;
+  DWORD timestamp;
+  DWORD size;
+  WCHAR dbgfile[MAX_PATH +1];
+  WCHAR pdbfile[MAX_PATH + 1];
+  GUID  guid;
+  DWORD sig;
+  DWORD age;
+} SYMSRV_INDEX_INFOW, *PSYMSRV_INDEX_INFOW;
+
+  WINBOOL IMAGEAPI SymSetParentWindow(HWND hwnd);
+  PCHAR IMAGEAPI SymSetHomeDirectory(HANDLE hProcess,PCSTR dir);
+  PCHAR IMAGEAPI SymSetHomeDirectoryW(HANDLE hProcess,PCWSTR dir);
+  PCHAR IMAGEAPI SymGetHomeDirectory(DWORD type,PSTR dir,size_t size);
+  PWCHAR IMAGEAPI SymGetHomeDirectoryW(DWORD type,PWSTR dir,size_t size);
+
+#define hdBase 0
+#define hdSym 1
+#define hdSrc 2
+#define hdMax 3
+
+#define SYMOPT_CASE_INSENSITIVE 0x00000001
+#define SYMOPT_UNDNAME 0x00000002
+#define SYMOPT_DEFERRED_LOADS 0x00000004
+#define SYMOPT_NO_CPP 0x00000008
+#define SYMOPT_LOAD_LINES 0x00000010
+#define SYMOPT_OMAP_FIND_NEAREST 0x00000020
+#define SYMOPT_LOAD_ANYTHING 0x00000040
+#define SYMOPT_IGNORE_CVREC 0x00000080
+#define SYMOPT_NO_UNQUALIFIED_LOADS 0x00000100
+#define SYMOPT_FAIL_CRITICAL_ERRORS 0x00000200
+#define SYMOPT_EXACT_SYMBOLS 0x00000400
+#define SYMOPT_ALLOW_ABSOLUTE_SYMBOLS 0x00000800
+#define SYMOPT_IGNORE_NT_SYMPATH 0x00001000
+#define SYMOPT_INCLUDE_32BIT_MODULES 0x00002000
+#define SYMOPT_PUBLICS_ONLY 0x00004000
+#define SYMOPT_NO_PUBLICS 0x00008000
+#define SYMOPT_AUTO_PUBLICS 0x00010000
+#define SYMOPT_NO_IMAGE_SEARCH 0x00020000
+#define SYMOPT_SECURE 0x00040000
+#define SYMOPT_NO_PROMPTS 0x00080000
+#define SYMOPT_ALLOW_ZERO_ADDRESS 0x01000000
+#define SYMOPT_DISABLE_SYMSRV_AUTODETECT 0x02000000
+#define SYMOPT_FAVOR_COMPRESSED 0x00800000
+#define SYMOPT_FLAT_DIRECTORY 0x00400000
+#define SYMOPT_IGNORE_IMAGEDIR 0x00200000
+#define SYMOPT_OVERWRITE 0x00100000
+
+#define SYMOPT_DEBUG 0x80000000
+
+  DWORD IMAGEAPI SymSetOptions(DWORD SymOptions);
+  DWORD IMAGEAPI SymGetOptions(VOID);
+  WINBOOL IMAGEAPI SymCleanup(HANDLE hProcess);
+  WINBOOL IMAGEAPI SymMatchString(PCSTR string,PCSTR expression,WINBOOL fCase);
+  WINBOOL IMAGEAPI SymMatchStringW(PCWSTR string,PCWSTR expression,WINBOOL fCase);
+
+  typedef WINBOOL (CALLBACK *PSYM_ENUMSOURCEFILES_CALLBACK)(PSOURCEFILE pSourceFile,PVOID UserContext);
+  typedef WINBOOL (CALLBACK *PSYM_ENUMSOURCEFILES_CALLBACKW)(PSOURCEFILEW pSourceFile,PVOID UserContext);
+#define PSYM_ENUMSOURCFILES_CALLBACK PSYM_ENUMSOURCEFILES_CALLBACK
+
+  WINBOOL IMAGEAPI SymEnumSourceFiles(HANDLE hProcess,ULONG64 ModBase,PCSTR Mask,PSYM_ENUMSOURCEFILES_CALLBACK cbSrcFiles,PVOID UserContext);
+  WINBOOL IMAGEAPI SymEnumSourceFilesW(HANDLE hProcess,ULONG64 ModBase,PCWSTR Mask,PSYM_ENUMSOURCEFILES_CALLBACKW cbSrcFiles,PVOID UserContext);
+  WINBOOL IMAGEAPI SymEnumerateModules64(HANDLE hProcess,PSYM_ENUMMODULES_CALLBACK64 EnumModulesCallback,PVOID UserContext);
+  WINBOOL IMAGEAPI SymEnumerateModulesW64(HANDLE hProcess,PSYM_ENUMMODULES_CALLBACKW64 EnumModulesCallback,PVOID UserContext);
+
+#ifdef _IMAGEHLP64
+#define SymEnumerateModules SymEnumerateModules64
+#else
+  WINBOOL IMAGEAPI SymEnumerateModules(HANDLE hProcess,PSYM_ENUMMODULES_CALLBACK EnumModulesCallback,PVOID UserContext);
+#endif
+
+  WINBOOL IMAGEAPI SymEnumerateSymbols64(HANDLE hProcess,DWORD64 BaseOfDll,PSYM_ENUMSYMBOLS_CALLBACK64 EnumSymbolsCallback,PVOID UserContext);
+  WINBOOL IMAGEAPI SymEnumerateSymbolsW64(HANDLE hProcess,DWORD64 BaseOfDll,PSYM_ENUMSYMBOLS_CALLBACK64W EnumSymbolsCallback,PVOID UserContext);
+
+#ifdef _IMAGEHLP64
+#define SymEnumerateSymbols SymEnumerateSymbols64
+#define SymEnumerateSymbolsW SymEnumerateSymbolsW64
+#else
+  WINBOOL IMAGEAPI SymEnumerateSymbols(HANDLE hProcess,DWORD BaseOfDll,PSYM_ENUMSYMBOLS_CALLBACK EnumSymbolsCallback,PVOID UserContext);
+  WINBOOL IMAGEAPI SymEnumerateSymbolsW(HANDLE hProcess,DWORD BaseOfDll,PSYM_ENUMSYMBOLS_CALLBACKW EnumSymbolsCallback,PVOID UserContext);
+#endif
+
+  WINBOOL IMAGEAPI EnumerateLoadedModules64(HANDLE hProcess,PENUMLOADED_MODULES_CALLBACK64 EnumLoadedModulesCallback,PVOID UserContext);
+  WINBOOL IMAGEAPI EnumerateLoadedModulesW64(HANDLE hProcess,PENUMLOADED_MODULES_CALLBACKW64 EnumLoadedModulesCallback,PVOID UserContext);
+
+#ifdef DBGHELP_TRANSLATE_TCHAR
+    #define EnumerateLoadedModules64      EnumerateLoadedModulesW64
+#endif
+
+#ifdef _IMAGEHLP64
+#define EnumerateLoadedModules EnumerateLoadedModules64
+#else
+  WINBOOL IMAGEAPI EnumerateLoadedModules(HANDLE hProcess,PENUMLOADED_MODULES_CALLBACK EnumLoadedModulesCallback,PVOID UserContext);
+#endif
+
+  PVOID IMAGEAPI SymFunctionTableAccess64(HANDLE hProcess,DWORD64 AddrBase);
+
+#ifdef _IMAGEHLP64
+#define SymFunctionTableAccess SymFunctionTableAccess64
+#else
+  PVOID IMAGEAPI SymFunctionTableAccess(HANDLE hProcess,DWORD AddrBase);
+#endif
+
+  WINBOOL IMAGEAPI SymGetModuleInfo64(HANDLE hProcess,DWORD64 qwAddr,PIMAGEHLP_MODULE64 ModuleInfo);
+  WINBOOL IMAGEAPI SymGetModuleInfoW64(HANDLE hProcess,DWORD64 qwAddr,PIMAGEHLP_MODULEW64 ModuleInfo);
+
+#ifdef _IMAGEHLP64
+#define SymGetModuleInfo SymGetModuleInfo64
+#define SymGetModuleInfoW SymGetModuleInfoW64
+#else
+  WINBOOL IMAGEAPI SymGetModuleInfo(HANDLE hProcess,DWORD dwAddr,PIMAGEHLP_MODULE ModuleInfo);
+  WINBOOL IMAGEAPI SymGetModuleInfoW(HANDLE hProcess,DWORD dwAddr,PIMAGEHLP_MODULEW ModuleInfo);
+#endif
+
+  DWORD64 IMAGEAPI SymGetModuleBase64(HANDLE hProcess,DWORD64 qwAddr);
+
+#ifdef _IMAGEHLP64
+#define SymGetModuleBase SymGetModuleBase64
+#else
+  DWORD IMAGEAPI SymGetModuleBase(HANDLE hProcess,DWORD dwAddr);
+#endif
+
+  WINBOOL IMAGEAPI SymGetSymNext64(HANDLE hProcess,PIMAGEHLP_SYMBOL64 Symbol);
+
+#ifdef _IMAGEHLP64
+#define SymGetSymNext SymGetSymNext64
+#else
+  WINBOOL IMAGEAPI SymGetSymNext(HANDLE hProcess,PIMAGEHLP_SYMBOL Symbol);
+#endif
+
+  WINBOOL IMAGEAPI SymGetSymPrev64(HANDLE hProcess,PIMAGEHLP_SYMBOL64 Symbol);
+
+#ifdef _IMAGEHLP64
+#define SymGetSymPrev SymGetSymPrev64
+#else
+  WINBOOL IMAGEAPI SymGetSymPrev(HANDLE hProcess,PIMAGEHLP_SYMBOL Symbol);
+#endif
+
+  typedef struct _SRCCODEINFO {
+    DWORD SizeOfStruct;
+    PVOID Key;
+    DWORD64 ModBase;
+    CHAR Obj[MAX_PATH + 1];
+    CHAR FileName[MAX_PATH + 1];
+    DWORD LineNumber;
+    DWORD64 Address;
+  } SRCCODEINFO,*PSRCCODEINFO;
+
+  typedef struct _SRCCODEINFOW {
+    DWORD SizeOfStruct;
+    PVOID Key;
+    DWORD64 ModBase;
+    WCHAR Obj[MAX_PATH + 1];
+    WCHAR FileName[MAX_PATH + 1];
+    DWORD LineNumber;
+    DWORD64 Address;
+  } SRCCODEINFOW,*PSRCCODEINFOW;
+
+  typedef WINBOOL (CALLBACK *PSYM_ENUMLINES_CALLBACK)(PSRCCODEINFO LineInfo,PVOID UserContext);
+  typedef WINBOOL (CALLBACK *PSYM_ENUMLINES_CALLBACKW)(PSRCCODEINFOW LineInfo,PVOID UserContext);
+
+  WINBOOL IMAGEAPI SymEnumLines(HANDLE hProcess,ULONG64 Base,PCSTR Obj,PCSTR File,PSYM_ENUMLINES_CALLBACK EnumLinesCallback,PVOID UserContext);
+  WINBOOL IMAGEAPI SymEnumLinesW(HANDLE hProcess,ULONG64 Base,PCWSTR Obj,PCSTR File,PSYM_ENUMLINES_CALLBACKW EnumLinesCallback,PVOID UserContext);
+  WINBOOL IMAGEAPI SymGetLineFromAddr64(HANDLE hProcess,DWORD64 qwAddr,PDWORD pdwDisplacement,PIMAGEHLP_LINE64 Line64);
+  WINBOOL IMAGEAPI SymGetLineFromAddrW64(HANDLE hProcess,DWORD64 qwAddr,PDWORD pdwDisplacement,PIMAGEHLP_LINEW64 Line64);
+
+#ifdef _IMAGEHLP64
+#define SymGetLineFromAddr SymGetLineFromAddr64
+#else
+  WINBOOL IMAGEAPI SymGetLineFromAddr(HANDLE hProcess,DWORD dwAddr,PDWORD pdwDisplacement,PIMAGEHLP_LINE Line);
+#endif
+
+  WINBOOL IMAGEAPI SymGetLineFromName64(HANDLE hProcess,PCSTR ModuleName,PCSTR FileName,DWORD dwLineNumber,PLONG plDisplacement,PIMAGEHLP_LINE64 Line);
+  WINBOOL IMAGEAPI SymGetLineFromNameW64(HANDLE hProcess,PCWSTR ModuleName,PCWSTR FileName,DWORD dwLineNumber,PLONG plDisplacement,PIMAGEHLP_LINEW64 Line);
+
+#ifdef _IMAGEHLP64
+#define SymGetLineFromName SymGetLineFromName64
+#else
+  WINBOOL IMAGEAPI SymGetLineFromName(HANDLE hProcess,PCSTR ModuleName,PCSTR FileName,DWORD dwLineNumber,PLONG plDisplacement,PIMAGEHLP_LINE Line);
+#endif
+
+  WINBOOL IMAGEAPI SymGetLineNext64(HANDLE hProcess,PIMAGEHLP_LINE64 Line);
+  WINBOOL IMAGEAPI SymGetLineNextW64(HANDLE hProcess,PIMAGEHLP_LINEW64 Line);
+
+#ifdef _IMAGEHLP64
+#define SymGetLineNext SymGetLineNext64
+#else
+  WINBOOL IMAGEAPI SymGetLineNext(HANDLE hProcess,PIMAGEHLP_LINE Line);
+#endif
+
+  WINBOOL IMAGEAPI SymGetLinePrev64(HANDLE hProcess,PIMAGEHLP_LINE64 Line);
+  WINBOOL IMAGEAPI SymGetLinePrevW64(HANDLE hProcess,PIMAGEHLP_LINEW64 Line);
+
+#ifdef _IMAGEHLP64
+#define SymGetLinePrev SymGetLinePrev64
+#else
+  WINBOOL IMAGEAPI SymGetLinePrev(HANDLE hProcess,PIMAGEHLP_LINE Line);
+#endif
+
+  WINBOOL IMAGEAPI SymMatchFileName(PCSTR FileName,PCSTR Match,PSTR *FileNameStop,PSTR *MatchStop);
+  WINBOOL IMAGEAPI SymMatchFileNameW(PCWSTR FileName,PCWSTR Match,PWSTR *FileNameStop,PWSTR *MatchStop);
+  WINBOOL IMAGEAPI SymInitialize(HANDLE hProcess,PCSTR UserSearchPath,WINBOOL fInvadeProcess);
+  WINBOOL IMAGEAPI SymInitializeW(HANDLE hProcess,PCWSTR UserSearchPath,WINBOOL fInvadeProcess);
+  WINBOOL IMAGEAPI SymGetSearchPath(HANDLE hProcess,PSTR SearchPath,DWORD SearchPathLength);
+  WINBOOL IMAGEAPI SymGetSearchPathW(HANDLE hProcess,PWSTR SearchPath,DWORD SearchPathLength);
+  WINBOOL IMAGEAPI SymSetSearchPath(HANDLE hProcess,PCSTR SearchPath);
+  WINBOOL IMAGEAPI SymSetSearchPathW(HANDLE hProcess,PCWSTR SearchPath);
+  DWORD64 IMAGEAPI SymLoadModule64(HANDLE hProcess,HANDLE hFile,PSTR ImageName,PSTR ModuleName,DWORD64 BaseOfDll,DWORD SizeOfDll);
+
+#define SLMFLAG_VIRTUAL 0x1
+
+  DWORD64 IMAGEAPI SymLoadModuleEx(HANDLE hProcess,HANDLE hFile,PCSTR ImageName,PCSTR ModuleName,DWORD64 BaseOfDll,DWORD DllSize,PMODLOAD_DATA Data,DWORD Flags);
+  DWORD64 IMAGEAPI SymLoadModuleExW(HANDLE hProcess,HANDLE hFile,PCWSTR ImageName,PCWSTR ModuleName,DWORD64 BaseOfDll,DWORD DllSize,PMODLOAD_DATA Data,DWORD Flags);
+
+#ifdef _IMAGEHLP64
+#define SymLoadModule SymLoadModule64
+#else
+  DWORD IMAGEAPI SymLoadModule(HANDLE hProcess,HANDLE hFile,PCSTR ImageName,PCSTR ModuleName,DWORD BaseOfDll,DWORD SizeOfDll);
+#endif
+
+  WINBOOL IMAGEAPI SymUnloadModule64(HANDLE hProcess,DWORD64 BaseOfDll);
+
+#ifdef _IMAGEHLP64
+#define SymUnloadModule SymUnloadModule64
+#else
+  WINBOOL IMAGEAPI SymUnloadModule(HANDLE hProcess,DWORD BaseOfDll);
+#endif
+
+  WINBOOL IMAGEAPI SymUnDName64(PIMAGEHLP_SYMBOL64 sym,PSTR UnDecName,DWORD UnDecNameLength);
+
+#ifdef _IMAGEHLP64
+#define SymUnDName SymUnDName64
+#else
+  WINBOOL IMAGEAPI SymUnDName(PIMAGEHLP_SYMBOL sym,PSTR UnDecName,DWORD UnDecNameLength);
+#endif
+
+  WINBOOL IMAGEAPI SymRegisterCallback64(HANDLE hProcess,PSYMBOL_REGISTERED_CALLBACK64 CallbackFunction,ULONG64 UserContext);
+  WINBOOL IMAGEAPI SymRegisterCallback64W(HANDLE hProcess,PSYMBOL_REGISTERED_CALLBACK64 CallbackFunction,ULONG64 UserContext);
+
+  WINBOOL IMAGEAPI SymRegisterFunctionEntryCallback64(HANDLE hProcess,PSYMBOL_FUNCENTRY_CALLBACK64 CallbackFunction,ULONG64 UserContext);
+
+#ifdef _IMAGEHLP64
+#define SymRegisterCallback SymRegisterCallback64
+#define SymRegisterFunctionEntryCallback SymRegisterFunctionEntryCallback64
+#else
+  WINBOOL IMAGEAPI SymRegisterCallback(HANDLE hProcess,PSYMBOL_REGISTERED_CALLBACK CallbackFunction,PVOID UserContext);
+  WINBOOL IMAGEAPI SymRegisterFunctionEntryCallback(HANDLE hProcess,PSYMBOL_FUNCENTRY_CALLBACK CallbackFunction,PVOID UserContext);
+#endif
+
+  typedef struct _IMAGEHLP_SYMBOL_SRC {
+    DWORD sizeofstruct;
+    DWORD type;
+    char file[MAX_PATH];
+  } IMAGEHLP_SYMBOL_SRC,*PIMAGEHLP_SYMBOL_SRC;
+
+  typedef struct _MODULE_TYPE_INFO {
+    USHORT dataLength;
+    USHORT leaf;
+    BYTE data[1];
+  } MODULE_TYPE_INFO,*PMODULE_TYPE_INFO;
+
+  typedef struct _SYMBOL_INFO {
+    ULONG SizeOfStruct;
+    ULONG TypeIndex;
+    ULONG64 Reserved[2];
+    ULONG info;
+    ULONG Size;
+    ULONG64 ModBase;
+    ULONG Flags;
+    ULONG64 Value;
+    ULONG64 Address;
+    ULONG Register;
+    ULONG Scope;
+    ULONG Tag;
+    ULONG NameLen;
+    ULONG MaxNameLen;
+    CHAR Name[1];
+  } SYMBOL_INFO,*PSYMBOL_INFO;
+
+  typedef struct _SYMBOL_INFOW {
+    ULONG SizeOfStruct;
+    ULONG TypeIndex;
+    ULONG64 Reserved[2];
+    ULONG info;
+    ULONG Size;
+    ULONG64 ModBase;
+    ULONG Flags;
+    ULONG64 Value;
+    ULONG64 Address;
+    ULONG Register;
+    ULONG Scope;
+    ULONG Tag;
+    ULONG NameLen;
+    ULONG MaxNameLen;
+    WCHAR Name[1];
+  } SYMBOL_INFOW,*PSYMBOL_INFOW;
+
+#define SYMFLAG_CLR_TOKEN 0x00040000
+#define SYMFLAG_CONSTANT 0x00000100
+#define SYMFLAG_EXPORT 0x00000200
+#define SYMFLAG_FORWARDER 0x00000400
+#define SYMFLAG_FRAMEREL 0x00000020
+#define SYMFLAG_FUNCTION 0x00000800
+#define SYMFLAG_ILREL 0x00010000
+#define SYMFLAG_LOCAL 0x00000080
+#define SYMFLAG_METADATA 0x00020000
+#define SYMFLAG_PARAMETER 0x00000040
+#define SYMFLAG_REGISTER 0x00000008
+#define SYMFLAG_REGREL 0x00000010
+#define SYMFLAG_SLOT 0x00008000
+#define SYMFLAG_THUNK 0x00002000
+#define SYMFLAG_TLSREL 0x00004000
+#define SYMFLAG_VALUEPRESENT 0x00000001
+#define SYMFLAG_VIRTUAL 0x00001000
+
+  typedef struct _SYMBOL_INFO_PACKAGE {
+    SYMBOL_INFO si;
+    CHAR name[MAX_SYM_NAME + 1];
+  } SYMBOL_INFO_PACKAGE,*PSYMBOL_INFO_PACKAGE;
+
+  typedef struct _IMAGEHLP_STACK_FRAME {
+    ULONG64 InstructionOffset;
+    ULONG64 ReturnOffset;
+    ULONG64 FrameOffset;
+    ULONG64 StackOffset;
+    ULONG64 BackingStoreOffset;
+    ULONG64 FuncTableEntry;
+    ULONG64 Params[4];
+    ULONG64 Reserved[5];
+    WINBOOL Virtual;
+    ULONG Reserved2;
+  } IMAGEHLP_STACK_FRAME,*PIMAGEHLP_STACK_FRAME;
+
+  typedef VOID IMAGEHLP_CONTEXT,*PIMAGEHLP_CONTEXT;
+
+  WINBOOL IMAGEAPI SymSetContext(HANDLE hProcess,PIMAGEHLP_STACK_FRAME StackFrame,PIMAGEHLP_CONTEXT Context);
+  WINBOOL IMAGEAPI SymFromAddr(HANDLE hProcess,DWORD64 Address,PDWORD64 Displacement,PSYMBOL_INFO Symbol);
+  WINBOOL IMAGEAPI SymFromAddrW(HANDLE hProcess,DWORD64 Address,PDWORD64 Displacement,PSYMBOL_INFOW Symbol);
+  WINBOOL IMAGEAPI SymFromToken(HANDLE hProcess,DWORD64 Base,DWORD Token,PSYMBOL_INFO Symbol);
+  WINBOOL IMAGEAPI SymFromTokenW(HANDLE hProcess,DWORD64 Base,DWORD Token,PSYMBOL_INFOW Symbol);
+  WINBOOL IMAGEAPI SymFromName(HANDLE hProcess,PCSTR Name,PSYMBOL_INFO Symbol);
+  WINBOOL IMAGEAPI SymFromNameW(HANDLE hProcess,PCWSTR Name,PSYMBOL_INFOW Symbol);
+
+  typedef WINBOOL (CALLBACK *PSYM_ENUMERATESYMBOLS_CALLBACK)(PSYMBOL_INFO pSymInfo,ULONG SymbolSize,PVOID UserContext);
+  typedef WINBOOL (CALLBACK *PSYM_ENUMERATESYMBOLS_CALLBACKW)(PSYMBOL_INFOW pSymInfo,ULONG SymbolSize,PVOID UserContext);
+
+  WINBOOL IMAGEAPI SymEnumSymbols(HANDLE hProcess,ULONG64 BaseOfDll,PCSTR Mask,PSYM_ENUMERATESYMBOLS_CALLBACK EnumSymbolsCallback,PVOID UserContext);
+  WINBOOL IMAGEAPI SymEnumSymbolsW(HANDLE hProcess,ULONG64 BaseOfDll,PCWSTR Mask,PSYM_ENUMERATESYMBOLS_CALLBACKW EnumSymbolsCallback,PVOID UserContext);
+  WINBOOL IMAGEAPI SymEnumSymbolsForAddr(HANDLE hProcess,DWORD64 Address,PSYM_ENUMERATESYMBOLS_CALLBACK EnumSymbolsCallback,PVOID UserContext);
+  WINBOOL IMAGEAPI SymEnumSymbolsForAddrW(HANDLE hProcess,DWORD64 Address,PSYM_ENUMERATESYMBOLS_CALLBACKW EnumSymbolsCallback,PVOID UserContext);
+
+#define SYMENUMFLAG_FULLSRCH 1
+#define SYMENUMFLAG_SPEEDSRCH 2
+
+  typedef enum _IMAGEHLP_SYMBOL_TYPE_INFO {
+    TI_GET_SYMTAG,
+    TI_GET_SYMNAME,
+    TI_GET_LENGTH,
+    TI_GET_TYPE,
+    TI_GET_TYPEID,
+    TI_GET_BASETYPE,
+    TI_GET_ARRAYINDEXTYPEID,
+    TI_FINDCHILDREN,
+    TI_GET_DATAKIND,
+    TI_GET_ADDRESSOFFSET,
+    TI_GET_OFFSET,
+    TI_GET_VALUE,
+    TI_GET_COUNT,
+    TI_GET_CHILDRENCOUNT,
+    TI_GET_BITPOSITION,
+    TI_GET_VIRTUALBASECLASS,
+    TI_GET_VIRTUALTABLESHAPEID,
+    TI_GET_VIRTUALBASEPOINTEROFFSET,
+    TI_GET_CLASSPARENTID,
+    TI_GET_NESTED,
+    TI_GET_SYMINDEX,
+    TI_GET_LEXICALPARENT,
+    TI_GET_ADDRESS,
+    TI_GET_THISADJUST,
+    TI_GET_UDTKIND,
+    TI_IS_EQUIV_TO,
+    TI_GET_CALLING_CONVENTION
+  } IMAGEHLP_SYMBOL_TYPE_INFO;
+
+  typedef struct _TI_FINDCHILDREN_PARAMS {
+    ULONG Count;
+    ULONG Start;
+    ULONG ChildId[1];
+  } TI_FINDCHILDREN_PARAMS;
+
+  WINBOOL IMAGEAPI SymGetTypeInfo(HANDLE hProcess,DWORD64 ModBase,ULONG TypeId,IMAGEHLP_SYMBOL_TYPE_INFO GetType,PVOID pInfo);
+  WINBOOL IMAGEAPI SymEnumTypes(HANDLE hProcess,ULONG64 BaseOfDll,PSYM_ENUMERATESYMBOLS_CALLBACK EnumSymbolsCallback,PVOID UserContext);
+  WINBOOL IMAGEAPI SymEnumTypesW(HANDLE hProcess,ULONG64 BaseOfDll,PSYM_ENUMERATESYMBOLS_CALLBACKW EnumSymbolsCallback,PVOID UserContext);
+  WINBOOL IMAGEAPI SymGetTypeFromName(HANDLE hProcess,ULONG64 BaseOfDll,PCSTR Name,PSYMBOL_INFO Symbol);
+  WINBOOL IMAGEAPI SymGetTypeFromNameW(HANDLE hProcess,ULONG64 BaseOfDll,PCWSTR Name,PSYMBOL_INFOW Symbol);
+  WINBOOL IMAGEAPI SymAddSymbol(HANDLE hProcess,ULONG64 BaseOfDll,PCSTR Name,DWORD64 Address,DWORD Size,DWORD Flags);
+  WINBOOL IMAGEAPI SymAddSymbolW(HANDLE hProcess,ULONG64 BaseOfDll,PCWSTR Name,DWORD64 Address,DWORD Size,DWORD Flags);
+  WINBOOL IMAGEAPI SymDeleteSymbol(HANDLE hProcess,ULONG64 BaseOfDll,PCSTR Name,DWORD64 Address,DWORD Flags);
+  WINBOOL IMAGEAPI SymDeleteSymbolW(HANDLE hProcess,ULONG64 BaseOfDll,PCWSTR Name,DWORD64 Address,DWORD Flags);
+
+  typedef WINBOOL (WINAPI *PDBGHELP_CREATE_USER_DUMP_CALLBACK)(DWORD DataType,PVOID *Data,LPDWORD DataLength,PVOID UserData);
+
+  WINBOOL WINAPI DbgHelpCreateUserDump(LPCSTR FileName,PDBGHELP_CREATE_USER_DUMP_CALLBACK Callback,PVOID UserData);
+  WINBOOL WINAPI DbgHelpCreateUserDumpW(LPCWSTR FileName,PDBGHELP_CREATE_USER_DUMP_CALLBACK Callback,PVOID UserData);
+  WINBOOL IMAGEAPI SymGetSymFromAddr64(HANDLE hProcess,DWORD64 qwAddr,PDWORD64 pdwDisplacement,PIMAGEHLP_SYMBOL64 Symbol);
+
+#ifdef _IMAGEHLP64
+#define SymGetSymFromAddr SymGetSymFromAddr64
+#else
+  WINBOOL IMAGEAPI SymGetSymFromAddr(HANDLE hProcess,DWORD dwAddr,PDWORD pdwDisplacement,PIMAGEHLP_SYMBOL Symbol);
+#endif
+
+  WINBOOL IMAGEAPI SymGetSymFromName64(HANDLE hProcess,PCSTR Name,PIMAGEHLP_SYMBOL64 Symbol);
+
+#ifdef _IMAGEHLP64
+#define SymGetSymFromName SymGetSymFromName64
+#else
+  WINBOOL IMAGEAPI SymGetSymFromName(HANDLE hProcess,PCSTR Name,PIMAGEHLP_SYMBOL Symbol);
+#endif
+
+  DBHLP_DEPRECIATED WINBOOL IMAGEAPI FindFileInPath(HANDLE hprocess,PCSTR SearchPath,PCSTR FileName,PVOID id,DWORD two,DWORD three,DWORD flags,PSTR FilePath);
+  DBHLP_DEPRECIATED WINBOOL IMAGEAPI FindFileInSearchPath(HANDLE hprocess,PCSTR SearchPath,PCSTR FileName,DWORD one,DWORD two,DWORD three,PSTR FilePath);
+  DBHLP_DEPRECIATED WINBOOL IMAGEAPI SymEnumSym(HANDLE hProcess,ULONG64 BaseOfDll,PSYM_ENUMERATESYMBOLS_CALLBACK EnumSymbolsCallback,PVOID UserContext);
+
+#define SYMF_OMAP_GENERATED 0x00000001
+#define SYMF_OMAP_MODIFIED 0x00000002
+#define SYMF_REGISTER 0x00000008
+#define SYMF_REGREL 0x00000010
+#define SYMF_FRAMEREL 0x00000020
+#define SYMF_PARAMETER 0x00000040
+#define SYMF_LOCAL 0x00000080
+#define SYMF_CONSTANT 0x00000100
+#define SYMF_EXPORT 0x00000200
+#define SYMF_FORWARDER 0x00000400
+#define SYMF_FUNCTION 0x00000800
+#define SYMF_VIRTUAL 0x00001000
+#define SYMF_THUNK 0x00002000
+#define SYMF_TLSREL 0x00004000
+
+#define IMAGEHLP_SYMBOL_INFO_VALUEPRESENT 1
+#define IMAGEHLP_SYMBOL_INFO_REGISTER SYMF_REGISTER
+#define IMAGEHLP_SYMBOL_INFO_REGRELATIVE SYMF_REGREL
+#define IMAGEHLP_SYMBOL_INFO_FRAMERELATIVE SYMF_FRAMEREL
+#define IMAGEHLP_SYMBOL_INFO_PARAMETER SYMF_PARAMETER
+#define IMAGEHLP_SYMBOL_INFO_LOCAL SYMF_LOCAL
+#define IMAGEHLP_SYMBOL_INFO_CONSTANT SYMF_CONSTANT
+#define IMAGEHLP_SYMBOL_FUNCTION SYMF_FUNCTION
+#define IMAGEHLP_SYMBOL_VIRTUAL SYMF_VIRTUAL
+#define IMAGEHLP_SYMBOL_THUNK SYMF_THUNK
+#define IMAGEHLP_SYMBOL_INFO_TLSRELATIVE SYMF_TLSREL
+
+#include <pshpack4.h>
+
+#define MINIDUMP_SIGNATURE ('PMDM')
+#define MINIDUMP_VERSION (42899)
+  typedef DWORD RVA;
+  typedef ULONG64 RVA64;
+
+  typedef struct _MINIDUMP_LOCATION_DESCRIPTOR {
+    ULONG32 DataSize;
+    RVA Rva;
+  } MINIDUMP_LOCATION_DESCRIPTOR;
+
+  typedef struct _MINIDUMP_LOCATION_DESCRIPTOR64 {
+    ULONG64 DataSize;
+    RVA64 Rva;
+  } MINIDUMP_LOCATION_DESCRIPTOR64;
+
+  typedef struct _MINIDUMP_MEMORY_DESCRIPTOR {
+    ULONG64 StartOfMemoryRange;
+    MINIDUMP_LOCATION_DESCRIPTOR Memory;
+  } MINIDUMP_MEMORY_DESCRIPTOR,*PMINIDUMP_MEMORY_DESCRIPTOR;
+
+  typedef struct _MINIDUMP_MEMORY_DESCRIPTOR64 {
+    ULONG64 StartOfMemoryRange;
+    ULONG64 DataSize;
+  } MINIDUMP_MEMORY_DESCRIPTOR64,*PMINIDUMP_MEMORY_DESCRIPTOR64;
+
+  typedef struct _MINIDUMP_HEADER {
+    ULONG32 Signature;
+    ULONG32 Version;
+    ULONG32 NumberOfStreams;
+    RVA StreamDirectoryRva;
+    ULONG32 CheckSum;
+    __MINGW_EXTENSION union {
+      ULONG32 Reserved;
+      ULONG32 TimeDateStamp;
+    };
+    ULONG64 Flags;
+  } MINIDUMP_HEADER,*PMINIDUMP_HEADER;
+
+  typedef struct _MINIDUMP_DIRECTORY {
+    ULONG32 StreamType;
+    MINIDUMP_LOCATION_DESCRIPTOR Location;
+  } MINIDUMP_DIRECTORY,*PMINIDUMP_DIRECTORY;
+
+  typedef struct _MINIDUMP_STRING {
+    ULONG32 Length;
+    WCHAR Buffer[0];
+  } MINIDUMP_STRING,*PMINIDUMP_STRING;
+
+  typedef enum _MINIDUMP_STREAM_TYPE {
+    UnusedStream = 0,
+    ReservedStream0 = 1,
+    ReservedStream1 = 2,
+    ThreadListStream = 3,
+    ModuleListStream = 4,
+    MemoryListStream = 5,
+    ExceptionStream = 6,
+    SystemInfoStream = 7,
+    ThreadExListStream = 8,
+    Memory64ListStream = 9,
+    CommentStreamA = 10,
+    CommentStreamW = 11,
+    HandleDataStream = 12,
+    FunctionTableStream = 13,
+    UnloadedModuleListStream = 14,
+    MiscInfoStream = 15,
+    LastReservedStream = 0xffff
+  } MINIDUMP_STREAM_TYPE;
+
+  typedef union _CPU_INFORMATION {
+    struct {
+      ULONG32 VendorId[3];
+      ULONG32 VersionInformation;
+      ULONG32 FeatureInformation;
+      ULONG32 AMDExtendedCpuFeatures;
+    } X86CpuInfo;
+    struct {
+      ULONG64 ProcessorFeatures[2];
+    } OtherCpuInfo;
+  } CPU_INFORMATION,*PCPU_INFORMATION;
+
+  typedef struct _MINIDUMP_SYSTEM_INFO {
+    USHORT ProcessorArchitecture;
+    USHORT ProcessorLevel;
+    USHORT ProcessorRevision;
+    __MINGW_EXTENSION union {
+      USHORT Reserved0;
+      __MINGW_EXTENSION struct {
+	UCHAR NumberOfProcessors;
+	UCHAR ProductType;
+      };
+    };
+    ULONG32 MajorVersion;
+    ULONG32 MinorVersion;
+    ULONG32 BuildNumber;
+    ULONG32 PlatformId;
+    RVA CSDVersionRva;
+    __MINGW_EXTENSION union {
+      ULONG32 Reserved1;
+      __MINGW_EXTENSION struct {
+	USHORT SuiteMask;
+	USHORT Reserved2;
+      };
+    };
+    CPU_INFORMATION Cpu;
+  } MINIDUMP_SYSTEM_INFO,*PMINIDUMP_SYSTEM_INFO;
+
+  C_ASSERT(sizeof(((PPROCESS_INFORMATION)0)->dwThreadId)==4);
+
+  typedef struct _MINIDUMP_THREAD {
+    ULONG32 ThreadId;
+    ULONG32 SuspendCount;
+    ULONG32 PriorityClass;
+    ULONG32 Priority;
+    ULONG64 Teb;
+    MINIDUMP_MEMORY_DESCRIPTOR Stack;
+    MINIDUMP_LOCATION_DESCRIPTOR ThreadContext;
+  } MINIDUMP_THREAD,*PMINIDUMP_THREAD;
+
+  typedef struct _MINIDUMP_THREAD_LIST {
+    ULONG32 NumberOfThreads;
+    MINIDUMP_THREAD Threads[0];
+  } MINIDUMP_THREAD_LIST,*PMINIDUMP_THREAD_LIST;
+
+  typedef struct _MINIDUMP_THREAD_EX {
+    ULONG32 ThreadId;
+    ULONG32 SuspendCount;
+    ULONG32 PriorityClass;
+    ULONG32 Priority;
+    ULONG64 Teb;
+    MINIDUMP_MEMORY_DESCRIPTOR Stack;
+    MINIDUMP_LOCATION_DESCRIPTOR ThreadContext;
+    MINIDUMP_MEMORY_DESCRIPTOR BackingStore;
+  } MINIDUMP_THREAD_EX,*PMINIDUMP_THREAD_EX;
+
+  typedef struct _MINIDUMP_THREAD_EX_LIST {
+    ULONG32 NumberOfThreads;
+    MINIDUMP_THREAD_EX Threads[0];
+  } MINIDUMP_THREAD_EX_LIST,*PMINIDUMP_THREAD_EX_LIST;
+
+  typedef struct _MINIDUMP_EXCEPTION {
+    ULONG32 ExceptionCode;
+    ULONG32 ExceptionFlags;
+    ULONG64 ExceptionRecord;
+    ULONG64 ExceptionAddress;
+    ULONG32 NumberParameters;
+    ULONG32 __unusedAlignment;
+    ULONG64 ExceptionInformation[EXCEPTION_MAXIMUM_PARAMETERS];
+  } MINIDUMP_EXCEPTION,*PMINIDUMP_EXCEPTION;
+
+  typedef struct MINIDUMP_EXCEPTION_STREAM {
+    ULONG32 ThreadId;
+    ULONG32 __alignment;
+    MINIDUMP_EXCEPTION ExceptionRecord;
+    MINIDUMP_LOCATION_DESCRIPTOR ThreadContext;
+  } MINIDUMP_EXCEPTION_STREAM,*PMINIDUMP_EXCEPTION_STREAM;
+
+  typedef struct _MINIDUMP_MODULE {
+    ULONG64 BaseOfImage;
+    ULONG32 SizeOfImage;
+    ULONG32 CheckSum;
+    ULONG32 TimeDateStamp;
+    RVA ModuleNameRva;
+    VS_FIXEDFILEINFO VersionInfo;
+    MINIDUMP_LOCATION_DESCRIPTOR CvRecord;
+    MINIDUMP_LOCATION_DESCRIPTOR MiscRecord;
+    ULONG64 Reserved0;
+    ULONG64 Reserved1;
+  } MINIDUMP_MODULE,*PMINIDUMP_MODULE;
+
+  typedef struct _MINIDUMP_MODULE_LIST {
+    ULONG32 NumberOfModules;
+    MINIDUMP_MODULE Modules[0];
+  } MINIDUMP_MODULE_LIST,*PMINIDUMP_MODULE_LIST;
+
+  typedef struct _MINIDUMP_MEMORY_LIST {
+    ULONG32 NumberOfMemoryRanges;
+    MINIDUMP_MEMORY_DESCRIPTOR MemoryRanges[0];
+  } MINIDUMP_MEMORY_LIST,*PMINIDUMP_MEMORY_LIST;
+
+  typedef struct _MINIDUMP_MEMORY64_LIST {
+    ULONG64 NumberOfMemoryRanges;
+    RVA64 BaseRva;
+    MINIDUMP_MEMORY_DESCRIPTOR64 MemoryRanges[0];
+  } MINIDUMP_MEMORY64_LIST,*PMINIDUMP_MEMORY64_LIST;
+
+  typedef struct _MINIDUMP_EXCEPTION_INFORMATION {
+    DWORD ThreadId;
+    PEXCEPTION_POINTERS ExceptionPointers;
+    WINBOOL ClientPointers;
+  } MINIDUMP_EXCEPTION_INFORMATION,*PMINIDUMP_EXCEPTION_INFORMATION;
+
+  typedef struct _MINIDUMP_EXCEPTION_INFORMATION64 {
+    DWORD ThreadId;
+    ULONG64 ExceptionRecord;
+    ULONG64 ContextRecord;
+    WINBOOL ClientPointers;
+  } MINIDUMP_EXCEPTION_INFORMATION64,*PMINIDUMP_EXCEPTION_INFORMATION64;
+
+  typedef struct _MINIDUMP_HANDLE_DESCRIPTOR {
+    ULONG64 Handle;
+    RVA TypeNameRva;
+    RVA ObjectNameRva;
+    ULONG32 Attributes;
+    ULONG32 GrantedAccess;
+    ULONG32 HandleCount;
+    ULONG32 PointerCount;
+  } MINIDUMP_HANDLE_DESCRIPTOR,*PMINIDUMP_HANDLE_DESCRIPTOR;
+
+  typedef struct _MINIDUMP_HANDLE_DATA_STREAM {
+    ULONG32 SizeOfHeader;
+    ULONG32 SizeOfDescriptor;
+    ULONG32 NumberOfDescriptors;
+    ULONG32 Reserved;
+  } MINIDUMP_HANDLE_DATA_STREAM,*PMINIDUMP_HANDLE_DATA_STREAM;
+
+  typedef struct _MINIDUMP_FUNCTION_TABLE_DESCRIPTOR {
+    ULONG64 MinimumAddress;
+    ULONG64 MaximumAddress;
+    ULONG64 BaseAddress;
+    ULONG32 EntryCount;
+    ULONG32 SizeOfAlignPad;
+  } MINIDUMP_FUNCTION_TABLE_DESCRIPTOR,*PMINIDUMP_FUNCTION_TABLE_DESCRIPTOR;
+
+  typedef struct _MINIDUMP_FUNCTION_TABLE_STREAM {
+    ULONG32 SizeOfHeader;
+    ULONG32 SizeOfDescriptor;
+    ULONG32 SizeOfNativeDescriptor;
+    ULONG32 SizeOfFunctionEntry;
+    ULONG32 NumberOfDescriptors;
+    ULONG32 SizeOfAlignPad;
+  } MINIDUMP_FUNCTION_TABLE_STREAM,*PMINIDUMP_FUNCTION_TABLE_STREAM;
+
+  typedef struct _MINIDUMP_UNLOADED_MODULE {
+    ULONG64 BaseOfImage;
+    ULONG32 SizeOfImage;
+    ULONG32 CheckSum;
+    ULONG32 TimeDateStamp;
+    RVA ModuleNameRva;
+  } MINIDUMP_UNLOADED_MODULE,*PMINIDUMP_UNLOADED_MODULE;
+
+  typedef struct _MINIDUMP_UNLOADED_MODULE_LIST {
+    ULONG32 SizeOfHeader;
+    ULONG32 SizeOfEntry;
+    ULONG32 NumberOfEntries;
+  } MINIDUMP_UNLOADED_MODULE_LIST,*PMINIDUMP_UNLOADED_MODULE_LIST;
+
+#define MINIDUMP_MISC1_PROCESS_ID 0x00000001
+#define MINIDUMP_MISC1_PROCESS_TIMES 0x00000002
+#define MINIDUMP_MISC1_PROCESSOR_POWER_INFO 0x00000004
+
+  typedef struct _MINIDUMP_MISC_INFO {
+    ULONG32 SizeOfInfo;
+    ULONG32 Flags1;
+    ULONG32 ProcessId;
+    ULONG32 ProcessCreateTime;
+    ULONG32 ProcessUserTime;
+    ULONG32 ProcessKernelTime;
+  } MINIDUMP_MISC_INFO,*PMINIDUMP_MISC_INFO;
+
+  typedef struct _MINIDUMP_USER_RECORD {
+    ULONG32 Type;
+    MINIDUMP_LOCATION_DESCRIPTOR Memory;
+  } MINIDUMP_USER_RECORD,*PMINIDUMP_USER_RECORD;
+
+  typedef struct _MINIDUMP_USER_STREAM {
+    ULONG32 Type;
+    ULONG BufferSize;
+    PVOID Buffer;
+  } MINIDUMP_USER_STREAM,*PMINIDUMP_USER_STREAM;
+
+  typedef struct _MINIDUMP_USER_STREAM_INFORMATION {
+    ULONG UserStreamCount;
+    PMINIDUMP_USER_STREAM UserStreamArray;
+  } MINIDUMP_USER_STREAM_INFORMATION,*PMINIDUMP_USER_STREAM_INFORMATION;
+
+  typedef enum _MINIDUMP_CALLBACK_TYPE {
+    ModuleCallback,
+    ThreadCallback,
+    ThreadExCallback,
+    IncludeThreadCallback,
+    IncludeModuleCallback,
+    MemoryCallback
+  } MINIDUMP_CALLBACK_TYPE;
+
+  typedef struct _MINIDUMP_THREAD_CALLBACK {
+    ULONG ThreadId;
+    HANDLE ThreadHandle;
+    CONTEXT Context;
+    ULONG SizeOfContext;
+    ULONG64 StackBase;
+    ULONG64 StackEnd;
+  } MINIDUMP_THREAD_CALLBACK,*PMINIDUMP_THREAD_CALLBACK;
+
+  typedef struct _MINIDUMP_THREAD_EX_CALLBACK {
+    ULONG ThreadId;
+    HANDLE ThreadHandle;
+    CONTEXT Context;
+    ULONG SizeOfContext;
+    ULONG64 StackBase;
+    ULONG64 StackEnd;
+    ULONG64 BackingStoreBase;
+    ULONG64 BackingStoreEnd;
+  } MINIDUMP_THREAD_EX_CALLBACK,*PMINIDUMP_THREAD_EX_CALLBACK;
+
+  typedef struct _MINIDUMP_INCLUDE_THREAD_CALLBACK {
+    ULONG ThreadId;
+  } MINIDUMP_INCLUDE_THREAD_CALLBACK,*PMINIDUMP_INCLUDE_THREAD_CALLBACK;
+
+  typedef enum _THREAD_WRITE_FLAGS {
+    ThreadWriteThread              = 0x0001,
+    ThreadWriteStack               = 0x0002,
+    ThreadWriteContext             = 0x0004,
+    ThreadWriteBackingStore        = 0x0008,
+    ThreadWriteInstructionWindow   = 0x0010,
+    ThreadWriteThreadData          = 0x0020,
+    ThreadWriteThreadInfo          = 0x0040
+  } THREAD_WRITE_FLAGS;
+
+  typedef struct _MINIDUMP_MODULE_CALLBACK {
+    PWCHAR FullPath;
+    ULONG64 BaseOfImage;
+    ULONG SizeOfImage;
+    ULONG CheckSum;
+    ULONG TimeDateStamp;
+    VS_FIXEDFILEINFO VersionInfo;
+    PVOID CvRecord;
+    ULONG SizeOfCvRecord;
+    PVOID MiscRecord;
+    ULONG SizeOfMiscRecord;
+  } MINIDUMP_MODULE_CALLBACK,*PMINIDUMP_MODULE_CALLBACK;
+
+  typedef struct _MINIDUMP_INCLUDE_MODULE_CALLBACK {
+    ULONG64 BaseOfImage;
+  } MINIDUMP_INCLUDE_MODULE_CALLBACK,*PMINIDUMP_INCLUDE_MODULE_CALLBACK;
+
+  typedef enum _MODULE_WRITE_FLAGS {
+    ModuleWriteModule          = 0x0001,
+    ModuleWriteDataSeg         = 0x0002,
+    ModuleWriteMiscRecord      = 0x0004,
+    ModuleWriteCvRecord        = 0x0008,
+    ModuleReferencedByMemory   = 0x0010,
+    ModuleWriteTlsData         = 0x0020,
+    ModuleWriteCodeSegs        = 0x0040
+  } MODULE_WRITE_FLAGS;
+
+  typedef enum _MINIDUMP_SECONDARY_FLAGS {
+    MiniSecondaryWithoutPowerInfo   = 0x00000001
+  } MINIDUMP_SECONDARY_FLAGS;
+
+  typedef struct _MINIDUMP_CALLBACK_INPUT {
+    ULONG ProcessId;
+    HANDLE ProcessHandle;
+    ULONG CallbackType;
+    __MINGW_EXTENSION union {
+      MINIDUMP_THREAD_CALLBACK Thread;
+      MINIDUMP_THREAD_EX_CALLBACK ThreadEx;
+      MINIDUMP_MODULE_CALLBACK Module;
+      MINIDUMP_INCLUDE_THREAD_CALLBACK IncludeThread;
+      MINIDUMP_INCLUDE_MODULE_CALLBACK IncludeModule;
+    };
+  } MINIDUMP_CALLBACK_INPUT,*PMINIDUMP_CALLBACK_INPUT;
+
+typedef struct _MINIDUMP_MEMORY_INFO {
+  ULONG64 BaseAddress;
+  ULONG64 AllocationBase;
+  ULONG32 AllocationProtect;
+  ULONG32 __alignment1;
+  ULONG64 RegionSize;
+  ULONG32 State;
+  ULONG32 Protect;
+  ULONG32 Type;
+  ULONG32 __alignment2;
+} MINIDUMP_MEMORY_INFO, *PMINIDUMP_MEMORY_INFO;
+
+typedef struct _MINIDUMP_MISC_INFO_2 {
+  ULONG32 SizeOfInfo;
+  ULONG32 Flags1;
+  ULONG32 ProcessId;
+  ULONG32 ProcessCreateTime;
+  ULONG32 ProcessUserTime;
+  ULONG32 ProcessKernelTime;
+  ULONG32 ProcessorMaxMhz;
+  ULONG32 ProcessorCurrentMhz;
+  ULONG32 ProcessorMhzLimit;
+  ULONG32 ProcessorMaxIdleState;
+  ULONG32 ProcessorCurrentIdleState;
+} MINIDUMP_MISC_INFO_2, *PMINIDUMP_MISC_INFO_2;
+
+typedef struct _MINIDUMP_MEMORY_INFO_LIST {
+  ULONG   SizeOfHeader;
+  ULONG   SizeOfEntry;
+  ULONG64 NumberOfEntries;
+} MINIDUMP_MEMORY_INFO_LIST, *PMINIDUMP_MEMORY_INFO_LIST;
+
+  typedef struct _MINIDUMP_CALLBACK_OUTPUT {
+    __MINGW_EXTENSION union {
+      ULONG ModuleWriteFlags;
+      ULONG ThreadWriteFlags;
+      ULONG SecondaryFlags;
+      __MINGW_EXTENSION struct {
+	ULONG64 MemoryBase;
+	ULONG MemorySize;
+      };
+      __MINGW_EXTENSION struct {
+	WINBOOL CheckCancel;
+	WINBOOL Cancel;
+      };
+      HANDLE Handle;
+    };
+    __MINGW_EXTENSION struct {
+      MINIDUMP_MEMORY_INFO VmRegion;
+      WINBOOL Continue;
+    };
+    HRESULT Status;
+  } MINIDUMP_CALLBACK_OUTPUT, *PMINIDUMP_CALLBACK_OUTPUT;
+
+  typedef enum _MINIDUMP_TYPE {
+    MiniDumpNormal                           = 0x00000000,
+    MiniDumpWithDataSegs                     = 0x00000001,
+    MiniDumpWithFullMemory                   = 0x00000002,
+    MiniDumpWithHandleData                   = 0x00000004,
+    MiniDumpFilterMemory                     = 0x00000008,
+    MiniDumpScanMemory                       = 0x00000010,
+    MiniDumpWithUnloadedModules              = 0x00000020,
+    MiniDumpWithIndirectlyReferencedMemory   = 0x00000040,
+    MiniDumpFilterModulePaths                = 0x00000080,
+    MiniDumpWithProcessThreadData            = 0x00000100,
+    MiniDumpWithPrivateReadWriteMemory       = 0x00000200,
+    MiniDumpWithoutOptionalData              = 0x00000400,
+    MiniDumpWithFullMemoryInfo               = 0x00000800,
+    MiniDumpWithThreadInfo                   = 0x00001000,
+    MiniDumpWithCodeSegs                     = 0x00002000,
+    MiniDumpWithoutAuxiliaryState            = 0x00004000,
+    MiniDumpWithFullAuxiliaryState           = 0x00008000,
+    MiniDumpWithPrivateWriteCopyMemory       = 0x00010000,
+    MiniDumpIgnoreInaccessibleMemory         = 0x00020000,
+    MiniDumpWithTokenInformation             = 0x00040000
+  } MINIDUMP_TYPE;
+
+#define MINIDUMP_THREAD_INFO_ERROR_THREAD    0x00000001
+#define MINIDUMP_THREAD_INFO_WRITING_THREAD  0x00000002
+#define MINIDUMP_THREAD_INFO_EXITED_THREAD   0x00000004
+#define MINIDUMP_THREAD_INFO_INVALID_INFO    0x00000008
+#define MINIDUMP_THREAD_INFO_INVALID_CONTEXT 0x00000010
+#define MINIDUMP_THREAD_INFO_INVALID_TEB     0x00000020
+
+typedef struct _MINIDUMP_THREAD_INFO {
+  ULONG32 ThreadId;
+  ULONG32 DumpFlags;
+  ULONG32 DumpError;
+  ULONG32 ExitStatus;
+  ULONG64 CreateTime;
+  ULONG64 ExitTime;
+  ULONG64 KernelTime;
+  ULONG64 UserTime;
+  ULONG64 StartAddress;
+  ULONG64 Affinity;
+} MINIDUMP_THREAD_INFO, *PMINIDUMP_THREAD_INFO;
+
+typedef struct _MINIDUMP_THREAD_INFO_LIST {
+  ULONG   SizeOfHeader;
+  ULONG   SizeOfEntry;
+  ULONG   NumberOfEntries; /* FIXME: msdn says ULONG64 */
+} MINIDUMP_THREAD_INFO_LIST, *PMINIDUMP_THREAD_INFO_LIST;
+
+  typedef WINBOOL (WINAPI *MINIDUMP_CALLBACK_ROUTINE)(PVOID CallbackParam,CONST PMINIDUMP_CALLBACK_INPUT CallbackInput,PMINIDUMP_CALLBACK_OUTPUT CallbackOutput);
+
+  typedef struct _MINIDUMP_CALLBACK_INFORMATION {
+    MINIDUMP_CALLBACK_ROUTINE CallbackRoutine;
+    PVOID CallbackParam;
+  } MINIDUMP_CALLBACK_INFORMATION,*PMINIDUMP_CALLBACK_INFORMATION;
+
+#define RVA_TO_ADDR(Mapping,Rva) ((PVOID)(((ULONG_PTR) (Mapping)) + (Rva)))
+
+  WINBOOL WINAPI MiniDumpWriteDump(HANDLE hProcess,DWORD ProcessId,HANDLE hFile,MINIDUMP_TYPE DumpType,CONST PMINIDUMP_EXCEPTION_INFORMATION ExceptionParam,CONST PMINIDUMP_USER_STREAM_INFORMATION UserStreamParam,CONST PMINIDUMP_CALLBACK_INFORMATION 
+CallbackParam);
+  WINBOOL WINAPI MiniDumpReadDumpStream(PVOID BaseOfDump,ULONG StreamNumber,PMINIDUMP_DIRECTORY *Dir,PVOID *StreamPointer,ULONG *StreamSize);
+
+WINBOOL WINAPI EnumerateLoadedModulesEx(
+  HANDLE hProcess,
+  PENUMLOADED_MODULES_CALLBACK64 EnumLoadedModulesCallback,
+  PVOID UserContext
+);
+
+WINBOOL WINAPI EnumerateLoadedModulesExW(
+  HANDLE hProcess,
+  PENUMLOADED_MODULES_CALLBACKW64 EnumLoadedModulesCallback,
+  PVOID UserContext
+);
+
+WINBOOL WINAPI SymAddSourceStream(
+  HANDLE hProcess,
+  ULONG64 Base,
+  PCSTR StreamFile,
+  PBYTE Buffer,
+  size_t Size
+);
+
+WINBOOL WINAPI SymAddSourceStreamW(
+  HANDLE hProcess,
+  ULONG64 Base,
+  PCWSTR StreamFile,
+  PBYTE Buffer,
+  size_t Size
+);
+
+WINBOOL WINAPI SymEnumSourceLines(
+  HANDLE hProcess,
+  ULONG64 Base,
+  PCSTR Obj,
+  PCSTR File,
+  DWORD Line,
+  DWORD Flags,
+  PSYM_ENUMLINES_CALLBACK EnumLinesCallback,
+  PVOID UserContext
+);
+
+WINBOOL WINAPI SymEnumSourceLinesW(
+  HANDLE hProcess,
+  ULONG64 Base,
+  PCWSTR Obj,
+  PCWSTR File,
+  DWORD Line,
+  DWORD Flags,
+  PSYM_ENUMLINES_CALLBACKW EnumLinesCallback,
+  PVOID UserContext
+);
+
+WINBOOL WINAPI SymEnumTypesByName(
+  HANDLE hProcess,
+  ULONG64 BaseOfDll,
+  PCSTR mask,
+  PSYM_ENUMERATESYMBOLS_CALLBACK EnumSymbolsCallback,
+  PVOID UserContext
+);
+
+WINBOOL WINAPI SymEnumTypesByNameW(
+  HANDLE hProcess,
+  ULONG64 BaseOfDll,
+  PCSTR mask,
+  PSYM_ENUMERATESYMBOLS_CALLBACKW EnumSymbolsCallback,
+  PVOID UserContext
+);
+
+HANDLE WINAPI SymFindDebugInfoFile(
+  HANDLE hProcess,
+  PCSTR FileName,
+  PSTR DebugFilePath,
+  PFIND_DEBUG_FILE_CALLBACK Callback,
+  PVOID CallerData
+);
+
+HANDLE WINAPI SymFindDebugInfoFileW(
+  HANDLE hProcess,
+  PCWSTR FileName,
+  PWSTR DebugFilePath,
+  PFIND_DEBUG_FILE_CALLBACKW Callback,
+  PVOID CallerData
+);
+
+HANDLE WINAPI SymFindExecutableImage(
+  HANDLE hProcess,
+  PCSTR FileName,
+  PSTR ImageFilePath,
+  PFIND_EXE_FILE_CALLBACK Callback,
+  PVOID CallerData
+);
+
+HANDLE WINAPI SymFindExecutableImageW(
+  HANDLE hProcess,
+  PCWSTR FileName,
+  PWSTR ImageFilePath,
+  PFIND_EXE_FILE_CALLBACKW Callback,
+  PVOID CallerData
+);
+
+WINBOOL WINAPI SymFromIndex(
+  HANDLE hProcess,
+  ULONG64 BaseOfDll,
+  DWORD Index,
+  PSYMBOL_INFO Symbol
+);
+
+WINBOOL WINAPI SymFromIndexW(
+  HANDLE hProcess,
+  ULONG64 BaseOfDll,
+  DWORD Index,
+  PSYMBOL_INFOW Symbol
+);
+
+WINBOOL WINAPI SymGetScope(
+  HANDLE hProcess,
+  ULONG64 BaseOfDll,
+  DWORD Index,
+  PSYMBOL_INFO Symbol
+);
+
+WINBOOL WINAPI SymGetScopeW(
+  HANDLE hProcess,
+  ULONG64 BaseOfDll,
+  DWORD Index,
+  PSYMBOL_INFOW Symbol
+);
+
+WINBOOL WINAPI SymGetSourceFileFromToken(
+  HANDLE hProcess,
+  PVOID Token,
+  PCSTR Params,
+  PSTR FilePath,
+  DWORD Size
+);
+
+WINBOOL WINAPI SymGetSourceFileFromTokenW(
+  HANDLE hProcess,
+  PVOID Token,
+  PCWSTR Params,
+  PWSTR FilePath,
+  DWORD Size
+);
+
+WINBOOL WINAPI SymGetSourceFileToken(
+  HANDLE hProcess,
+  ULONG64 Base,
+  PCSTR FileSpec,
+  PVOID *Token,
+  DWORD *Size
+);
+
+WINBOOL WINAPI SymGetSourceFileTokenW(
+  HANDLE hProcess,
+  ULONG64 Base,
+  PCWSTR FileSpec,
+  PVOID *Token,
+  DWORD *Size
+);
+
+WINBOOL WINAPI SymGetSourceFile(
+  HANDLE hProcess,
+  ULONG64 Base,
+  PCSTR Params,
+  PCSTR FileSpec,
+  PSTR FilePath,
+  DWORD Size
+);
+
+WINBOOL WINAPI SymGetSourceFileW(
+  HANDLE hProcess,
+  ULONG64 Base,
+  PCWSTR Params,
+  PCWSTR FileSpec,
+  PWSTR FilePath,
+  DWORD Size
+);
+
+WINBOOL WINAPI SymGetSourceVarFromToken(
+  HANDLE hProcess,
+  PVOID Token,
+  PCSTR Params,
+  PCSTR VarName,
+  PSTR Value,
+  DWORD Size
+);
+
+WINBOOL WINAPI SymGetSourceVarFromTokenW(
+  HANDLE hProcess,
+  PVOID Token,
+  PCWSTR Params,
+  PCWSTR VarName,
+  PWSTR Value,
+  DWORD Size
+);
+
+WINBOOL WINAPI SymGetSymbolFile(
+  HANDLE hProcess,
+  PCSTR SymPath,
+  PCSTR ImageFile,
+  DWORD Type,
+  PSTR SymbolFile,
+  size_t cSymbolFile,
+  PSTR DbgFile,
+  size_t cDbgFile
+);
+
+WINBOOL WINAPI SymGetSymbolFileW(
+  HANDLE hProcess,
+  PCWSTR SymPath,
+  PCWSTR ImageFile,
+  DWORD Type,
+  PWSTR SymbolFile,
+  size_t cSymbolFile,
+  PWSTR DbgFile,
+  size_t cDbgFile
+);
+
+WINBOOL WINAPI SymNext(
+  HANDLE hProcess,
+  PSYMBOL_INFO Symbol
+);
+
+WINBOOL WINAPI SymNextW(
+  HANDLE hProcess,
+  PSYMBOL_INFOW Symbol
+);
+
+WINBOOL WINAPI SymPrev(
+  HANDLE hProcess,
+  PSYMBOL_INFO Symbol
+);
+
+WINBOOL WINAPI SymPrevW(
+  HANDLE hProcess,
+  PSYMBOL_INFOW Symbol
+);
+
+WINBOOL WINAPI SymRefreshModuleList(
+  HANDLE hProcess
+);
+
+#define SYMSEARCH_MASKOBJS 0x01
+#define SYMSEARCH_RECURSE 0x02
+#define SYMSEARCH_GLOBALSONLY 0x04
+#define SYMSEARCH_ALLITEMS 0x08
+
+WINBOOL WINAPI SymSearch(
+  HANDLE hProcess,
+  ULONG64 BaseOfDll,
+  DWORD Index,
+  DWORD SymTag,
+  PCSTR Mask,
+  DWORD64 Address,
+  PSYM_ENUMERATESYMBOLS_CALLBACK EnumSymbolsCallback,
+  PVOID UserContext,
+  DWORD Options
+);
+
+WINBOOL WINAPI SymSearchW(
+  HANDLE hProcess,
+  ULONG64 BaseOfDll,
+  DWORD Index,
+  DWORD SymTag,
+  PCWSTR Mask,
+  DWORD64 Address,
+  PSYM_ENUMERATESYMBOLS_CALLBACKW EnumSymbolsCallback,
+  PVOID UserContext,
+  DWORD Options
+);
+
+PCSTR WINAPI SymSrvDeltaName(
+  HANDLE hProcess,
+  PCSTR SymPath,
+  PCSTR Type,
+  PCSTR File1,
+  PCSTR File2
+);
+
+PCWSTR WINAPI SymSrvDeltaNameW(
+  HANDLE hProcess,
+  PCWSTR SymPath,
+  PCWSTR Type,
+  PCWSTR File1,
+  PCWSTR File2
+);
+
+WINBOOL WINAPI SymSrvGetFileIndexString(
+  HANDLE hProcess,
+  PCSTR SrvPath,
+  PCSTR File,
+  PSTR Index,
+  size_t Size,
+  DWORD Flags
+);
+
+WINBOOL WINAPI SymSrvGetFileIndexStringW(
+  HANDLE hProcess,
+  PCWSTR SrvPath,
+  PCWSTR File,
+  PWSTR Index,
+  size_t Size,
+  DWORD Flags
+);
+
+#ifdef DBGHELP_TRANSLATE_TCHAR
+#define SymSrvGetFileIndexString SymSrvGetFileIndexStringW
+#endif
+
+WINBOOL WINAPI SymSrvGetFileIndexInfo(
+  PCSTR File,
+  PSYMSRV_INDEX_INFO Info,
+  DWORD Flags
+);
+
+WINBOOL WINAPI SymSrvGetFileIndexInfoW(
+  PCWSTR File,
+  PSYMSRV_INDEX_INFOW Info,
+  DWORD Flags
+);
+
+#ifdef DBGHELP_TRANSLATE_TCHAR
+#define SymSrvGetFileIndexInfo SymSrvGetFileIndexInfoW
+#endif
+
+WINBOOL WINAPI SymSrvGetFileIndexes(
+  PCTSTR File,
+  GUID *Id,
+  DWORD *Val1,
+  DWORD *Val2,
+  DWORD Flags
+);
+
+WINBOOL WINAPI SymSrvGetFileIndexesW(
+  PCWSTR File,
+  GUID *Id,
+  DWORD *Val1,
+  DWORD *Val2,
+  DWORD Flags
+);
+
+#ifdef DBGHELP_TRANSLATE_TCHAR
+#define SymSrvGetFileIndexes SymSrvGetFileIndexesW
+#endif
+
+PCSTR WINAPI SymSrvGetSupplement(
+  HANDLE hProcess,
+  PCSTR SymPath,
+  PCSTR Node,
+  PCSTR File
+);
+
+PCWSTR WINAPI SymSrvGetSupplementW(
+  HANDLE hProcess,
+  PCWSTR SymPath,
+  PCWSTR Node,
+  PCWSTR File
+);
+
+#ifdef DBGHELP_TRANSLATE_TCHAR
+#define SymSrvGetSupplement SymSrvGetSupplementW
+#endif
+
+WINBOOL WINAPI SymSrvIsStore(
+  HANDLE hProcess,
+  PCSTR path
+);
+
+WINBOOL WINAPI SymSrvIsStoreW(
+  HANDLE hProcess,
+  PCWSTR path
+);
+
+#ifdef DBGHELP_TRANSLATE_TCHAR
+#define SymSrvIsStore SymSrvIsStoreW
+#endif
+
+PCSTR WINAPI SymSrvStoreFile(
+  HANDLE hProcess,
+  PCSTR SrvPath,
+  PCSTR File,
+  DWORD Flags
+);
+
+PCWSTR WINAPI SymSrvStoreFileW(
+  HANDLE hProcess,
+  PCWSTR SrvPath,
+  PCWSTR File,
+  DWORD Flags
+);
+
+#define SYMSTOREOPT_COMPRESS 0x01
+#define SYMSTOREOPT_OVERWRITE 0x02
+#define SYMSTOREOPT_RETURNINDEX 0x04
+#define SYMSTOREOPT_POINTER 0x08
+#define SYMSTOREOPT_PASS_IF_EXISTS 0x40
+
+#ifdef DBGHELP_TRANSLATE_TCHAR
+#define SymSrvStoreFile SymSrvStoreFileW
+#endif
+
+PCSTR WINAPI SymSrvStoreSupplement(
+  HANDLE hProcess,
+  const PCTSTR SymPath,
+  PCSTR Node,
+  PCSTR File,
+  DWORD Flags
+);
+
+PCWSTR WINAPI SymSrvStoreSupplementW(
+  HANDLE hProcess,
+  const PCWSTR SymPath,
+  PCWSTR Node,
+  PCWSTR File,
+  DWORD Flags
+);
+
+#ifdef DBGHELP_TRANSLATE_TCHAR
+#define SymSrvStoreSupplement SymSrvStoreSupplementW
+#endif
+
+PCSTR WINAPI SymSrvDeltaName(
+  HANDLE hProcess,
+  PCSTR SymPath,
+  PCSTR Type,
+  PCSTR File1,
+  PCSTR File2
+);
+
+PCWSTR WINAPI SymSrvDeltaNameW(
+  HANDLE hProcess,
+  PCWSTR SymPath,
+  PCWSTR Type,
+  PCWSTR File1,
+  PCWSTR File2
+);
+
+#ifdef DBGHELP_TRANSLATE_TCHAR
+#define SymSrvDeltaName SymSrvDeltaNameW
+#endif
+
+
+#include <poppack.h>
+