Home | History | Annotate | Download | only in psdk_inc
      1 /**
      2  * This file has no copyright assigned and is placed in the Public Domain.
      3  * This file is part of the mingw-w64 runtime package.
      4  * No warranty is given; refer to the file DISCLAIMER.PD within this package.
      5  */
      6 #pragma once
      7 
      8 #ifdef __cplusplus
      9 extern "C" {
     10 #endif
     11 
     12   typedef WINBOOL (CALLBACK *PFIND_DEBUG_FILE_CALLBACK)(HANDLE FileHandle,PCSTR FileName,PVOID CallerData);
     13   typedef WINBOOL (CALLBACK *PFIND_DEBUG_FILE_CALLBACKW)(HANDLE FileHandle,PCWSTR FileName,PVOID CallerData);
     14   typedef WINBOOL (CALLBACK *PFINDFILEINPATHCALLBACK)(PCSTR filename,PVOID context);
     15   typedef WINBOOL (CALLBACK *PFINDFILEINPATHCALLBACKW)(PCWSTR filename,PVOID context);
     16   typedef WINBOOL (CALLBACK *PFIND_EXE_FILE_CALLBACK)(HANDLE FileHandle,PCSTR FileName,PVOID CallerData);
     17   typedef WINBOOL (CALLBACK *PFIND_EXE_FILE_CALLBACKW)(HANDLE FileHandle,PCWSTR FileName,PVOID CallerData);
     18 
     19   typedef WINBOOL (WINAPI *PSYMBOLSERVERPROC)(LPCSTR,LPCSTR,PVOID,DWORD,DWORD,LPSTR);
     20   typedef WINBOOL (WINAPI *PSYMBOLSERVEROPENPROC)(VOID);
     21   typedef WINBOOL (WINAPI *PSYMBOLSERVERCLOSEPROC)(VOID);
     22   typedef WINBOOL (WINAPI *PSYMBOLSERVERSETOPTIONSPROC)(UINT_PTR,ULONG64);
     23   typedef WINBOOL (CALLBACK WINAPI *PSYMBOLSERVERCALLBACKPROC)(UINT_PTR action,ULONG64 data,ULONG64 context);
     24   typedef UINT_PTR (WINAPI *PSYMBOLSERVERGETOPTIONSPROC)();
     25   typedef WINBOOL (WINAPI *PSYMBOLSERVERPINGPROC)(LPCSTR);
     26 
     27   HANDLE IMAGEAPI FindDebugInfoFile(PCSTR FileName,PCSTR SymbolPath,PSTR DebugFilePath);
     28   HANDLE IMAGEAPI FindDebugInfoFileEx(PCSTR FileName,PCSTR SymbolPath,PSTR DebugFilePath,PFIND_DEBUG_FILE_CALLBACK Callback,PVOID CallerData);
     29   HANDLE IMAGEAPI FindDebugInfoFileExW(PCWSTR FileName,PCWSTR SymbolPath,PWSTR DebugFilePath,PFIND_DEBUG_FILE_CALLBACKW Callback,PVOID CallerData);
     30   WINBOOL IMAGEAPI SymFindFileInPath(HANDLE hprocess,PCSTR SearchPath,PCSTR FileName,PVOID id,DWORD two,DWORD three,DWORD flags,LPSTR FoundFile,PFINDFILEINPATHCALLBACK callback,PVOID context);
     31   WINBOOL IMAGEAPI SymFindFileInPathW(HANDLE hprocess,PCWSTR SearchPath,PCWSTR FileName,PVOID id,DWORD two,DWORD three,DWORD flags,LPSTR FoundFile,PFINDFILEINPATHCALLBACKW callback,PVOID context);
     32   HANDLE IMAGEAPI FindExecutableImage(PCSTR FileName,PCSTR SymbolPath,PSTR ImageFilePath);
     33   HANDLE IMAGEAPI FindExecutableImageEx(PCSTR FileName,PCSTR SymbolPath,PSTR ImageFilePath,PFIND_EXE_FILE_CALLBACK Callback,PVOID CallerData);
     34   HANDLE IMAGEAPI FindExecutableImageExW(PCWSTR FileName,PCWSTR SymbolPath,PWSTR ImageFilePath,PFIND_EXE_FILE_CALLBACKW Callback,PVOID CallerData);
     35   PIMAGE_NT_HEADERS IMAGEAPI ImageNtHeader(PVOID Base);
     36   PVOID IMAGEAPI ImageDirectoryEntryToDataEx(PVOID Base,BOOLEAN MappedAsImage,USHORT DirectoryEntry,PULONG Size,PIMAGE_SECTION_HEADER *FoundHeader);
     37   PVOID IMAGEAPI ImageDirectoryEntryToData(PVOID Base,BOOLEAN MappedAsImage,USHORT DirectoryEntry,PULONG Size);
     38   PIMAGE_SECTION_HEADER IMAGEAPI ImageRvaToSection(PIMAGE_NT_HEADERS NtHeaders,PVOID Base,ULONG Rva);
     39   PVOID IMAGEAPI ImageRvaToVa(PIMAGE_NT_HEADERS NtHeaders,PVOID Base,ULONG Rva,PIMAGE_SECTION_HEADER *LastRvaSection);
     40 
     41 #define SSRVOPT_CALLBACK 0x0001
     42 #define SSRVOPT_DWORD 0x0002
     43 #define SSRVOPT_DWORDPTR 0x0004
     44 #define SSRVOPT_GUIDPTR 0x0008
     45 #define SSRVOPT_OLDGUIDPTR 0x0010
     46 #define SSRVOPT_UNATTENDED 0x0020
     47 #define SSRVOPT_NOCOPY 0x0040
     48 #define SSRVOPT_PARENTWIN 0x0080
     49 #define SSRVOPT_PARAMTYPE 0x0100
     50 #define SSRVOPT_SECURE 0x0200
     51 #define SSRVOPT_TRACE 0x0400
     52 #define SSRVOPT_SETCONTEXT 0x0800
     53 #define SSRVOPT_PROXY 0x1000
     54 #define SSRVOPT_DOWNSTREAM_STORE 0x2000
     55 #define SSRVOPT_RESET ((ULONG_PTR)-1)
     56 
     57 #define SSRVACTION_TRACE 1
     58 #define SSRVACTION_QUERYCANCEL 2
     59 #define SSRVACTION_EVENT 3
     60 
     61 #ifndef _WIN64
     62   typedef struct _IMAGE_DEBUG_INFORMATION {
     63     LIST_ENTRY List;
     64     DWORD ReservedSize;
     65     PVOID ReservedMappedBase;
     66     USHORT ReservedMachine;
     67     USHORT ReservedCharacteristics;
     68     DWORD ReservedCheckSum;
     69     DWORD ImageBase;
     70     DWORD SizeOfImage;
     71     DWORD ReservedNumberOfSections;
     72     PIMAGE_SECTION_HEADER ReservedSections;
     73     DWORD ReservedExportedNamesSize;
     74     PSTR ReservedExportedNames;
     75     DWORD ReservedNumberOfFunctionTableEntries;
     76     PIMAGE_FUNCTION_ENTRY ReservedFunctionTableEntries;
     77     DWORD ReservedLowestFunctionStartingAddress;
     78     DWORD ReservedHighestFunctionEndingAddress;
     79     DWORD ReservedNumberOfFpoTableEntries;
     80     PFPO_DATA ReservedFpoTableEntries;
     81     DWORD SizeOfCoffSymbols;
     82     PIMAGE_COFF_SYMBOLS_HEADER CoffSymbols;
     83     DWORD ReservedSizeOfCodeViewSymbols;
     84     PVOID ReservedCodeViewSymbols;
     85     PSTR ImageFilePath;
     86     PSTR ImageFileName;
     87     PSTR ReservedDebugFilePath;
     88     DWORD ReservedTimeDateStamp;
     89     WINBOOL ReservedRomImage;
     90     PIMAGE_DEBUG_DIRECTORY ReservedDebugDirectory;
     91     DWORD ReservedNumberOfDebugDirectories;
     92     DWORD ReservedOriginalFunctionTableBaseAddress;
     93     DWORD Reserved[2];
     94   } IMAGE_DEBUG_INFORMATION,*PIMAGE_DEBUG_INFORMATION;
     95 
     96   PIMAGE_DEBUG_INFORMATION IMAGEAPI MapDebugInformation(HANDLE FileHandle,PSTR FileName,PSTR SymbolPath,DWORD ImageBase);
     97   WINBOOL IMAGEAPI UnmapDebugInformation(PIMAGE_DEBUG_INFORMATION DebugInfo);
     98 #endif
     99 
    100   typedef WINBOOL (CALLBACK *PENUMDIRTREE_CALLBACK)(LPCSTR FilePath,PVOID CallerData);
    101 
    102   WINBOOL IMAGEAPI SearchTreeForFile(PSTR RootPath,PSTR InputPathName,PSTR OutputPathBuffer);
    103   WINBOOL IMAGEAPI SearchTreeForFileW(PWSTR RootPath,PWSTR InputPathName,PWSTR OutputPathBuffer);
    104   WINBOOL IMAGEAPI EnumDirTree(HANDLE hProcess,PSTR RootPath,PSTR InputPathName,PSTR OutputPathBuffer,PENUMDIRTREE_CALLBACK Callback,PVOID CallbackData);
    105   WINBOOL IMAGEAPI MakeSureDirectoryPathExists(PCSTR DirPath);
    106 
    107 #define UNDNAME_COMPLETE (0x0000)
    108 #define UNDNAME_NO_LEADING_UNDERSCORES (0x0001)
    109 #define UNDNAME_NO_MS_KEYWORDS (0x0002)
    110 #define UNDNAME_NO_FUNCTION_RETURNS (0x0004)
    111 #define UNDNAME_NO_ALLOCATION_MODEL (0x0008)
    112 #define UNDNAME_NO_ALLOCATION_LANGUAGE (0x0010)
    113 #define UNDNAME_NO_MS_THISTYPE (0x0020)
    114 #define UNDNAME_NO_CV_THISTYPE (0x0040)
    115 #define UNDNAME_NO_THISTYPE (0x0060)
    116 #define UNDNAME_NO_ACCESS_SPECIFIERS (0x0080)
    117 #define UNDNAME_NO_THROW_SIGNATURES (0x0100)
    118 #define UNDNAME_NO_MEMBER_TYPE (0x0200)
    119 #define UNDNAME_NO_RETURN_UDT_MODEL (0x0400)
    120 #define UNDNAME_32_BIT_DECODE (0x0800)
    121 #define UNDNAME_NAME_ONLY (0x1000)
    122 #define UNDNAME_NO_ARGUMENTS (0x2000)
    123 #define UNDNAME_NO_SPECIAL_SYMS (0x4000)
    124 
    125 #define UNDNAME_NO_ARGUMENTS (0x2000)
    126 #define UNDNAME_NO_SPECIAL_SYMS (0x4000)
    127 
    128   DWORD IMAGEAPI WINAPI UnDecorateSymbolName(PCSTR DecoratedName,PSTR UnDecoratedName,DWORD UndecoratedLength,DWORD Flags);
    129   DWORD IMAGEAPI WINAPI UnDecorateSymbolNameW(PCWSTR DecoratedName,PWSTR UnDecoratedName,DWORD UndecoratedLength,DWORD Flags);
    130 
    131 #ifdef DBGHELP_TRANSLATE_TCHAR
    132 #define UnDecorateSymbolName UnDecorateSymbolNameW
    133 #endif
    134 
    135 #define DBHHEADER_DEBUGDIRS 0x1
    136 #define DBHHEADER_CVMISC 0x2
    137 
    138   typedef struct _MODLOAD_CVMISC {
    139     DWORD  oCV;
    140     size_t cCV;
    141     DWORD  oMisc;
    142     size_t cMisc;
    143     DWORD  dtImage;
    144     DWORD  cImage;
    145   } MODLOAD_CVMISC, *PMODLOAD_CVMISC;
    146 
    147   typedef enum {
    148     AddrMode1616,
    149     AddrMode1632,
    150     AddrModeReal,
    151     AddrModeFlat
    152   } ADDRESS_MODE;
    153 
    154   typedef struct _tagADDRESS64 {
    155     DWORD64 Offset;
    156     WORD Segment;
    157     ADDRESS_MODE Mode;
    158   } ADDRESS64,*LPADDRESS64;
    159 
    160 #ifdef _IMAGEHLP64
    161 #define ADDRESS ADDRESS64
    162 #define LPADDRESS LPADDRESS64
    163 #else
    164   typedef struct _tagADDRESS {
    165     DWORD Offset;
    166     WORD Segment;
    167     ADDRESS_MODE Mode;
    168   } ADDRESS,*LPADDRESS;
    169 
    170   static __inline void Address32To64(LPADDRESS a32,LPADDRESS64 a64) {
    171     a64->Offset = (ULONG64)(LONG64)(LONG)a32->Offset;
    172     a64->Segment = a32->Segment;
    173     a64->Mode = a32->Mode;
    174   }
    175 
    176   static __inline void Address64To32(LPADDRESS64 a64,LPADDRESS a32) {
    177     a32->Offset = (ULONG)a64->Offset;
    178     a32->Segment = a64->Segment;
    179     a32->Mode = a64->Mode;
    180   }
    181 #endif
    182 
    183   typedef struct _KDHELP64 {
    184     DWORD64 Thread;
    185     DWORD ThCallbackStack;
    186     DWORD ThCallbackBStore;
    187     DWORD NextCallback;
    188     DWORD FramePointer;
    189     DWORD64 KiCallUserMode;
    190     DWORD64 KeUserCallbackDispatcher;
    191     DWORD64 SystemRangeStart;
    192     DWORD64 KiUserExceptionDispatcher;
    193     DWORD64 StackBase;
    194     DWORD64 StackLimit;
    195     DWORD64 Reserved[5];
    196   } KDHELP64,*PKDHELP64;
    197 
    198 #ifdef _IMAGEHLP64
    199 #define KDHELP KDHELP64
    200 #define PKDHELP PKDHELP64
    201 #else
    202   typedef struct _KDHELP {
    203     DWORD Thread;
    204     DWORD ThCallbackStack;
    205     DWORD NextCallback;
    206     DWORD FramePointer;
    207     DWORD KiCallUserMode;
    208     DWORD KeUserCallbackDispatcher;
    209     DWORD SystemRangeStart;
    210     DWORD ThCallbackBStore;
    211     DWORD KiUserExceptionDispatcher;
    212     DWORD StackBase;
    213     DWORD StackLimit;
    214     DWORD Reserved[5];
    215   } KDHELP,*PKDHELP;
    216 
    217   static __inline void KdHelp32To64(PKDHELP p32,PKDHELP64 p64) {
    218     p64->Thread = p32->Thread;
    219     p64->ThCallbackStack = p32->ThCallbackStack;
    220     p64->NextCallback = p32->NextCallback;
    221     p64->FramePointer = p32->FramePointer;
    222     p64->KiCallUserMode = p32->KiCallUserMode;
    223     p64->KeUserCallbackDispatcher = p32->KeUserCallbackDispatcher;
    224     p64->SystemRangeStart = p32->SystemRangeStart;
    225     p64->KiUserExceptionDispatcher = p32->KiUserExceptionDispatcher;
    226     p64->StackBase = p32->StackBase;
    227     p64->StackLimit = p32->StackLimit;
    228   }
    229 #endif
    230 
    231   typedef struct _tagSTACKFRAME64 {
    232     ADDRESS64 AddrPC;
    233     ADDRESS64 AddrReturn;
    234     ADDRESS64 AddrFrame;
    235     ADDRESS64 AddrStack;
    236     ADDRESS64 AddrBStore;
    237     PVOID FuncTableEntry;
    238     DWORD64 Params[4];
    239     WINBOOL Far;
    240     WINBOOL Virtual;
    241     DWORD64 Reserved[3];
    242     KDHELP64 KdHelp;
    243   } STACKFRAME64,*LPSTACKFRAME64;
    244 
    245 #ifdef _IMAGEHLP64
    246 #define STACKFRAME STACKFRAME64
    247 #define LPSTACKFRAME LPSTACKFRAME64
    248 #else
    249   typedef struct _tagSTACKFRAME {
    250     ADDRESS AddrPC;
    251     ADDRESS AddrReturn;
    252     ADDRESS AddrFrame;
    253     ADDRESS AddrStack;
    254     PVOID FuncTableEntry;
    255     DWORD Params[4];
    256     WINBOOL Far;
    257     WINBOOL Virtual;
    258     DWORD Reserved[3];
    259     KDHELP KdHelp;
    260     ADDRESS AddrBStore;
    261   } STACKFRAME,*LPSTACKFRAME;
    262 #endif
    263 
    264   typedef WINBOOL (WINAPI *PREAD_PROCESS_MEMORY_ROUTINE64)(HANDLE hProcess,DWORD64 qwBaseAddress,PVOID lpBuffer,DWORD nSize,LPDWORD lpNumberOfBytesRead);
    265   typedef PVOID (WINAPI *PFUNCTION_TABLE_ACCESS_ROUTINE64)(HANDLE hProcess,DWORD64 AddrBase);
    266   typedef DWORD64 (WINAPI *PGET_MODULE_BASE_ROUTINE64)(HANDLE hProcess,DWORD64 Address);
    267   typedef DWORD64 (WINAPI *PTRANSLATE_ADDRESS_ROUTINE64)(HANDLE hProcess,HANDLE hThread,LPADDRESS64 lpaddr);
    268 
    269   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
    270 GetModuleBaseRoutine,PTRANSLATE_ADDRESS_ROUTINE64 TranslateAddress);
    271 
    272 #ifdef _IMAGEHLP64
    273 #define PREAD_PROCESS_MEMORY_ROUTINE PREAD_PROCESS_MEMORY_ROUTINE64
    274 #define PFUNCTION_TABLE_ACCESS_ROUTINE PFUNCTION_TABLE_ACCESS_ROUTINE64
    275 #define PGET_MODULE_BASE_ROUTINE PGET_MODULE_BASE_ROUTINE64
    276 #define PTRANSLATE_ADDRESS_ROUTINE PTRANSLATE_ADDRESS_ROUTINE64
    277 #define StackWalk StackWalk64
    278 #else
    279   typedef WINBOOL (WINAPI *PREAD_PROCESS_MEMORY_ROUTINE)(HANDLE hProcess,DWORD lpBaseAddress,PVOID lpBuffer,DWORD nSize,PDWORD lpNumberOfBytesRead);
    280   typedef PVOID (WINAPI *PFUNCTION_TABLE_ACCESS_ROUTINE)(HANDLE hProcess,DWORD AddrBase);
    281   typedef DWORD (WINAPI *PGET_MODULE_BASE_ROUTINE)(HANDLE hProcess,DWORD Address);
    282   typedef DWORD (WINAPI *PTRANSLATE_ADDRESS_ROUTINE)(HANDLE hProcess,HANDLE hThread,LPADDRESS lpaddr);
    283 
    284   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
    285 GetModuleBaseRoutine,PTRANSLATE_ADDRESS_ROUTINE TranslateAddress);
    286 #endif
    287 
    288 #define API_VERSION_NUMBER 11
    289 
    290   typedef struct API_VERSION {
    291     USHORT MajorVersion;
    292     USHORT MinorVersion;
    293     USHORT Revision;
    294     USHORT Reserved;
    295   } API_VERSION,*LPAPI_VERSION;
    296 
    297   LPAPI_VERSION IMAGEAPI ImagehlpApiVersion(VOID);
    298   LPAPI_VERSION IMAGEAPI ImagehlpApiVersionEx(LPAPI_VERSION AppVersion);
    299   DWORD IMAGEAPI GetTimestampForLoadedLibrary(HMODULE Module);
    300 
    301   typedef WINBOOL (CALLBACK *PSYM_ENUMMODULES_CALLBACK64)(PCSTR ModuleName,DWORD64 BaseOfDll,PVOID UserContext);
    302   typedef WINBOOL (CALLBACK *PSYM_ENUMMODULES_CALLBACKW64)(PCWSTR ModuleName,DWORD64 BaseOfDll,PVOID UserContext);
    303   typedef WINBOOL (CALLBACK *PSYM_ENUMSYMBOLS_CALLBACK64)(PCSTR SymbolName,DWORD64 SymbolAddress,ULONG SymbolSize,PVOID UserContext);
    304   typedef WINBOOL (CALLBACK *PSYM_ENUMSYMBOLS_CALLBACK64W)(PCWSTR SymbolName,DWORD64 SymbolAddress,ULONG SymbolSize,PVOID UserContext);
    305   typedef WINBOOL (CALLBACK *PENUMLOADED_MODULES_CALLBACK64)(PCSTR ModuleName,DWORD64 ModuleBase,ULONG ModuleSize,PVOID UserContext);
    306   typedef WINBOOL (CALLBACK *PENUMLOADED_MODULES_CALLBACKW64)(PCWSTR ModuleName,DWORD64 ModuleBase,ULONG ModuleSize,PVOID UserContext);
    307   typedef WINBOOL (CALLBACK *PSYMBOL_REGISTERED_CALLBACK64)(HANDLE hProcess,ULONG ActionCode,ULONG64 CallbackData,ULONG64 UserContext);
    308   typedef PVOID (CALLBACK *PSYMBOL_FUNCENTRY_CALLBACK)(HANDLE hProcess,DWORD AddrBase,PVOID UserContext);
    309   typedef PVOID (CALLBACK *PSYMBOL_FUNCENTRY_CALLBACK64)(HANDLE hProcess,ULONG64 AddrBase,ULONG64 UserContext);
    310 
    311 #ifdef _IMAGEHLP64
    312 #define PSYM_ENUMMODULES_CALLBACK PSYM_ENUMMODULES_CALLBACK64
    313 #define PSYM_ENUMSYMBOLS_CALLBACK PSYM_ENUMSYMBOLS_CALLBACK64
    314 #define PSYM_ENUMSYMBOLS_CALLBACKW PSYM_ENUMSYMBOLS_CALLBACK64W
    315 #define PENUMLOADED_MODULES_CALLBACK PENUMLOADED_MODULES_CALLBACK64
    316 #define PSYMBOL_REGISTERED_CALLBACK PSYMBOL_REGISTERED_CALLBACK64
    317 #define PSYMBOL_FUNCENTRY_CALLBACK PSYMBOL_FUNCENTRY_CALLBACK64
    318 #else
    319   typedef WINBOOL (CALLBACK *PSYM_ENUMMODULES_CALLBACK)(PCSTR ModuleName,ULONG BaseOfDll,PVOID UserContext);
    320   typedef WINBOOL (CALLBACK *PSYM_ENUMSYMBOLS_CALLBACK)(PCSTR SymbolName,ULONG SymbolAddress,ULONG SymbolSize,PVOID UserContext);
    321   typedef WINBOOL (CALLBACK *PSYM_ENUMSYMBOLS_CALLBACKW)(PCWSTR SymbolName,ULONG SymbolAddress,ULONG SymbolSize,PVOID UserContext);
    322   typedef WINBOOL (CALLBACK *PENUMLOADED_MODULES_CALLBACK)(PCSTR ModuleName,ULONG ModuleBase,ULONG ModuleSize,PVOID UserContext);
    323   typedef WINBOOL (CALLBACK *PSYMBOL_REGISTERED_CALLBACK)(HANDLE hProcess,ULONG ActionCode,PVOID CallbackData,PVOID UserContext);
    324 #endif
    325 
    326 #define SYMFLAG_VALUEPRESENT 0x00000001
    327 #define SYMFLAG_REGISTER 0x00000008
    328 #define SYMFLAG_REGREL 0x00000010
    329 #define SYMFLAG_FRAMEREL 0x00000020
    330 #define SYMFLAG_PARAMETER 0x00000040
    331 #define SYMFLAG_LOCAL 0x00000080
    332 #define SYMFLAG_CONSTANT 0x00000100
    333 #define SYMFLAG_EXPORT 0x00000200
    334 #define SYMFLAG_FORWARDER 0x00000400
    335 #define SYMFLAG_FUNCTION 0x00000800
    336 #define SYMFLAG_VIRTUAL 0x00001000
    337 #define SYMFLAG_THUNK 0x00002000
    338 #define SYMFLAG_TLSREL 0x00004000
    339 
    340   typedef enum {
    341     SymNone = 0,
    342     SymCoff,
    343     SymCv,
    344     SymPdb,
    345     SymExport,
    346     SymDeferred,
    347     SymSym,
    348     SymDia,
    349     SymVirtual,
    350     NumSymTypes
    351   } SYM_TYPE;
    352 
    353   typedef struct _IMAGEHLP_SYMBOL64 {
    354     DWORD SizeOfStruct;
    355     DWORD64 Address;
    356     DWORD Size;
    357     DWORD Flags;
    358     DWORD MaxNameLength;
    359     CHAR Name[1];
    360   } IMAGEHLP_SYMBOL64,*PIMAGEHLP_SYMBOL64;
    361 
    362   typedef struct _IMAGEHLP_SYMBOL64_PACKAGE {
    363     IMAGEHLP_SYMBOL64 sym;
    364     CHAR name[MAX_SYM_NAME + 1];
    365   } IMAGEHLP_SYMBOL64_PACKAGE,*PIMAGEHLP_SYMBOL64_PACKAGE;
    366 
    367 #ifdef _IMAGEHLP64
    368 
    369 #define IMAGEHLP_SYMBOL IMAGEHLP_SYMBOL64
    370 #define PIMAGEHLP_SYMBOL PIMAGEHLP_SYMBOL64
    371 #define IMAGEHLP_SYMBOL_PACKAGE IMAGEHLP_SYMBOL64_PACKAGE
    372 #define PIMAGEHLP_SYMBOL_PACKAGE PIMAGEHLP_SYMBOL64_PACKAGE
    373 #else
    374 
    375   typedef struct _IMAGEHLP_SYMBOL {
    376     DWORD SizeOfStruct;
    377     DWORD Address;
    378     DWORD Size;
    379     DWORD Flags;
    380     DWORD MaxNameLength;
    381     CHAR Name[1];
    382   } IMAGEHLP_SYMBOL,*PIMAGEHLP_SYMBOL;
    383 
    384   typedef struct _IMAGEHLP_SYMBOL_PACKAGE {
    385     IMAGEHLP_SYMBOL sym;
    386     CHAR name[MAX_SYM_NAME + 1];
    387   } IMAGEHLP_SYMBOL_PACKAGE,*PIMAGEHLP_SYMBOL_PACKAGE;
    388 #endif
    389 
    390   typedef struct _IMAGEHLP_MODULE64 {
    391     DWORD SizeOfStruct;
    392     DWORD64 BaseOfImage;
    393     DWORD ImageSize;
    394     DWORD TimeDateStamp;
    395     DWORD CheckSum;
    396     DWORD NumSyms;
    397     SYM_TYPE SymType;
    398     CHAR ModuleName[32];
    399     CHAR ImageName[256];
    400     CHAR LoadedImageName[256];
    401     CHAR LoadedPdbName[256];
    402     DWORD CVSig;
    403     CHAR CVData[MAX_PATH*3];
    404     DWORD PdbSig;
    405     GUID PdbSig70;
    406     DWORD PdbAge;
    407     WINBOOL PdbUnmatched;
    408     WINBOOL DbgUnmatched;
    409     WINBOOL LineNumbers;
    410     WINBOOL GlobalSymbols;
    411     WINBOOL TypeInfo;
    412     WINBOOL SourceIndexed;
    413     WINBOOL Publics;
    414   } IMAGEHLP_MODULE64,*PIMAGEHLP_MODULE64;
    415 
    416   typedef struct _IMAGEHLP_MODULE64W {
    417     DWORD SizeOfStruct;
    418     DWORD64 BaseOfImage;
    419     DWORD ImageSize;
    420     DWORD TimeDateStamp;
    421     DWORD CheckSum;
    422     DWORD NumSyms;
    423     SYM_TYPE SymType;
    424     WCHAR ModuleName[32];
    425     WCHAR ImageName[256];
    426     WCHAR LoadedImageName[256];
    427     WCHAR LoadedPdbName[256];
    428     DWORD CVSig;
    429     WCHAR CVData[MAX_PATH*3];
    430     DWORD PdbSig;
    431     GUID PdbSig70;
    432     DWORD PdbAge;
    433     WINBOOL PdbUnmatched;
    434     WINBOOL DbgUnmatched;
    435     WINBOOL LineNumbers;
    436     WINBOOL GlobalSymbols;
    437     WINBOOL TypeInfo;
    438     WINBOOL SourceIndexed;
    439     WINBOOL Publics;
    440   } IMAGEHLP_MODULEW64,*PIMAGEHLP_MODULEW64;
    441 
    442 #ifdef _IMAGEHLP64
    443 #define IMAGEHLP_MODULE IMAGEHLP_MODULE64
    444 #define PIMAGEHLP_MODULE PIMAGEHLP_MODULE64
    445 #define IMAGEHLP_MODULEW IMAGEHLP_MODULEW64
    446 #define PIMAGEHLP_MODULEW PIMAGEHLP_MODULEW64
    447 #else
    448   typedef struct _IMAGEHLP_MODULE {
    449     DWORD SizeOfStruct;
    450     DWORD BaseOfImage;
    451     DWORD ImageSize;
    452     DWORD TimeDateStamp;
    453     DWORD CheckSum;
    454     DWORD NumSyms;
    455     SYM_TYPE SymType;
    456     CHAR ModuleName[32];
    457     CHAR ImageName[256];
    458     CHAR LoadedImageName[256];
    459   } IMAGEHLP_MODULE,*PIMAGEHLP_MODULE;
    460 
    461   typedef struct _IMAGEHLP_MODULEW {
    462     DWORD SizeOfStruct;
    463     DWORD BaseOfImage;
    464     DWORD ImageSize;
    465     DWORD TimeDateStamp;
    466     DWORD CheckSum;
    467     DWORD NumSyms;
    468     SYM_TYPE SymType;
    469     WCHAR ModuleName[32];
    470     WCHAR ImageName[256];
    471     WCHAR LoadedImageName[256];
    472   } IMAGEHLP_MODULEW,*PIMAGEHLP_MODULEW;
    473 #endif
    474 
    475   typedef struct _IMAGEHLP_LINE64 {
    476     DWORD SizeOfStruct;
    477     PVOID Key;
    478     DWORD LineNumber;
    479     PCHAR FileName;
    480     DWORD64 Address;
    481   } IMAGEHLP_LINE64,*PIMAGEHLP_LINE64;
    482 
    483   typedef struct _IMAGEHLP_LINEW64 {
    484     DWORD   SizeOfStruct;
    485     PVOID   Key;
    486     DWORD   LineNumber;
    487     PWSTR   FileName;
    488     DWORD64 Address;
    489   } IMAGEHLP_LINEW64, *PIMAGEHLP_LINEW64;
    490 
    491 #ifdef _IMAGEHLP64
    492 #define IMAGEHLP_LINE IMAGEHLP_LINE64
    493 #define PIMAGEHLP_LINE PIMAGEHLP_LINE64
    494 #else
    495   typedef struct _IMAGEHLP_LINE {
    496     DWORD SizeOfStruct;
    497     PVOID Key;
    498     DWORD LineNumber;
    499     PCHAR FileName;
    500     DWORD Address;
    501   } IMAGEHLP_LINE,*PIMAGEHLP_LINE;
    502 #endif
    503 
    504   typedef struct _SOURCEFILE {
    505     DWORD64 ModBase;
    506     PCHAR FileName;
    507   } SOURCEFILE,*PSOURCEFILE;
    508 
    509   typedef struct _SOURCEFILEW {
    510     DWORD64 ModBase;
    511     PWCHAR FileName;
    512   } SOURCEFILEW,*PSOURCEFILEW;
    513 
    514 #define CBA_DEFERRED_SYMBOL_LOAD_START 0x00000001
    515 #define CBA_DEFERRED_SYMBOL_LOAD_COMPLETE 0x00000002
    516 #define CBA_DEFERRED_SYMBOL_LOAD_FAILURE 0x00000003
    517 #define CBA_SYMBOLS_UNLOADED 0x00000004
    518 #define CBA_DUPLICATE_SYMBOL 0x00000005
    519 #define CBA_READ_MEMORY 0x00000006
    520 #define CBA_DEFERRED_SYMBOL_LOAD_CANCEL 0x00000007
    521 #define CBA_SET_OPTIONS 0x00000008
    522 #define CBA_EVENT 0x00000010
    523 #define CBA_DEFERRED_SYMBOL_LOAD_PARTIAL 0x00000020
    524 #define CBA_DEBUG_INFO 0x10000000
    525 #define CBA_SRCSRV_INFO 0x20000000
    526 #define CBA_SRCSRV_EVENT 0x40000000
    527 
    528   typedef struct _IMAGEHLP_CBA_READ_MEMORY {
    529     DWORD64 addr;
    530     PVOID buf;
    531     DWORD bytes;
    532     DWORD *bytesread;
    533   } IMAGEHLP_CBA_READ_MEMORY,*PIMAGEHLP_CBA_READ_MEMORY;
    534 
    535   enum {
    536     sevInfo = 0,
    537     sevProblem,
    538     sevAttn,
    539     sevFatal,
    540     sevMax
    541   };
    542 
    543   typedef struct _IMAGEHLP_CBA_EVENT {
    544     DWORD severity;
    545     DWORD code;
    546     PCHAR desc;
    547     PVOID object;
    548   } IMAGEHLP_CBA_EVENT,*PIMAGEHLP_CBA_EVENT;
    549 
    550   typedef struct _IMAGEHLP_DEFERRED_SYMBOL_LOAD64 {
    551     DWORD SizeOfStruct;
    552     DWORD64 BaseOfImage;
    553     DWORD CheckSum;
    554     DWORD TimeDateStamp;
    555     CHAR FileName[MAX_PATH];
    556     BOOLEAN Reparse;
    557     HANDLE hFile;
    558     DWORD Flags;
    559   } IMAGEHLP_DEFERRED_SYMBOL_LOAD64,*PIMAGEHLP_DEFERRED_SYMBOL_LOAD64;
    560 
    561 #define DSLFLAG_MISMATCHED_PDB 0x1
    562 #define DSLFLAG_MISMATCHED_DBG 0x2
    563 
    564 #ifdef _IMAGEHLP64
    565 #define IMAGEHLP_DEFERRED_SYMBOL_LOAD IMAGEHLP_DEFERRED_SYMBOL_LOAD64
    566 #define PIMAGEHLP_DEFERRED_SYMBOL_LOAD PIMAGEHLP_DEFERRED_SYMBOL_LOAD64
    567 #else
    568   typedef struct _IMAGEHLP_DEFERRED_SYMBOL_LOAD {
    569     DWORD SizeOfStruct;
    570     DWORD BaseOfImage;
    571     DWORD CheckSum;
    572     DWORD TimeDateStamp;
    573     CHAR FileName[MAX_PATH];
    574     BOOLEAN Reparse;
    575     HANDLE hFile;
    576   } IMAGEHLP_DEFERRED_SYMBOL_LOAD,*PIMAGEHLP_DEFERRED_SYMBOL_LOAD;
    577 #endif
    578 
    579   typedef struct _IMAGEHLP_DUPLICATE_SYMBOL64 {
    580     DWORD SizeOfStruct;
    581     DWORD NumberOfDups;
    582     PIMAGEHLP_SYMBOL64 Symbol;
    583     DWORD SelectedSymbol;
    584   } IMAGEHLP_DUPLICATE_SYMBOL64,*PIMAGEHLP_DUPLICATE_SYMBOL64;
    585 
    586 #ifdef _IMAGEHLP64
    587 #define IMAGEHLP_DUPLICATE_SYMBOL IMAGEHLP_DUPLICATE_SYMBOL64
    588 #define PIMAGEHLP_DUPLICATE_SYMBOL PIMAGEHLP_DUPLICATE_SYMBOL64
    589 #else
    590   typedef struct _IMAGEHLP_DUPLICATE_SYMBOL {
    591     DWORD SizeOfStruct;
    592     DWORD NumberOfDups;
    593     PIMAGEHLP_SYMBOL Symbol;
    594     DWORD SelectedSymbol;
    595   } IMAGEHLP_DUPLICATE_SYMBOL,*PIMAGEHLP_DUPLICATE_SYMBOL;
    596 #endif
    597 
    598 typedef struct _SYMSRV_INDEX_INFO {
    599   DWORD sizeofstruct;
    600   CHAR file[MAX_PATH +1];
    601   WINBOOL  stripped;
    602   DWORD timestamp;
    603   DWORD size;
    604   CHAR dbgfile[MAX_PATH +1];
    605   CHAR pdbfile[MAX_PATH + 1];
    606   GUID  guid;
    607   DWORD sig;
    608   DWORD age;
    609 } SYMSRV_INDEX_INFO, *PSYMSRV_INDEX_INFO;
    610 
    611 typedef struct _SYMSRV_INDEX_INFOW {
    612   DWORD sizeofstruct;
    613   WCHAR file[MAX_PATH +1];
    614   WINBOOL  stripped;
    615   DWORD timestamp;
    616   DWORD size;
    617   WCHAR dbgfile[MAX_PATH +1];
    618   WCHAR pdbfile[MAX_PATH + 1];
    619   GUID  guid;
    620   DWORD sig;
    621   DWORD age;
    622 } SYMSRV_INDEX_INFOW, *PSYMSRV_INDEX_INFOW;
    623 
    624   WINBOOL IMAGEAPI SymSetParentWindow(HWND hwnd);
    625   PCHAR IMAGEAPI SymSetHomeDirectory(HANDLE hProcess,PCSTR dir);
    626   PCHAR IMAGEAPI SymSetHomeDirectoryW(HANDLE hProcess,PCWSTR dir);
    627   PCHAR IMAGEAPI SymGetHomeDirectory(DWORD type,PSTR dir,size_t size);
    628   PWCHAR IMAGEAPI SymGetHomeDirectoryW(DWORD type,PWSTR dir,size_t size);
    629 
    630 #define hdBase 0
    631 #define hdSym 1
    632 #define hdSrc 2
    633 #define hdMax 3
    634 
    635 #define SYMOPT_CASE_INSENSITIVE 0x00000001
    636 #define SYMOPT_UNDNAME 0x00000002
    637 #define SYMOPT_DEFERRED_LOADS 0x00000004
    638 #define SYMOPT_NO_CPP 0x00000008
    639 #define SYMOPT_LOAD_LINES 0x00000010
    640 #define SYMOPT_OMAP_FIND_NEAREST 0x00000020
    641 #define SYMOPT_LOAD_ANYTHING 0x00000040
    642 #define SYMOPT_IGNORE_CVREC 0x00000080
    643 #define SYMOPT_NO_UNQUALIFIED_LOADS 0x00000100
    644 #define SYMOPT_FAIL_CRITICAL_ERRORS 0x00000200
    645 #define SYMOPT_EXACT_SYMBOLS 0x00000400
    646 #define SYMOPT_ALLOW_ABSOLUTE_SYMBOLS 0x00000800
    647 #define SYMOPT_IGNORE_NT_SYMPATH 0x00001000
    648 #define SYMOPT_INCLUDE_32BIT_MODULES 0x00002000
    649 #define SYMOPT_PUBLICS_ONLY 0x00004000
    650 #define SYMOPT_NO_PUBLICS 0x00008000
    651 #define SYMOPT_AUTO_PUBLICS 0x00010000
    652 #define SYMOPT_NO_IMAGE_SEARCH 0x00020000
    653 #define SYMOPT_SECURE 0x00040000
    654 #define SYMOPT_NO_PROMPTS 0x00080000
    655 #define SYMOPT_ALLOW_ZERO_ADDRESS 0x01000000
    656 #define SYMOPT_DISABLE_SYMSRV_AUTODETECT 0x02000000
    657 #define SYMOPT_FAVOR_COMPRESSED 0x00800000
    658 #define SYMOPT_FLAT_DIRECTORY 0x00400000
    659 #define SYMOPT_IGNORE_IMAGEDIR 0x00200000
    660 #define SYMOPT_OVERWRITE 0x00100000
    661 
    662 #define SYMOPT_DEBUG 0x80000000
    663 
    664   DWORD IMAGEAPI SymSetOptions(DWORD SymOptions);
    665   DWORD IMAGEAPI SymGetOptions(VOID);
    666   WINBOOL IMAGEAPI SymCleanup(HANDLE hProcess);
    667   WINBOOL IMAGEAPI SymMatchString(PCSTR string,PCSTR expression,WINBOOL fCase);
    668   WINBOOL IMAGEAPI SymMatchStringW(PCWSTR string,PCWSTR expression,WINBOOL fCase);
    669 
    670   typedef WINBOOL (CALLBACK *PSYM_ENUMSOURCEFILES_CALLBACK)(PSOURCEFILE pSourceFile,PVOID UserContext);
    671   typedef WINBOOL (CALLBACK *PSYM_ENUMSOURCEFILES_CALLBACKW)(PSOURCEFILEW pSourceFile,PVOID UserContext);
    672 #define PSYM_ENUMSOURCFILES_CALLBACK PSYM_ENUMSOURCEFILES_CALLBACK
    673 
    674   WINBOOL IMAGEAPI SymEnumSourceFiles(HANDLE hProcess,ULONG64 ModBase,PCSTR Mask,PSYM_ENUMSOURCEFILES_CALLBACK cbSrcFiles,PVOID UserContext);
    675   WINBOOL IMAGEAPI SymEnumSourceFilesW(HANDLE hProcess,ULONG64 ModBase,PCWSTR Mask,PSYM_ENUMSOURCEFILES_CALLBACKW cbSrcFiles,PVOID UserContext);
    676   WINBOOL IMAGEAPI SymEnumerateModules64(HANDLE hProcess,PSYM_ENUMMODULES_CALLBACK64 EnumModulesCallback,PVOID UserContext);
    677   WINBOOL IMAGEAPI SymEnumerateModulesW64(HANDLE hProcess,PSYM_ENUMMODULES_CALLBACKW64 EnumModulesCallback,PVOID UserContext);
    678 
    679 #ifdef _IMAGEHLP64
    680 #define SymEnumerateModules SymEnumerateModules64
    681 #else
    682   WINBOOL IMAGEAPI SymEnumerateModules(HANDLE hProcess,PSYM_ENUMMODULES_CALLBACK EnumModulesCallback,PVOID UserContext);
    683 #endif
    684 
    685   WINBOOL IMAGEAPI SymEnumerateSymbols64(HANDLE hProcess,DWORD64 BaseOfDll,PSYM_ENUMSYMBOLS_CALLBACK64 EnumSymbolsCallback,PVOID UserContext);
    686   WINBOOL IMAGEAPI SymEnumerateSymbolsW64(HANDLE hProcess,DWORD64 BaseOfDll,PSYM_ENUMSYMBOLS_CALLBACK64W EnumSymbolsCallback,PVOID UserContext);
    687 
    688 #ifdef _IMAGEHLP64
    689 #define SymEnumerateSymbols SymEnumerateSymbols64
    690 #define SymEnumerateSymbolsW SymEnumerateSymbolsW64
    691 #else
    692   WINBOOL IMAGEAPI SymEnumerateSymbols(HANDLE hProcess,DWORD BaseOfDll,PSYM_ENUMSYMBOLS_CALLBACK EnumSymbolsCallback,PVOID UserContext);
    693   WINBOOL IMAGEAPI SymEnumerateSymbolsW(HANDLE hProcess,DWORD BaseOfDll,PSYM_ENUMSYMBOLS_CALLBACKW EnumSymbolsCallback,PVOID UserContext);
    694 #endif
    695 
    696   WINBOOL IMAGEAPI EnumerateLoadedModules64(HANDLE hProcess,PENUMLOADED_MODULES_CALLBACK64 EnumLoadedModulesCallback,PVOID UserContext);
    697   WINBOOL IMAGEAPI EnumerateLoadedModulesW64(HANDLE hProcess,PENUMLOADED_MODULES_CALLBACKW64 EnumLoadedModulesCallback,PVOID UserContext);
    698 
    699 #ifdef DBGHELP_TRANSLATE_TCHAR
    700     #define EnumerateLoadedModules64      EnumerateLoadedModulesW64
    701 #endif
    702 
    703 #ifdef _IMAGEHLP64
    704 #define EnumerateLoadedModules EnumerateLoadedModules64
    705 #else
    706   WINBOOL IMAGEAPI EnumerateLoadedModules(HANDLE hProcess,PENUMLOADED_MODULES_CALLBACK EnumLoadedModulesCallback,PVOID UserContext);
    707 #endif
    708 
    709   PVOID IMAGEAPI SymFunctionTableAccess64(HANDLE hProcess,DWORD64 AddrBase);
    710 
    711 #ifdef _IMAGEHLP64
    712 #define SymFunctionTableAccess SymFunctionTableAccess64
    713 #else
    714   PVOID IMAGEAPI SymFunctionTableAccess(HANDLE hProcess,DWORD AddrBase);
    715 #endif
    716 
    717   WINBOOL IMAGEAPI SymGetModuleInfo64(HANDLE hProcess,DWORD64 qwAddr,PIMAGEHLP_MODULE64 ModuleInfo);
    718   WINBOOL IMAGEAPI SymGetModuleInfoW64(HANDLE hProcess,DWORD64 qwAddr,PIMAGEHLP_MODULEW64 ModuleInfo);
    719 
    720 #ifdef _IMAGEHLP64
    721 #define SymGetModuleInfo SymGetModuleInfo64
    722 #define SymGetModuleInfoW SymGetModuleInfoW64
    723 #else
    724   WINBOOL IMAGEAPI SymGetModuleInfo(HANDLE hProcess,DWORD dwAddr,PIMAGEHLP_MODULE ModuleInfo);
    725   WINBOOL IMAGEAPI SymGetModuleInfoW(HANDLE hProcess,DWORD dwAddr,PIMAGEHLP_MODULEW ModuleInfo);
    726 #endif
    727 
    728   DWORD64 IMAGEAPI SymGetModuleBase64(HANDLE hProcess,DWORD64 qwAddr);
    729 
    730 #ifdef _IMAGEHLP64
    731 #define SymGetModuleBase SymGetModuleBase64
    732 #else
    733   DWORD IMAGEAPI SymGetModuleBase(HANDLE hProcess,DWORD dwAddr);
    734 #endif
    735 
    736   WINBOOL IMAGEAPI SymGetSymNext64(HANDLE hProcess,PIMAGEHLP_SYMBOL64 Symbol);
    737 
    738 #ifdef _IMAGEHLP64
    739 #define SymGetSymNext SymGetSymNext64
    740 #else
    741   WINBOOL IMAGEAPI SymGetSymNext(HANDLE hProcess,PIMAGEHLP_SYMBOL Symbol);
    742 #endif
    743 
    744   WINBOOL IMAGEAPI SymGetSymPrev64(HANDLE hProcess,PIMAGEHLP_SYMBOL64 Symbol);
    745 
    746 #ifdef _IMAGEHLP64
    747 #define SymGetSymPrev SymGetSymPrev64
    748 #else
    749   WINBOOL IMAGEAPI SymGetSymPrev(HANDLE hProcess,PIMAGEHLP_SYMBOL Symbol);
    750 #endif
    751 
    752   typedef struct _SRCCODEINFO {
    753     DWORD SizeOfStruct;
    754     PVOID Key;
    755     DWORD64 ModBase;
    756     CHAR Obj[MAX_PATH + 1];
    757     CHAR FileName[MAX_PATH + 1];
    758     DWORD LineNumber;
    759     DWORD64 Address;
    760   } SRCCODEINFO,*PSRCCODEINFO;
    761 
    762   typedef struct _SRCCODEINFOW {
    763     DWORD SizeOfStruct;
    764     PVOID Key;
    765     DWORD64 ModBase;
    766     WCHAR Obj[MAX_PATH + 1];
    767     WCHAR FileName[MAX_PATH + 1];
    768     DWORD LineNumber;
    769     DWORD64 Address;
    770   } SRCCODEINFOW,*PSRCCODEINFOW;
    771 
    772   typedef WINBOOL (CALLBACK *PSYM_ENUMLINES_CALLBACK)(PSRCCODEINFO LineInfo,PVOID UserContext);
    773   typedef WINBOOL (CALLBACK *PSYM_ENUMLINES_CALLBACKW)(PSRCCODEINFOW LineInfo,PVOID UserContext);
    774 
    775   WINBOOL IMAGEAPI SymEnumLines(HANDLE hProcess,ULONG64 Base,PCSTR Obj,PCSTR File,PSYM_ENUMLINES_CALLBACK EnumLinesCallback,PVOID UserContext);
    776   WINBOOL IMAGEAPI SymEnumLinesW(HANDLE hProcess,ULONG64 Base,PCWSTR Obj,PCSTR File,PSYM_ENUMLINES_CALLBACKW EnumLinesCallback,PVOID UserContext);
    777   WINBOOL IMAGEAPI SymGetLineFromAddr64(HANDLE hProcess,DWORD64 qwAddr,PDWORD pdwDisplacement,PIMAGEHLP_LINE64 Line64);
    778   WINBOOL IMAGEAPI SymGetLineFromAddrW64(HANDLE hProcess,DWORD64 qwAddr,PDWORD pdwDisplacement,PIMAGEHLP_LINEW64 Line64);
    779 
    780 #ifdef _IMAGEHLP64
    781 #define SymGetLineFromAddr SymGetLineFromAddr64
    782 #else
    783   WINBOOL IMAGEAPI SymGetLineFromAddr(HANDLE hProcess,DWORD dwAddr,PDWORD pdwDisplacement,PIMAGEHLP_LINE Line);
    784 #endif
    785 
    786   WINBOOL IMAGEAPI SymGetLineFromName64(HANDLE hProcess,PCSTR ModuleName,PCSTR FileName,DWORD dwLineNumber,PLONG plDisplacement,PIMAGEHLP_LINE64 Line);
    787   WINBOOL IMAGEAPI SymGetLineFromNameW64(HANDLE hProcess,PCWSTR ModuleName,PCWSTR FileName,DWORD dwLineNumber,PLONG plDisplacement,PIMAGEHLP_LINEW64 Line);
    788 
    789 #ifdef _IMAGEHLP64
    790 #define SymGetLineFromName SymGetLineFromName64
    791 #else
    792   WINBOOL IMAGEAPI SymGetLineFromName(HANDLE hProcess,PCSTR ModuleName,PCSTR FileName,DWORD dwLineNumber,PLONG plDisplacement,PIMAGEHLP_LINE Line);
    793 #endif
    794 
    795   WINBOOL IMAGEAPI SymGetLineNext64(HANDLE hProcess,PIMAGEHLP_LINE64 Line);
    796   WINBOOL IMAGEAPI SymGetLineNextW64(HANDLE hProcess,PIMAGEHLP_LINEW64 Line);
    797 
    798 #ifdef _IMAGEHLP64
    799 #define SymGetLineNext SymGetLineNext64
    800 #else
    801   WINBOOL IMAGEAPI SymGetLineNext(HANDLE hProcess,PIMAGEHLP_LINE Line);
    802 #endif
    803 
    804   WINBOOL IMAGEAPI SymGetLinePrev64(HANDLE hProcess,PIMAGEHLP_LINE64 Line);
    805   WINBOOL IMAGEAPI SymGetLinePrevW64(HANDLE hProcess,PIMAGEHLP_LINEW64 Line);
    806 
    807 #ifdef _IMAGEHLP64
    808 #define SymGetLinePrev SymGetLinePrev64
    809 #else
    810   WINBOOL IMAGEAPI SymGetLinePrev(HANDLE hProcess,PIMAGEHLP_LINE Line);
    811 #endif
    812 
    813   WINBOOL IMAGEAPI SymMatchFileName(PCSTR FileName,PCSTR Match,PSTR *FileNameStop,PSTR *MatchStop);
    814   WINBOOL IMAGEAPI SymMatchFileNameW(PCWSTR FileName,PCWSTR Match,PWSTR *FileNameStop,PWSTR *MatchStop);
    815   WINBOOL IMAGEAPI SymInitialize(HANDLE hProcess,PCSTR UserSearchPath,WINBOOL fInvadeProcess);
    816   WINBOOL IMAGEAPI SymInitializeW(HANDLE hProcess,PCWSTR UserSearchPath,WINBOOL fInvadeProcess);
    817   WINBOOL IMAGEAPI SymGetSearchPath(HANDLE hProcess,PSTR SearchPath,DWORD SearchPathLength);
    818   WINBOOL IMAGEAPI SymGetSearchPathW(HANDLE hProcess,PWSTR SearchPath,DWORD SearchPathLength);
    819   WINBOOL IMAGEAPI SymSetSearchPath(HANDLE hProcess,PCSTR SearchPath);
    820   WINBOOL IMAGEAPI SymSetSearchPathW(HANDLE hProcess,PCWSTR SearchPath);
    821   DWORD64 IMAGEAPI SymLoadModule64(HANDLE hProcess,HANDLE hFile,PSTR ImageName,PSTR ModuleName,DWORD64 BaseOfDll,DWORD SizeOfDll);
    822 
    823 #define SLMFLAG_VIRTUAL 0x1
    824 
    825   DWORD64 IMAGEAPI SymLoadModuleEx(HANDLE hProcess,HANDLE hFile,PCSTR ImageName,PCSTR ModuleName,DWORD64 BaseOfDll,DWORD DllSize,PMODLOAD_DATA Data,DWORD Flags);
    826   DWORD64 IMAGEAPI SymLoadModuleExW(HANDLE hProcess,HANDLE hFile,PCWSTR ImageName,PCWSTR ModuleName,DWORD64 BaseOfDll,DWORD DllSize,PMODLOAD_DATA Data,DWORD Flags);
    827 
    828 #ifdef _IMAGEHLP64
    829 #define SymLoadModule SymLoadModule64
    830 #else
    831   DWORD IMAGEAPI SymLoadModule(HANDLE hProcess,HANDLE hFile,PCSTR ImageName,PCSTR ModuleName,DWORD BaseOfDll,DWORD SizeOfDll);
    832 #endif
    833 
    834   WINBOOL IMAGEAPI SymUnloadModule64(HANDLE hProcess,DWORD64 BaseOfDll);
    835 
    836 #ifdef _IMAGEHLP64
    837 #define SymUnloadModule SymUnloadModule64
    838 #else
    839   WINBOOL IMAGEAPI SymUnloadModule(HANDLE hProcess,DWORD BaseOfDll);
    840 #endif
    841 
    842   WINBOOL IMAGEAPI SymUnDName64(PIMAGEHLP_SYMBOL64 sym,PSTR UnDecName,DWORD UnDecNameLength);
    843 
    844 #ifdef _IMAGEHLP64
    845 #define SymUnDName SymUnDName64
    846 #else
    847   WINBOOL IMAGEAPI SymUnDName(PIMAGEHLP_SYMBOL sym,PSTR UnDecName,DWORD UnDecNameLength);
    848 #endif
    849 
    850   WINBOOL IMAGEAPI SymRegisterCallback64(HANDLE hProcess,PSYMBOL_REGISTERED_CALLBACK64 CallbackFunction,ULONG64 UserContext);
    851   WINBOOL IMAGEAPI SymRegisterCallback64W(HANDLE hProcess,PSYMBOL_REGISTERED_CALLBACK64 CallbackFunction,ULONG64 UserContext);
    852 
    853   WINBOOL IMAGEAPI SymRegisterFunctionEntryCallback64(HANDLE hProcess,PSYMBOL_FUNCENTRY_CALLBACK64 CallbackFunction,ULONG64 UserContext);
    854 
    855 #ifdef _IMAGEHLP64
    856 #define SymRegisterCallback SymRegisterCallback64
    857 #define SymRegisterFunctionEntryCallback SymRegisterFunctionEntryCallback64
    858 #else
    859   WINBOOL IMAGEAPI SymRegisterCallback(HANDLE hProcess,PSYMBOL_REGISTERED_CALLBACK CallbackFunction,PVOID UserContext);
    860   WINBOOL IMAGEAPI SymRegisterFunctionEntryCallback(HANDLE hProcess,PSYMBOL_FUNCENTRY_CALLBACK CallbackFunction,PVOID UserContext);
    861 #endif
    862 
    863   typedef struct _IMAGEHLP_SYMBOL_SRC {
    864     DWORD sizeofstruct;
    865     DWORD type;
    866     char file[MAX_PATH];
    867   } IMAGEHLP_SYMBOL_SRC,*PIMAGEHLP_SYMBOL_SRC;
    868 
    869   typedef struct _MODULE_TYPE_INFO {
    870     USHORT dataLength;
    871     USHORT leaf;
    872     BYTE data[1];
    873   } MODULE_TYPE_INFO,*PMODULE_TYPE_INFO;
    874 
    875   typedef struct _SYMBOL_INFO {
    876     ULONG SizeOfStruct;
    877     ULONG TypeIndex;
    878     ULONG64 Reserved[2];
    879     ULONG info;
    880     ULONG Size;
    881     ULONG64 ModBase;
    882     ULONG Flags;
    883     ULONG64 Value;
    884     ULONG64 Address;
    885     ULONG Register;
    886     ULONG Scope;
    887     ULONG Tag;
    888     ULONG NameLen;
    889     ULONG MaxNameLen;
    890     CHAR Name[1];
    891   } SYMBOL_INFO,*PSYMBOL_INFO;
    892 
    893   typedef struct _SYMBOL_INFOW {
    894     ULONG SizeOfStruct;
    895     ULONG TypeIndex;
    896     ULONG64 Reserved[2];
    897     ULONG info;
    898     ULONG Size;
    899     ULONG64 ModBase;
    900     ULONG Flags;
    901     ULONG64 Value;
    902     ULONG64 Address;
    903     ULONG Register;
    904     ULONG Scope;
    905     ULONG Tag;
    906     ULONG NameLen;
    907     ULONG MaxNameLen;
    908     WCHAR Name[1];
    909   } SYMBOL_INFOW,*PSYMBOL_INFOW;
    910 
    911 #define SYMFLAG_CLR_TOKEN 0x00040000
    912 #define SYMFLAG_CONSTANT 0x00000100
    913 #define SYMFLAG_EXPORT 0x00000200
    914 #define SYMFLAG_FORWARDER 0x00000400
    915 #define SYMFLAG_FRAMEREL 0x00000020
    916 #define SYMFLAG_FUNCTION 0x00000800
    917 #define SYMFLAG_ILREL 0x00010000
    918 #define SYMFLAG_LOCAL 0x00000080
    919 #define SYMFLAG_METADATA 0x00020000
    920 #define SYMFLAG_PARAMETER 0x00000040
    921 #define SYMFLAG_REGISTER 0x00000008
    922 #define SYMFLAG_REGREL 0x00000010
    923 #define SYMFLAG_SLOT 0x00008000
    924 #define SYMFLAG_THUNK 0x00002000
    925 #define SYMFLAG_TLSREL 0x00004000
    926 #define SYMFLAG_VALUEPRESENT 0x00000001
    927 #define SYMFLAG_VIRTUAL 0x00001000
    928 
    929   typedef struct _SYMBOL_INFO_PACKAGE {
    930     SYMBOL_INFO si;
    931     CHAR name[MAX_SYM_NAME + 1];
    932   } SYMBOL_INFO_PACKAGE,*PSYMBOL_INFO_PACKAGE;
    933 
    934   typedef struct _IMAGEHLP_STACK_FRAME {
    935     ULONG64 InstructionOffset;
    936     ULONG64 ReturnOffset;
    937     ULONG64 FrameOffset;
    938     ULONG64 StackOffset;
    939     ULONG64 BackingStoreOffset;
    940     ULONG64 FuncTableEntry;
    941     ULONG64 Params[4];
    942     ULONG64 Reserved[5];
    943     WINBOOL Virtual;
    944     ULONG Reserved2;
    945   } IMAGEHLP_STACK_FRAME,*PIMAGEHLP_STACK_FRAME;
    946 
    947   typedef VOID IMAGEHLP_CONTEXT,*PIMAGEHLP_CONTEXT;
    948 
    949   WINBOOL IMAGEAPI SymSetContext(HANDLE hProcess,PIMAGEHLP_STACK_FRAME StackFrame,PIMAGEHLP_CONTEXT Context);
    950   WINBOOL IMAGEAPI SymFromAddr(HANDLE hProcess,DWORD64 Address,PDWORD64 Displacement,PSYMBOL_INFO Symbol);
    951   WINBOOL IMAGEAPI SymFromAddrW(HANDLE hProcess,DWORD64 Address,PDWORD64 Displacement,PSYMBOL_INFOW Symbol);
    952   WINBOOL IMAGEAPI SymFromToken(HANDLE hProcess,DWORD64 Base,DWORD Token,PSYMBOL_INFO Symbol);
    953   WINBOOL IMAGEAPI SymFromTokenW(HANDLE hProcess,DWORD64 Base,DWORD Token,PSYMBOL_INFOW Symbol);
    954   WINBOOL IMAGEAPI SymFromName(HANDLE hProcess,PCSTR Name,PSYMBOL_INFO Symbol);
    955   WINBOOL IMAGEAPI SymFromNameW(HANDLE hProcess,PCWSTR Name,PSYMBOL_INFOW Symbol);
    956 
    957   typedef WINBOOL (CALLBACK *PSYM_ENUMERATESYMBOLS_CALLBACK)(PSYMBOL_INFO pSymInfo,ULONG SymbolSize,PVOID UserContext);
    958   typedef WINBOOL (CALLBACK *PSYM_ENUMERATESYMBOLS_CALLBACKW)(PSYMBOL_INFOW pSymInfo,ULONG SymbolSize,PVOID UserContext);
    959 
    960   WINBOOL IMAGEAPI SymEnumSymbols(HANDLE hProcess,ULONG64 BaseOfDll,PCSTR Mask,PSYM_ENUMERATESYMBOLS_CALLBACK EnumSymbolsCallback,PVOID UserContext);
    961   WINBOOL IMAGEAPI SymEnumSymbolsW(HANDLE hProcess,ULONG64 BaseOfDll,PCWSTR Mask,PSYM_ENUMERATESYMBOLS_CALLBACKW EnumSymbolsCallback,PVOID UserContext);
    962   WINBOOL IMAGEAPI SymEnumSymbolsForAddr(HANDLE hProcess,DWORD64 Address,PSYM_ENUMERATESYMBOLS_CALLBACK EnumSymbolsCallback,PVOID UserContext);
    963   WINBOOL IMAGEAPI SymEnumSymbolsForAddrW(HANDLE hProcess,DWORD64 Address,PSYM_ENUMERATESYMBOLS_CALLBACKW EnumSymbolsCallback,PVOID UserContext);
    964 
    965 #define SYMENUMFLAG_FULLSRCH 1
    966 #define SYMENUMFLAG_SPEEDSRCH 2
    967 
    968   typedef enum _IMAGEHLP_SYMBOL_TYPE_INFO {
    969     TI_GET_SYMTAG,
    970     TI_GET_SYMNAME,
    971     TI_GET_LENGTH,
    972     TI_GET_TYPE,
    973     TI_GET_TYPEID,
    974     TI_GET_BASETYPE,
    975     TI_GET_ARRAYINDEXTYPEID,
    976     TI_FINDCHILDREN,
    977     TI_GET_DATAKIND,
    978     TI_GET_ADDRESSOFFSET,
    979     TI_GET_OFFSET,
    980     TI_GET_VALUE,
    981     TI_GET_COUNT,
    982     TI_GET_CHILDRENCOUNT,
    983     TI_GET_BITPOSITION,
    984     TI_GET_VIRTUALBASECLASS,
    985     TI_GET_VIRTUALTABLESHAPEID,
    986     TI_GET_VIRTUALBASEPOINTEROFFSET,
    987     TI_GET_CLASSPARENTID,
    988     TI_GET_NESTED,
    989     TI_GET_SYMINDEX,
    990     TI_GET_LEXICALPARENT,
    991     TI_GET_ADDRESS,
    992     TI_GET_THISADJUST,
    993     TI_GET_UDTKIND,
    994     TI_IS_EQUIV_TO,
    995     TI_GET_CALLING_CONVENTION
    996   } IMAGEHLP_SYMBOL_TYPE_INFO;
    997 
    998   typedef struct _TI_FINDCHILDREN_PARAMS {
    999     ULONG Count;
   1000     ULONG Start;
   1001     ULONG ChildId[1];
   1002   } TI_FINDCHILDREN_PARAMS;
   1003 
   1004   WINBOOL IMAGEAPI SymGetTypeInfo(HANDLE hProcess,DWORD64 ModBase,ULONG TypeId,IMAGEHLP_SYMBOL_TYPE_INFO GetType,PVOID pInfo);
   1005   WINBOOL IMAGEAPI SymEnumTypes(HANDLE hProcess,ULONG64 BaseOfDll,PSYM_ENUMERATESYMBOLS_CALLBACK EnumSymbolsCallback,PVOID UserContext);
   1006   WINBOOL IMAGEAPI SymEnumTypesW(HANDLE hProcess,ULONG64 BaseOfDll,PSYM_ENUMERATESYMBOLS_CALLBACKW EnumSymbolsCallback,PVOID UserContext);
   1007   WINBOOL IMAGEAPI SymGetTypeFromName(HANDLE hProcess,ULONG64 BaseOfDll,PCSTR Name,PSYMBOL_INFO Symbol);
   1008   WINBOOL IMAGEAPI SymGetTypeFromNameW(HANDLE hProcess,ULONG64 BaseOfDll,PCWSTR Name,PSYMBOL_INFOW Symbol);
   1009   WINBOOL IMAGEAPI SymAddSymbol(HANDLE hProcess,ULONG64 BaseOfDll,PCSTR Name,DWORD64 Address,DWORD Size,DWORD Flags);
   1010   WINBOOL IMAGEAPI SymAddSymbolW(HANDLE hProcess,ULONG64 BaseOfDll,PCWSTR Name,DWORD64 Address,DWORD Size,DWORD Flags);
   1011   WINBOOL IMAGEAPI SymDeleteSymbol(HANDLE hProcess,ULONG64 BaseOfDll,PCSTR Name,DWORD64 Address,DWORD Flags);
   1012   WINBOOL IMAGEAPI SymDeleteSymbolW(HANDLE hProcess,ULONG64 BaseOfDll,PCWSTR Name,DWORD64 Address,DWORD Flags);
   1013 
   1014   typedef WINBOOL (WINAPI *PDBGHELP_CREATE_USER_DUMP_CALLBACK)(DWORD DataType,PVOID *Data,LPDWORD DataLength,PVOID UserData);
   1015 
   1016   WINBOOL WINAPI DbgHelpCreateUserDump(LPCSTR FileName,PDBGHELP_CREATE_USER_DUMP_CALLBACK Callback,PVOID UserData);
   1017   WINBOOL WINAPI DbgHelpCreateUserDumpW(LPCWSTR FileName,PDBGHELP_CREATE_USER_DUMP_CALLBACK Callback,PVOID UserData);
   1018   WINBOOL IMAGEAPI SymGetSymFromAddr64(HANDLE hProcess,DWORD64 qwAddr,PDWORD64 pdwDisplacement,PIMAGEHLP_SYMBOL64 Symbol);
   1019 
   1020 #ifdef _IMAGEHLP64
   1021 #define SymGetSymFromAddr SymGetSymFromAddr64
   1022 #else
   1023   WINBOOL IMAGEAPI SymGetSymFromAddr(HANDLE hProcess,DWORD dwAddr,PDWORD pdwDisplacement,PIMAGEHLP_SYMBOL Symbol);
   1024 #endif
   1025 
   1026   WINBOOL IMAGEAPI SymGetSymFromName64(HANDLE hProcess,PCSTR Name,PIMAGEHLP_SYMBOL64 Symbol);
   1027 
   1028 #ifdef _IMAGEHLP64
   1029 #define SymGetSymFromName SymGetSymFromName64
   1030 #else
   1031   WINBOOL IMAGEAPI SymGetSymFromName(HANDLE hProcess,PCSTR Name,PIMAGEHLP_SYMBOL Symbol);
   1032 #endif
   1033 
   1034   DBHLP_DEPRECIATED WINBOOL IMAGEAPI FindFileInPath(HANDLE hprocess,PCSTR SearchPath,PCSTR FileName,PVOID id,DWORD two,DWORD three,DWORD flags,PSTR FilePath);
   1035   DBHLP_DEPRECIATED WINBOOL IMAGEAPI FindFileInSearchPath(HANDLE hprocess,PCSTR SearchPath,PCSTR FileName,DWORD one,DWORD two,DWORD three,PSTR FilePath);
   1036   DBHLP_DEPRECIATED WINBOOL IMAGEAPI SymEnumSym(HANDLE hProcess,ULONG64 BaseOfDll,PSYM_ENUMERATESYMBOLS_CALLBACK EnumSymbolsCallback,PVOID UserContext);
   1037 
   1038 #ifdef __cplusplus
   1039 }
   1040 #endif
   1041 
   1042 #define SYMF_OMAP_GENERATED 0x00000001
   1043 #define SYMF_OMAP_MODIFIED 0x00000002
   1044 #define SYMF_REGISTER 0x00000008
   1045 #define SYMF_REGREL 0x00000010
   1046 #define SYMF_FRAMEREL 0x00000020
   1047 #define SYMF_PARAMETER 0x00000040
   1048 #define SYMF_LOCAL 0x00000080
   1049 #define SYMF_CONSTANT 0x00000100
   1050 #define SYMF_EXPORT 0x00000200
   1051 #define SYMF_FORWARDER 0x00000400
   1052 #define SYMF_FUNCTION 0x00000800
   1053 #define SYMF_VIRTUAL 0x00001000
   1054 #define SYMF_THUNK 0x00002000
   1055 #define SYMF_TLSREL 0x00004000
   1056 
   1057 #define IMAGEHLP_SYMBOL_INFO_VALUEPRESENT 1
   1058 #define IMAGEHLP_SYMBOL_INFO_REGISTER SYMF_REGISTER
   1059 #define IMAGEHLP_SYMBOL_INFO_REGRELATIVE SYMF_REGREL
   1060 #define IMAGEHLP_SYMBOL_INFO_FRAMERELATIVE SYMF_FRAMEREL
   1061 #define IMAGEHLP_SYMBOL_INFO_PARAMETER SYMF_PARAMETER
   1062 #define IMAGEHLP_SYMBOL_INFO_LOCAL SYMF_LOCAL
   1063 #define IMAGEHLP_SYMBOL_INFO_CONSTANT SYMF_CONSTANT
   1064 #define IMAGEHLP_SYMBOL_FUNCTION SYMF_FUNCTION
   1065 #define IMAGEHLP_SYMBOL_VIRTUAL SYMF_VIRTUAL
   1066 #define IMAGEHLP_SYMBOL_THUNK SYMF_THUNK
   1067 #define IMAGEHLP_SYMBOL_INFO_TLSRELATIVE SYMF_TLSREL
   1068 
   1069 #include <pshpack4.h>
   1070 
   1071 #define MINIDUMP_SIGNATURE ('PMDM')
   1072 #define MINIDUMP_VERSION (42899)
   1073   typedef DWORD RVA;
   1074   typedef ULONG64 RVA64;
   1075 
   1076   typedef struct _MINIDUMP_LOCATION_DESCRIPTOR {
   1077     ULONG32 DataSize;
   1078     RVA Rva;
   1079   } MINIDUMP_LOCATION_DESCRIPTOR;
   1080 
   1081   typedef struct _MINIDUMP_LOCATION_DESCRIPTOR64 {
   1082     ULONG64 DataSize;
   1083     RVA64 Rva;
   1084   } MINIDUMP_LOCATION_DESCRIPTOR64;
   1085 
   1086   typedef struct _MINIDUMP_MEMORY_DESCRIPTOR {
   1087     ULONG64 StartOfMemoryRange;
   1088     MINIDUMP_LOCATION_DESCRIPTOR Memory;
   1089   } MINIDUMP_MEMORY_DESCRIPTOR,*PMINIDUMP_MEMORY_DESCRIPTOR;
   1090 
   1091   typedef struct _MINIDUMP_MEMORY_DESCRIPTOR64 {
   1092     ULONG64 StartOfMemoryRange;
   1093     ULONG64 DataSize;
   1094   } MINIDUMP_MEMORY_DESCRIPTOR64,*PMINIDUMP_MEMORY_DESCRIPTOR64;
   1095 
   1096   typedef struct _MINIDUMP_HEADER {
   1097     ULONG32 Signature;
   1098     ULONG32 Version;
   1099     ULONG32 NumberOfStreams;
   1100     RVA StreamDirectoryRva;
   1101     ULONG32 CheckSum;
   1102     __C89_NAMELESS union {
   1103       ULONG32 Reserved;
   1104       ULONG32 TimeDateStamp;
   1105     };
   1106     ULONG64 Flags;
   1107   } MINIDUMP_HEADER,*PMINIDUMP_HEADER;
   1108 
   1109   typedef struct _MINIDUMP_DIRECTORY {
   1110     ULONG32 StreamType;
   1111     MINIDUMP_LOCATION_DESCRIPTOR Location;
   1112   } MINIDUMP_DIRECTORY,*PMINIDUMP_DIRECTORY;
   1113 
   1114   typedef struct _MINIDUMP_STRING {
   1115     ULONG32 Length;
   1116     WCHAR Buffer[0];
   1117   } MINIDUMP_STRING,*PMINIDUMP_STRING;
   1118 
   1119   typedef enum _MINIDUMP_STREAM_TYPE {
   1120     UnusedStream = 0,
   1121     ReservedStream0 = 1,
   1122     ReservedStream1 = 2,
   1123     ThreadListStream = 3,
   1124     ModuleListStream = 4,
   1125     MemoryListStream = 5,
   1126     ExceptionStream = 6,
   1127     SystemInfoStream = 7,
   1128     ThreadExListStream = 8,
   1129     Memory64ListStream = 9,
   1130     CommentStreamA = 10,
   1131     CommentStreamW = 11,
   1132     HandleDataStream = 12,
   1133     FunctionTableStream = 13,
   1134     UnloadedModuleListStream = 14,
   1135     MiscInfoStream = 15,
   1136     MemoryInfoListStream = 16,
   1137     ThreadInfoListStream = 17,
   1138     HandleOperationListStream = 18,
   1139     TokenStream = 19,
   1140     ceStreamNull = 0x8000,
   1141     ceStreamSystemInfo = 0x8001,
   1142     ceStreamException = 0x8002,
   1143     ceStreamModuleList = 0x8003,
   1144     ceStreamProcessList = 0x8004,
   1145     ceStreamThreadList = 0x8005,
   1146     ceStreamThreadContextList = 0x8006,
   1147     ceStreamThreadCallStackList = 0x8007,
   1148     ceStreamMemoryVirtualList = 0x8008,
   1149     ceStreamMemoryPhysicalList = 0x8009,
   1150     ceStreamBucketParameters = 0x800a,
   1151     ceStreamProcessModuleMap = 0x800b,
   1152     ceStreamDiagnosisList = 0x800c,
   1153     LastReservedStream = 0xffff
   1154   } MINIDUMP_STREAM_TYPE;
   1155 
   1156   typedef union _CPU_INFORMATION {
   1157     struct {
   1158       ULONG32 VendorId[3];
   1159       ULONG32 VersionInformation;
   1160       ULONG32 FeatureInformation;
   1161       ULONG32 AMDExtendedCpuFeatures;
   1162     } X86CpuInfo;
   1163     struct {
   1164       ULONG64 ProcessorFeatures[2];
   1165     } OtherCpuInfo;
   1166   } CPU_INFORMATION,*PCPU_INFORMATION;
   1167 
   1168   typedef struct _MINIDUMP_SYSTEM_INFO {
   1169     USHORT ProcessorArchitecture;
   1170     USHORT ProcessorLevel;
   1171     USHORT ProcessorRevision;
   1172     __C89_NAMELESS union {
   1173       USHORT Reserved0;
   1174       __C89_NAMELESS struct {
   1175 	UCHAR NumberOfProcessors;
   1176 	UCHAR ProductType;
   1177       };
   1178     };
   1179     ULONG32 MajorVersion;
   1180     ULONG32 MinorVersion;
   1181     ULONG32 BuildNumber;
   1182     ULONG32 PlatformId;
   1183     RVA CSDVersionRva;
   1184     __C89_NAMELESS union {
   1185       ULONG32 Reserved1;
   1186       __C89_NAMELESS struct {
   1187 	USHORT SuiteMask;
   1188 	USHORT Reserved2;
   1189       };
   1190     };
   1191     CPU_INFORMATION Cpu;
   1192   } MINIDUMP_SYSTEM_INFO,*PMINIDUMP_SYSTEM_INFO;
   1193 
   1194   C_ASSERT(sizeof(((PPROCESS_INFORMATION)0)->dwThreadId)==4);
   1195 
   1196   typedef struct _MINIDUMP_THREAD {
   1197     ULONG32 ThreadId;
   1198     ULONG32 SuspendCount;
   1199     ULONG32 PriorityClass;
   1200     ULONG32 Priority;
   1201     ULONG64 Teb;
   1202     MINIDUMP_MEMORY_DESCRIPTOR Stack;
   1203     MINIDUMP_LOCATION_DESCRIPTOR ThreadContext;
   1204   } MINIDUMP_THREAD,*PMINIDUMP_THREAD;
   1205 
   1206   typedef struct _MINIDUMP_THREAD_LIST {
   1207     ULONG32 NumberOfThreads;
   1208     MINIDUMP_THREAD Threads[0];
   1209   } MINIDUMP_THREAD_LIST,*PMINIDUMP_THREAD_LIST;
   1210 
   1211   typedef struct _MINIDUMP_THREAD_EX {
   1212     ULONG32 ThreadId;
   1213     ULONG32 SuspendCount;
   1214     ULONG32 PriorityClass;
   1215     ULONG32 Priority;
   1216     ULONG64 Teb;
   1217     MINIDUMP_MEMORY_DESCRIPTOR Stack;
   1218     MINIDUMP_LOCATION_DESCRIPTOR ThreadContext;
   1219     MINIDUMP_MEMORY_DESCRIPTOR BackingStore;
   1220   } MINIDUMP_THREAD_EX,*PMINIDUMP_THREAD_EX;
   1221 
   1222   typedef struct _MINIDUMP_THREAD_EX_LIST {
   1223     ULONG32 NumberOfThreads;
   1224     MINIDUMP_THREAD_EX Threads[0];
   1225   } MINIDUMP_THREAD_EX_LIST,*PMINIDUMP_THREAD_EX_LIST;
   1226 
   1227   typedef struct _MINIDUMP_EXCEPTION {
   1228     ULONG32 ExceptionCode;
   1229     ULONG32 ExceptionFlags;
   1230     ULONG64 ExceptionRecord;
   1231     ULONG64 ExceptionAddress;
   1232     ULONG32 NumberParameters;
   1233     ULONG32 __unusedAlignment;
   1234     ULONG64 ExceptionInformation[EXCEPTION_MAXIMUM_PARAMETERS];
   1235   } MINIDUMP_EXCEPTION,*PMINIDUMP_EXCEPTION;
   1236 
   1237   typedef struct MINIDUMP_EXCEPTION_STREAM {
   1238     ULONG32 ThreadId;
   1239     ULONG32 __alignment;
   1240     MINIDUMP_EXCEPTION ExceptionRecord;
   1241     MINIDUMP_LOCATION_DESCRIPTOR ThreadContext;
   1242   } MINIDUMP_EXCEPTION_STREAM,*PMINIDUMP_EXCEPTION_STREAM;
   1243 
   1244   typedef struct _MINIDUMP_MODULE {
   1245     ULONG64 BaseOfImage;
   1246     ULONG32 SizeOfImage;
   1247     ULONG32 CheckSum;
   1248     ULONG32 TimeDateStamp;
   1249     RVA ModuleNameRva;
   1250     VS_FIXEDFILEINFO VersionInfo;
   1251     MINIDUMP_LOCATION_DESCRIPTOR CvRecord;
   1252     MINIDUMP_LOCATION_DESCRIPTOR MiscRecord;
   1253     ULONG64 Reserved0;
   1254     ULONG64 Reserved1;
   1255   } MINIDUMP_MODULE,*PMINIDUMP_MODULE;
   1256 
   1257   typedef struct _MINIDUMP_MODULE_LIST {
   1258     ULONG32 NumberOfModules;
   1259     MINIDUMP_MODULE Modules[0];
   1260   } MINIDUMP_MODULE_LIST,*PMINIDUMP_MODULE_LIST;
   1261 
   1262   typedef struct _MINIDUMP_MEMORY_LIST {
   1263     ULONG32 NumberOfMemoryRanges;
   1264     MINIDUMP_MEMORY_DESCRIPTOR MemoryRanges[0];
   1265   } MINIDUMP_MEMORY_LIST,*PMINIDUMP_MEMORY_LIST;
   1266 
   1267   typedef struct _MINIDUMP_MEMORY64_LIST {
   1268     ULONG64 NumberOfMemoryRanges;
   1269     RVA64 BaseRva;
   1270     MINIDUMP_MEMORY_DESCRIPTOR64 MemoryRanges[0];
   1271   } MINIDUMP_MEMORY64_LIST,*PMINIDUMP_MEMORY64_LIST;
   1272 
   1273   typedef struct _MINIDUMP_EXCEPTION_INFORMATION {
   1274     DWORD ThreadId;
   1275     PEXCEPTION_POINTERS ExceptionPointers;
   1276     WINBOOL ClientPointers;
   1277   } MINIDUMP_EXCEPTION_INFORMATION,*PMINIDUMP_EXCEPTION_INFORMATION;
   1278 
   1279   typedef struct _MINIDUMP_EXCEPTION_INFORMATION64 {
   1280     DWORD ThreadId;
   1281     ULONG64 ExceptionRecord;
   1282     ULONG64 ContextRecord;
   1283     WINBOOL ClientPointers;
   1284   } MINIDUMP_EXCEPTION_INFORMATION64,*PMINIDUMP_EXCEPTION_INFORMATION64;
   1285 
   1286   typedef struct _MINIDUMP_HANDLE_DESCRIPTOR {
   1287     ULONG64 Handle;
   1288     RVA TypeNameRva;
   1289     RVA ObjectNameRva;
   1290     ULONG32 Attributes;
   1291     ULONG32 GrantedAccess;
   1292     ULONG32 HandleCount;
   1293     ULONG32 PointerCount;
   1294   } MINIDUMP_HANDLE_DESCRIPTOR,*PMINIDUMP_HANDLE_DESCRIPTOR;
   1295 
   1296   typedef struct _MINIDUMP_HANDLE_DATA_STREAM {
   1297     ULONG32 SizeOfHeader;
   1298     ULONG32 SizeOfDescriptor;
   1299     ULONG32 NumberOfDescriptors;
   1300     ULONG32 Reserved;
   1301   } MINIDUMP_HANDLE_DATA_STREAM,*PMINIDUMP_HANDLE_DATA_STREAM;
   1302 
   1303   typedef struct _MINIDUMP_FUNCTION_TABLE_DESCRIPTOR {
   1304     ULONG64 MinimumAddress;
   1305     ULONG64 MaximumAddress;
   1306     ULONG64 BaseAddress;
   1307     ULONG32 EntryCount;
   1308     ULONG32 SizeOfAlignPad;
   1309   } MINIDUMP_FUNCTION_TABLE_DESCRIPTOR,*PMINIDUMP_FUNCTION_TABLE_DESCRIPTOR;
   1310 
   1311   typedef struct _MINIDUMP_FUNCTION_TABLE_STREAM {
   1312     ULONG32 SizeOfHeader;
   1313     ULONG32 SizeOfDescriptor;
   1314     ULONG32 SizeOfNativeDescriptor;
   1315     ULONG32 SizeOfFunctionEntry;
   1316     ULONG32 NumberOfDescriptors;
   1317     ULONG32 SizeOfAlignPad;
   1318   } MINIDUMP_FUNCTION_TABLE_STREAM,*PMINIDUMP_FUNCTION_TABLE_STREAM;
   1319 
   1320   typedef struct _MINIDUMP_UNLOADED_MODULE {
   1321     ULONG64 BaseOfImage;
   1322     ULONG32 SizeOfImage;
   1323     ULONG32 CheckSum;
   1324     ULONG32 TimeDateStamp;
   1325     RVA ModuleNameRva;
   1326   } MINIDUMP_UNLOADED_MODULE,*PMINIDUMP_UNLOADED_MODULE;
   1327 
   1328   typedef struct _MINIDUMP_UNLOADED_MODULE_LIST {
   1329     ULONG32 SizeOfHeader;
   1330     ULONG32 SizeOfEntry;
   1331     ULONG32 NumberOfEntries;
   1332   } MINIDUMP_UNLOADED_MODULE_LIST,*PMINIDUMP_UNLOADED_MODULE_LIST;
   1333 
   1334 #define MINIDUMP_MISC1_PROCESS_ID 0x00000001
   1335 #define MINIDUMP_MISC1_PROCESS_TIMES 0x00000002
   1336 #define MINIDUMP_MISC1_PROCESSOR_POWER_INFO 0x00000004
   1337 
   1338   typedef struct _MINIDUMP_MISC_INFO {
   1339     ULONG32 SizeOfInfo;
   1340     ULONG32 Flags1;
   1341     ULONG32 ProcessId;
   1342     ULONG32 ProcessCreateTime;
   1343     ULONG32 ProcessUserTime;
   1344     ULONG32 ProcessKernelTime;
   1345   } MINIDUMP_MISC_INFO,*PMINIDUMP_MISC_INFO;
   1346 
   1347   typedef struct _MINIDUMP_USER_RECORD {
   1348     ULONG32 Type;
   1349     MINIDUMP_LOCATION_DESCRIPTOR Memory;
   1350   } MINIDUMP_USER_RECORD,*PMINIDUMP_USER_RECORD;
   1351 
   1352   typedef struct _MINIDUMP_USER_STREAM {
   1353     ULONG32 Type;
   1354     ULONG BufferSize;
   1355     PVOID Buffer;
   1356   } MINIDUMP_USER_STREAM,*PMINIDUMP_USER_STREAM;
   1357 
   1358   typedef struct _MINIDUMP_USER_STREAM_INFORMATION {
   1359     ULONG UserStreamCount;
   1360     PMINIDUMP_USER_STREAM UserStreamArray;
   1361   } MINIDUMP_USER_STREAM_INFORMATION,*PMINIDUMP_USER_STREAM_INFORMATION;
   1362 
   1363   typedef enum _MINIDUMP_CALLBACK_TYPE {
   1364     ModuleCallback,
   1365     ThreadCallback,
   1366     ThreadExCallback,
   1367     IncludeThreadCallback,
   1368     IncludeModuleCallback,
   1369     MemoryCallback,
   1370     CancelCallback,
   1371     WriteKernelMinidumpCallback,
   1372     KernelMinidumpStatusCallback,
   1373     RemoveMemoryCallback,
   1374     IncludeVmRegionCallback,
   1375     IoStartCallback,
   1376     IoWriteAllCallback,
   1377     IoFinishCallback,
   1378     ReadMemoryFailureCallback,
   1379     SecondaryFlagsCallback
   1380   } MINIDUMP_CALLBACK_TYPE;
   1381 
   1382   typedef struct _MINIDUMP_THREAD_CALLBACK {
   1383     ULONG ThreadId;
   1384     HANDLE ThreadHandle;
   1385     CONTEXT Context;
   1386     ULONG SizeOfContext;
   1387     ULONG64 StackBase;
   1388     ULONG64 StackEnd;
   1389   } MINIDUMP_THREAD_CALLBACK,*PMINIDUMP_THREAD_CALLBACK;
   1390 
   1391   typedef struct _MINIDUMP_THREAD_EX_CALLBACK {
   1392     ULONG ThreadId;
   1393     HANDLE ThreadHandle;
   1394     CONTEXT Context;
   1395     ULONG SizeOfContext;
   1396     ULONG64 StackBase;
   1397     ULONG64 StackEnd;
   1398     ULONG64 BackingStoreBase;
   1399     ULONG64 BackingStoreEnd;
   1400   } MINIDUMP_THREAD_EX_CALLBACK,*PMINIDUMP_THREAD_EX_CALLBACK;
   1401 
   1402   typedef struct _MINIDUMP_INCLUDE_THREAD_CALLBACK {
   1403     ULONG ThreadId;
   1404   } MINIDUMP_INCLUDE_THREAD_CALLBACK,*PMINIDUMP_INCLUDE_THREAD_CALLBACK;
   1405 
   1406   typedef enum _THREAD_WRITE_FLAGS {
   1407     ThreadWriteThread              = 0x0001,
   1408     ThreadWriteStack               = 0x0002,
   1409     ThreadWriteContext             = 0x0004,
   1410     ThreadWriteBackingStore        = 0x0008,
   1411     ThreadWriteInstructionWindow   = 0x0010,
   1412     ThreadWriteThreadData          = 0x0020,
   1413     ThreadWriteThreadInfo          = 0x0040
   1414   } THREAD_WRITE_FLAGS;
   1415 
   1416   typedef struct _MINIDUMP_MODULE_CALLBACK {
   1417     PWCHAR FullPath;
   1418     ULONG64 BaseOfImage;
   1419     ULONG SizeOfImage;
   1420     ULONG CheckSum;
   1421     ULONG TimeDateStamp;
   1422     VS_FIXEDFILEINFO VersionInfo;
   1423     PVOID CvRecord;
   1424     ULONG SizeOfCvRecord;
   1425     PVOID MiscRecord;
   1426     ULONG SizeOfMiscRecord;
   1427   } MINIDUMP_MODULE_CALLBACK,*PMINIDUMP_MODULE_CALLBACK;
   1428 
   1429   typedef struct _MINIDUMP_INCLUDE_MODULE_CALLBACK {
   1430     ULONG64 BaseOfImage;
   1431   } MINIDUMP_INCLUDE_MODULE_CALLBACK,*PMINIDUMP_INCLUDE_MODULE_CALLBACK;
   1432 
   1433   typedef enum _MODULE_WRITE_FLAGS {
   1434     ModuleWriteModule          = 0x0001,
   1435     ModuleWriteDataSeg         = 0x0002,
   1436     ModuleWriteMiscRecord      = 0x0004,
   1437     ModuleWriteCvRecord        = 0x0008,
   1438     ModuleReferencedByMemory   = 0x0010,
   1439     ModuleWriteTlsData         = 0x0020,
   1440     ModuleWriteCodeSegs        = 0x0040
   1441   } MODULE_WRITE_FLAGS;
   1442 
   1443   typedef enum _MINIDUMP_SECONDARY_FLAGS {
   1444     MiniSecondaryWithoutPowerInfo   = 0x00000001
   1445   } MINIDUMP_SECONDARY_FLAGS;
   1446 
   1447   typedef struct _MINIDUMP_CALLBACK_INPUT {
   1448     ULONG ProcessId;
   1449     HANDLE ProcessHandle;
   1450     ULONG CallbackType;
   1451     __C89_NAMELESS union {
   1452       MINIDUMP_THREAD_CALLBACK Thread;
   1453       MINIDUMP_THREAD_EX_CALLBACK ThreadEx;
   1454       MINIDUMP_MODULE_CALLBACK Module;
   1455       MINIDUMP_INCLUDE_THREAD_CALLBACK IncludeThread;
   1456       MINIDUMP_INCLUDE_MODULE_CALLBACK IncludeModule;
   1457     };
   1458   } MINIDUMP_CALLBACK_INPUT,*PMINIDUMP_CALLBACK_INPUT;
   1459 
   1460 typedef struct _MINIDUMP_MEMORY_INFO {
   1461   ULONG64 BaseAddress;
   1462   ULONG64 AllocationBase;
   1463   ULONG32 AllocationProtect;
   1464   ULONG32 __alignment1;
   1465   ULONG64 RegionSize;
   1466   ULONG32 State;
   1467   ULONG32 Protect;
   1468   ULONG32 Type;
   1469   ULONG32 __alignment2;
   1470 } MINIDUMP_MEMORY_INFO, *PMINIDUMP_MEMORY_INFO;
   1471 
   1472 typedef struct _MINIDUMP_MISC_INFO_2 {
   1473   ULONG32 SizeOfInfo;
   1474   ULONG32 Flags1;
   1475   ULONG32 ProcessId;
   1476   ULONG32 ProcessCreateTime;
   1477   ULONG32 ProcessUserTime;
   1478   ULONG32 ProcessKernelTime;
   1479   ULONG32 ProcessorMaxMhz;
   1480   ULONG32 ProcessorCurrentMhz;
   1481   ULONG32 ProcessorMhzLimit;
   1482   ULONG32 ProcessorMaxIdleState;
   1483   ULONG32 ProcessorCurrentIdleState;
   1484 } MINIDUMP_MISC_INFO_2, *PMINIDUMP_MISC_INFO_2;
   1485 
   1486 typedef struct _MINIDUMP_MEMORY_INFO_LIST {
   1487   ULONG   SizeOfHeader;
   1488   ULONG   SizeOfEntry;
   1489   ULONG64 NumberOfEntries;
   1490 } MINIDUMP_MEMORY_INFO_LIST, *PMINIDUMP_MEMORY_INFO_LIST;
   1491 
   1492   typedef struct _MINIDUMP_CALLBACK_OUTPUT {
   1493     __C89_NAMELESS union {
   1494       ULONG ModuleWriteFlags;
   1495       ULONG ThreadWriteFlags;
   1496       ULONG SecondaryFlags;
   1497       __C89_NAMELESS struct {
   1498 	ULONG64 MemoryBase;
   1499 	ULONG MemorySize;
   1500       };
   1501       __C89_NAMELESS struct {
   1502 	WINBOOL CheckCancel;
   1503 	WINBOOL Cancel;
   1504       };
   1505       HANDLE Handle;
   1506     };
   1507     __C89_NAMELESS struct {
   1508       MINIDUMP_MEMORY_INFO VmRegion;
   1509       WINBOOL Continue;
   1510     };
   1511     HRESULT Status;
   1512   } MINIDUMP_CALLBACK_OUTPUT, *PMINIDUMP_CALLBACK_OUTPUT;
   1513 
   1514   typedef enum _MINIDUMP_TYPE {
   1515     MiniDumpNormal                           = 0x00000000,
   1516     MiniDumpWithDataSegs                     = 0x00000001,
   1517     MiniDumpWithFullMemory                   = 0x00000002,
   1518     MiniDumpWithHandleData                   = 0x00000004,
   1519     MiniDumpFilterMemory                     = 0x00000008,
   1520     MiniDumpScanMemory                       = 0x00000010,
   1521     MiniDumpWithUnloadedModules              = 0x00000020,
   1522     MiniDumpWithIndirectlyReferencedMemory   = 0x00000040,
   1523     MiniDumpFilterModulePaths                = 0x00000080,
   1524     MiniDumpWithProcessThreadData            = 0x00000100,
   1525     MiniDumpWithPrivateReadWriteMemory       = 0x00000200,
   1526     MiniDumpWithoutOptionalData              = 0x00000400,
   1527     MiniDumpWithFullMemoryInfo               = 0x00000800,
   1528     MiniDumpWithThreadInfo                   = 0x00001000,
   1529     MiniDumpWithCodeSegs                     = 0x00002000,
   1530     MiniDumpWithoutAuxiliaryState            = 0x00004000,
   1531     MiniDumpWithFullAuxiliaryState           = 0x00008000,
   1532     MiniDumpWithPrivateWriteCopyMemory       = 0x00010000,
   1533     MiniDumpIgnoreInaccessibleMemory         = 0x00020000,
   1534     MiniDumpWithTokenInformation             = 0x00040000
   1535   } MINIDUMP_TYPE;
   1536 
   1537 #define MINIDUMP_THREAD_INFO_ERROR_THREAD    0x00000001
   1538 #define MINIDUMP_THREAD_INFO_WRITING_THREAD  0x00000002
   1539 #define MINIDUMP_THREAD_INFO_EXITED_THREAD   0x00000004
   1540 #define MINIDUMP_THREAD_INFO_INVALID_INFO    0x00000008
   1541 #define MINIDUMP_THREAD_INFO_INVALID_CONTEXT 0x00000010
   1542 #define MINIDUMP_THREAD_INFO_INVALID_TEB     0x00000020
   1543 
   1544 typedef struct _MINIDUMP_THREAD_INFO {
   1545   ULONG32 ThreadId;
   1546   ULONG32 DumpFlags;
   1547   ULONG32 DumpError;
   1548   ULONG32 ExitStatus;
   1549   ULONG64 CreateTime;
   1550   ULONG64 ExitTime;
   1551   ULONG64 KernelTime;
   1552   ULONG64 UserTime;
   1553   ULONG64 StartAddress;
   1554   ULONG64 Affinity;
   1555 } MINIDUMP_THREAD_INFO, *PMINIDUMP_THREAD_INFO;
   1556 
   1557 typedef struct _MINIDUMP_THREAD_INFO_LIST {
   1558   ULONG   SizeOfHeader;
   1559   ULONG   SizeOfEntry;
   1560   ULONG   NumberOfEntries;
   1561 } MINIDUMP_THREAD_INFO_LIST, *PMINIDUMP_THREAD_INFO_LIST;
   1562 
   1563 typedef struct _MINIDUMP_HANDLE_OPERATION_LIST {
   1564     ULONG32 SizeOfHeader;
   1565     ULONG32 SizeOfEntry;
   1566     ULONG32 NumberOfEntries;
   1567     ULONG32 Reserved;
   1568 } MINIDUMP_HANDLE_OPERATION_LIST, *PMINIDUMP_HANDLE_OPERATION_LIST;
   1569 
   1570 #ifdef __cplusplus
   1571 extern "C" {
   1572 #endif
   1573 
   1574   typedef WINBOOL (WINAPI *MINIDUMP_CALLBACK_ROUTINE)(PVOID CallbackParam,CONST PMINIDUMP_CALLBACK_INPUT CallbackInput,PMINIDUMP_CALLBACK_OUTPUT CallbackOutput);
   1575 
   1576   typedef struct _MINIDUMP_CALLBACK_INFORMATION {
   1577     MINIDUMP_CALLBACK_ROUTINE CallbackRoutine;
   1578     PVOID CallbackParam;
   1579   } MINIDUMP_CALLBACK_INFORMATION,*PMINIDUMP_CALLBACK_INFORMATION;
   1580 
   1581 #define RVA_TO_ADDR(Mapping,Rva) ((PVOID)(((ULONG_PTR) (Mapping)) + (Rva)))
   1582 
   1583   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);
   1584   WINBOOL WINAPI MiniDumpReadDumpStream(PVOID BaseOfDump,ULONG StreamNumber,PMINIDUMP_DIRECTORY *Dir,PVOID *StreamPointer,ULONG *StreamSize);
   1585 
   1586 WINBOOL WINAPI EnumerateLoadedModulesEx(
   1587   HANDLE hProcess,
   1588   PENUMLOADED_MODULES_CALLBACK64 EnumLoadedModulesCallback,
   1589   PVOID UserContext
   1590 );
   1591 
   1592 WINBOOL WINAPI EnumerateLoadedModulesExW(
   1593   HANDLE hProcess,
   1594   PENUMLOADED_MODULES_CALLBACKW64 EnumLoadedModulesCallback,
   1595   PVOID UserContext
   1596 );
   1597 
   1598 WINBOOL WINAPI SymAddSourceStream(
   1599   HANDLE hProcess,
   1600   ULONG64 Base,
   1601   PCSTR StreamFile,
   1602   PBYTE Buffer,
   1603   size_t Size
   1604 );
   1605 
   1606 WINBOOL WINAPI SymAddSourceStreamW(
   1607   HANDLE hProcess,
   1608   ULONG64 Base,
   1609   PCWSTR StreamFile,
   1610   PBYTE Buffer,
   1611   size_t Size
   1612 );
   1613 
   1614 WINBOOL WINAPI SymEnumSourceLines(
   1615   HANDLE hProcess,
   1616   ULONG64 Base,
   1617   PCSTR Obj,
   1618   PCSTR File,
   1619   DWORD Line,
   1620   DWORD Flags,
   1621   PSYM_ENUMLINES_CALLBACK EnumLinesCallback,
   1622   PVOID UserContext
   1623 );
   1624 
   1625 WINBOOL WINAPI SymEnumSourceLinesW(
   1626   HANDLE hProcess,
   1627   ULONG64 Base,
   1628   PCWSTR Obj,
   1629   PCWSTR File,
   1630   DWORD Line,
   1631   DWORD Flags,
   1632   PSYM_ENUMLINES_CALLBACKW EnumLinesCallback,
   1633   PVOID UserContext
   1634 );
   1635 
   1636 WINBOOL WINAPI SymEnumTypesByName(
   1637   HANDLE hProcess,
   1638   ULONG64 BaseOfDll,
   1639   PCSTR mask,
   1640   PSYM_ENUMERATESYMBOLS_CALLBACK EnumSymbolsCallback,
   1641   PVOID UserContext
   1642 );
   1643 
   1644 WINBOOL WINAPI SymEnumTypesByNameW(
   1645   HANDLE hProcess,
   1646   ULONG64 BaseOfDll,
   1647   PCSTR mask,
   1648   PSYM_ENUMERATESYMBOLS_CALLBACKW EnumSymbolsCallback,
   1649   PVOID UserContext
   1650 );
   1651 
   1652 HANDLE WINAPI SymFindDebugInfoFile(
   1653   HANDLE hProcess,
   1654   PCSTR FileName,
   1655   PSTR DebugFilePath,
   1656   PFIND_DEBUG_FILE_CALLBACK Callback,
   1657   PVOID CallerData
   1658 );
   1659 
   1660 HANDLE WINAPI SymFindDebugInfoFileW(
   1661   HANDLE hProcess,
   1662   PCWSTR FileName,
   1663   PWSTR DebugFilePath,
   1664   PFIND_DEBUG_FILE_CALLBACKW Callback,
   1665   PVOID CallerData
   1666 );
   1667 
   1668 HANDLE WINAPI SymFindExecutableImage(
   1669   HANDLE hProcess,
   1670   PCSTR FileName,
   1671   PSTR ImageFilePath,
   1672   PFIND_EXE_FILE_CALLBACK Callback,
   1673   PVOID CallerData
   1674 );
   1675 
   1676 HANDLE WINAPI SymFindExecutableImageW(
   1677   HANDLE hProcess,
   1678   PCWSTR FileName,
   1679   PWSTR ImageFilePath,
   1680   PFIND_EXE_FILE_CALLBACKW Callback,
   1681   PVOID CallerData
   1682 );
   1683 
   1684 WINBOOL WINAPI SymFromIndex(
   1685   HANDLE hProcess,
   1686   ULONG64 BaseOfDll,
   1687   DWORD Index,
   1688   PSYMBOL_INFO Symbol
   1689 );
   1690 
   1691 WINBOOL WINAPI SymFromIndexW(
   1692   HANDLE hProcess,
   1693   ULONG64 BaseOfDll,
   1694   DWORD Index,
   1695   PSYMBOL_INFOW Symbol
   1696 );
   1697 
   1698 WINBOOL WINAPI SymGetScope(
   1699   HANDLE hProcess,
   1700   ULONG64 BaseOfDll,
   1701   DWORD Index,
   1702   PSYMBOL_INFO Symbol
   1703 );
   1704 
   1705 WINBOOL WINAPI SymGetScopeW(
   1706   HANDLE hProcess,
   1707   ULONG64 BaseOfDll,
   1708   DWORD Index,
   1709   PSYMBOL_INFOW Symbol
   1710 );
   1711 
   1712 WINBOOL WINAPI SymGetSourceFileFromToken(
   1713   HANDLE hProcess,
   1714   PVOID Token,
   1715   PCSTR Params,
   1716   PSTR FilePath,
   1717   DWORD Size
   1718 );
   1719 
   1720 WINBOOL WINAPI SymGetSourceFileFromTokenW(
   1721   HANDLE hProcess,
   1722   PVOID Token,
   1723   PCWSTR Params,
   1724   PWSTR FilePath,
   1725   DWORD Size
   1726 );
   1727 
   1728 WINBOOL WINAPI SymGetSourceFileToken(
   1729   HANDLE hProcess,
   1730   ULONG64 Base,
   1731   PCSTR FileSpec,
   1732   PVOID *Token,
   1733   DWORD *Size
   1734 );
   1735 
   1736 WINBOOL WINAPI SymGetSourceFileTokenW(
   1737   HANDLE hProcess,
   1738   ULONG64 Base,
   1739   PCWSTR FileSpec,
   1740   PVOID *Token,
   1741   DWORD *Size
   1742 );
   1743 
   1744 WINBOOL WINAPI SymGetSourceFile(
   1745   HANDLE hProcess,
   1746   ULONG64 Base,
   1747   PCSTR Params,
   1748   PCSTR FileSpec,
   1749   PSTR FilePath,
   1750   DWORD Size
   1751 );
   1752 
   1753 WINBOOL WINAPI SymGetSourceFileW(
   1754   HANDLE hProcess,
   1755   ULONG64 Base,
   1756   PCWSTR Params,
   1757   PCWSTR FileSpec,
   1758   PWSTR FilePath,
   1759   DWORD Size
   1760 );
   1761 
   1762 WINBOOL WINAPI SymGetSourceVarFromToken(
   1763   HANDLE hProcess,
   1764   PVOID Token,
   1765   PCSTR Params,
   1766   PCSTR VarName,
   1767   PSTR Value,
   1768   DWORD Size
   1769 );
   1770 
   1771 WINBOOL WINAPI SymGetSourceVarFromTokenW(
   1772   HANDLE hProcess,
   1773   PVOID Token,
   1774   PCWSTR Params,
   1775   PCWSTR VarName,
   1776   PWSTR Value,
   1777   DWORD Size
   1778 );
   1779 
   1780 WINBOOL WINAPI SymGetSymbolFile(
   1781   HANDLE hProcess,
   1782   PCSTR SymPath,
   1783   PCSTR ImageFile,
   1784   DWORD Type,
   1785   PSTR SymbolFile,
   1786   size_t cSymbolFile,
   1787   PSTR DbgFile,
   1788   size_t cDbgFile
   1789 );
   1790 
   1791 WINBOOL WINAPI SymGetSymbolFileW(
   1792   HANDLE hProcess,
   1793   PCWSTR SymPath,
   1794   PCWSTR ImageFile,
   1795   DWORD Type,
   1796   PWSTR SymbolFile,
   1797   size_t cSymbolFile,
   1798   PWSTR DbgFile,
   1799   size_t cDbgFile
   1800 );
   1801 
   1802 WINBOOL WINAPI SymNext(
   1803   HANDLE hProcess,
   1804   PSYMBOL_INFO Symbol
   1805 );
   1806 
   1807 WINBOOL WINAPI SymNextW(
   1808   HANDLE hProcess,
   1809   PSYMBOL_INFOW Symbol
   1810 );
   1811 
   1812 WINBOOL WINAPI SymPrev(
   1813   HANDLE hProcess,
   1814   PSYMBOL_INFO Symbol
   1815 );
   1816 
   1817 WINBOOL WINAPI SymPrevW(
   1818   HANDLE hProcess,
   1819   PSYMBOL_INFOW Symbol
   1820 );
   1821 
   1822 WINBOOL WINAPI SymRefreshModuleList(
   1823   HANDLE hProcess
   1824 );
   1825 
   1826 #define SYMSEARCH_MASKOBJS 0x01
   1827 #define SYMSEARCH_RECURSE 0x02
   1828 #define SYMSEARCH_GLOBALSONLY 0x04
   1829 #define SYMSEARCH_ALLITEMS 0x08
   1830 
   1831 WINBOOL WINAPI SymSearch(
   1832   HANDLE hProcess,
   1833   ULONG64 BaseOfDll,
   1834   DWORD Index,
   1835   DWORD SymTag,
   1836   PCSTR Mask,
   1837   DWORD64 Address,
   1838   PSYM_ENUMERATESYMBOLS_CALLBACK EnumSymbolsCallback,
   1839   PVOID UserContext,
   1840   DWORD Options
   1841 );
   1842 
   1843 WINBOOL WINAPI SymSearchW(
   1844   HANDLE hProcess,
   1845   ULONG64 BaseOfDll,
   1846   DWORD Index,
   1847   DWORD SymTag,
   1848   PCWSTR Mask,
   1849   DWORD64 Address,
   1850   PSYM_ENUMERATESYMBOLS_CALLBACKW EnumSymbolsCallback,
   1851   PVOID UserContext,
   1852   DWORD Options
   1853 );
   1854 
   1855 WINBOOL WINAPI SymSrvGetFileIndexString(
   1856   HANDLE hProcess,
   1857   PCSTR SrvPath,
   1858   PCSTR File,
   1859   PSTR Index,
   1860   size_t Size,
   1861   DWORD Flags
   1862 );
   1863 
   1864 WINBOOL WINAPI SymSrvGetFileIndexStringW(
   1865   HANDLE hProcess,
   1866   PCWSTR SrvPath,
   1867   PCWSTR File,
   1868   PWSTR Index,
   1869   size_t Size,
   1870   DWORD Flags
   1871 );
   1872 
   1873 #ifdef DBGHELP_TRANSLATE_TCHAR
   1874 #define SymSrvGetFileIndexString SymSrvGetFileIndexStringW
   1875 #endif
   1876 
   1877 WINBOOL WINAPI SymSrvGetFileIndexInfo(
   1878   PCSTR File,
   1879   PSYMSRV_INDEX_INFO Info,
   1880   DWORD Flags
   1881 );
   1882 
   1883 WINBOOL WINAPI SymSrvGetFileIndexInfoW(
   1884   PCWSTR File,
   1885   PSYMSRV_INDEX_INFOW Info,
   1886   DWORD Flags
   1887 );
   1888 
   1889 #ifdef DBGHELP_TRANSLATE_TCHAR
   1890 #define SymSrvGetFileIndexInfo SymSrvGetFileIndexInfoW
   1891 #endif
   1892 
   1893 WINBOOL WINAPI SymSrvGetFileIndexes(
   1894   PCTSTR File,
   1895   GUID *Id,
   1896   DWORD *Val1,
   1897   DWORD *Val2,
   1898   DWORD Flags
   1899 );
   1900 
   1901 WINBOOL WINAPI SymSrvGetFileIndexesW(
   1902   PCWSTR File,
   1903   GUID *Id,
   1904   DWORD *Val1,
   1905   DWORD *Val2,
   1906   DWORD Flags
   1907 );
   1908 
   1909 #ifdef DBGHELP_TRANSLATE_TCHAR
   1910 #define SymSrvGetFileIndexes SymSrvGetFileIndexesW
   1911 #endif
   1912 
   1913 PCSTR WINAPI SymSrvGetSupplement(
   1914   HANDLE hProcess,
   1915   PCSTR SymPath,
   1916   PCSTR Node,
   1917   PCSTR File
   1918 );
   1919 
   1920 PCWSTR WINAPI SymSrvGetSupplementW(
   1921   HANDLE hProcess,
   1922   PCWSTR SymPath,
   1923   PCWSTR Node,
   1924   PCWSTR File
   1925 );
   1926 
   1927 #ifdef DBGHELP_TRANSLATE_TCHAR
   1928 #define SymSrvGetSupplement SymSrvGetSupplementW
   1929 #endif
   1930 
   1931 WINBOOL WINAPI SymSrvIsStore(
   1932   HANDLE hProcess,
   1933   PCSTR path
   1934 );
   1935 
   1936 WINBOOL WINAPI SymSrvIsStoreW(
   1937   HANDLE hProcess,
   1938   PCWSTR path
   1939 );
   1940 
   1941 #ifdef DBGHELP_TRANSLATE_TCHAR
   1942 #define SymSrvIsStore SymSrvIsStoreW
   1943 #endif
   1944 
   1945 PCSTR WINAPI SymSrvStoreFile(
   1946   HANDLE hProcess,
   1947   PCSTR SrvPath,
   1948   PCSTR File,
   1949   DWORD Flags
   1950 );
   1951 
   1952 PCWSTR WINAPI SymSrvStoreFileW(
   1953   HANDLE hProcess,
   1954   PCWSTR SrvPath,
   1955   PCWSTR File,
   1956   DWORD Flags
   1957 );
   1958 
   1959 #define SYMSTOREOPT_COMPRESS 0x01
   1960 #define SYMSTOREOPT_OVERWRITE 0x02
   1961 #define SYMSTOREOPT_RETURNINDEX 0x04
   1962 #define SYMSTOREOPT_POINTER 0x08
   1963 #define SYMSTOREOPT_PASS_IF_EXISTS 0x40
   1964 
   1965 #ifdef DBGHELP_TRANSLATE_TCHAR
   1966 #define SymSrvStoreFile SymSrvStoreFileW
   1967 #endif
   1968 
   1969 PCSTR WINAPI SymSrvStoreSupplement(
   1970   HANDLE hProcess,
   1971   const PCTSTR SymPath,
   1972   PCSTR Node,
   1973   PCSTR File,
   1974   DWORD Flags
   1975 );
   1976 
   1977 PCWSTR WINAPI SymSrvStoreSupplementW(
   1978   HANDLE hProcess,
   1979   const PCWSTR SymPath,
   1980   PCWSTR Node,
   1981   PCWSTR File,
   1982   DWORD Flags
   1983 );
   1984 
   1985 #ifdef DBGHELP_TRANSLATE_TCHAR
   1986 #define SymSrvStoreSupplement SymSrvStoreSupplementW
   1987 #endif
   1988 
   1989 PCSTR WINAPI SymSrvDeltaName(
   1990   HANDLE hProcess,
   1991   PCSTR SymPath,
   1992   PCSTR Type,
   1993   PCSTR File1,
   1994   PCSTR File2
   1995 );
   1996 
   1997 PCWSTR WINAPI SymSrvDeltaNameW(
   1998   HANDLE hProcess,
   1999   PCWSTR SymPath,
   2000   PCWSTR Type,
   2001   PCWSTR File1,
   2002   PCWSTR File2
   2003 );
   2004 
   2005 #ifdef DBGHELP_TRANSLATE_TCHAR
   2006 #define SymSrvDeltaName SymSrvDeltaNameW
   2007 #endif
   2008 
   2009 #include <poppack.h>
   2010 
   2011 #ifdef __cplusplus
   2012 }
   2013 #endif
   2014 
   2015