_dbg_common.h 65 KB

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