imagehlp.pp 77 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063106410651066106710681069107010711072107310741075107610771078107910801081108210831084108510861087108810891090109110921093109410951096109710981099110011011102110311041105110611071108110911101111111211131114111511161117111811191120112111221123112411251126112711281129113011311132113311341135113611371138113911401141114211431144114511461147114811491150115111521153115411551156115711581159116011611162116311641165116611671168116911701171117211731174117511761177117811791180118111821183118411851186118711881189119011911192119311941195119611971198119912001201120212031204120512061207120812091210121112121213121412151216121712181219122012211222122312241225122612271228122912301231123212331234123512361237123812391240124112421243124412451246124712481249125012511252125312541255125612571258125912601261126212631264126512661267126812691270127112721273127412751276127712781279128012811282128312841285128612871288128912901291129212931294129512961297129812991300130113021303130413051306130713081309131013111312131313141315131613171318131913201321132213231324132513261327132813291330133113321333133413351336133713381339134013411342134313441345134613471348134913501351135213531354135513561357135813591360136113621363136413651366136713681369137013711372137313741375137613771378137913801381138213831384138513861387138813891390139113921393139413951396139713981399140014011402140314041405140614071408140914101411141214131414141514161417141814191420142114221423142414251426142714281429143014311432143314341435143614371438143914401441144214431444144514461447144814491450145114521453145414551456145714581459146014611462146314641465146614671468146914701471147214731474147514761477147814791480148114821483148414851486148714881489149014911492149314941495149614971498149915001501150215031504150515061507150815091510151115121513151415151516151715181519152015211522152315241525152615271528152915301531153215331534153515361537153815391540154115421543154415451546154715481549155015511552155315541555155615571558155915601561156215631564156515661567156815691570157115721573157415751576157715781579158015811582158315841585158615871588158915901591159215931594159515961597159815991600160116021603160416051606160716081609161016111612
  1. {
  2. This file is part of the Free Pascal run time library.
  3. Copyright (c) 1999-2005 by Marco van de Voort
  4. member of the Free Pascal development team.
  5. See the file COPYING.FPC, included in this distribution,
  6. for details about the copyright.
  7. This program is distributed in the hope that it will be useful,
  8. but WITHOUT ANY WARRANTY; without even the implied warranty of
  9. MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
  10. Notes
  11. - some callback types had Pxxx naming in the original header.
  12. Since that is a-typical, I can't predict how Borland did
  13. handle that. If you have problems, add a bugreport.
  14. - some anonymous unions were not representable in FPC. As a first approx
  15. I added a dummy nested record union.
  16. }
  17. {$IFNDEF FPC_DOTTEDUNITS}
  18. unit imagehlp;
  19. {$ENDIF FPC_DOTTEDUNITS}
  20. Interface
  21. {$IFDEF FPC_DOTTEDUNITS}
  22. Uses WinApi.Windows;
  23. {$ELSE FPC_DOTTEDUNITS}
  24. Uses Windows;
  25. {$ENDIF FPC_DOTTEDUNITS}
  26. {$packrecords 8}
  27. {$ifdef win64}
  28. {$define imagehlp64}
  29. {$endif}
  30. {$ifdef FPC_OS_UNICODE}
  31. {$define UNICODE}
  32. {$endif}
  33. Const
  34. IMAGE_SEPARATION = 64*1024;
  35. DBHHEADER_DEBUGDIRS = $1;
  36. API_VERSION_NUMBER = 9;
  37. SLMFLAG_VIRTUAL = $1;
  38. MINIDUMP_SIGNATURE = 'PMDM'; // dword value?
  39. MINIDUMP_VERSION = 42899;
  40. External_Library = 'imagehlp.dll';
  41. MAX_SYM_NAME = 2000;
  42. BIND_NO_BOUND_IMPORTS = $00000001;
  43. BIND_NO_UPDATE = $00000002;
  44. BIND_ALL_IMAGES = $00000004;
  45. BIND_CACHE_IMPORT_DLLS = $00000008; // Cache dll's across
  46. // calls to BindImageEx
  47. // (same as NT 3.1->NT 4.0)
  48. BIND_REPORT_64BIT_VA = $00000010;
  49. CHECKSUM_SUCCESS = 0;
  50. CHECKSUM_OPEN_FAILURE = 1;
  51. CHECKSUM_MAP_FAILURE = 2;
  52. CHECKSUM_MAPVIEW_FAILURE = 3;
  53. CHECKSUM_UNICODE_FAILURE = 4;
  54. SPLITSYM_REMOVE_PRIVATE = $00000001; // Remove CV types/symbols and Fixup debug
  55. // Used for creating .dbg files that ship
  56. // as part of the product.
  57. SPLITSYM_EXTRACT_ALL = $00000002; // Extract all debug info from image.
  58. // Normally, FPO is left/* IN */ the image
  59. // to allow stack traces through the code.
  60. // Using this switch is similar to linking
  61. // with -debug:none except the .dbg file
  62. // exists...
  63. SPLITSYM_SYMBOLPATH_IS_SRC = $00000004; // The SymbolFilePath contains an alternate
  64. // path to locate the pdb.
  65. CERT_PE_IMAGE_DIGEST_DEBUG_INFO = $01;
  66. CERT_PE_IMAGE_DIGEST_RESOURCES = $02;
  67. CERT_PE_IMAGE_DIGEST_ALL_IMPORT_INFO = $04;
  68. CERT_PE_IMAGE_DIGEST_NON_PE_INFO = $08; // include data outside the PE image
  69. CERT_SECTION_TYPE_ANY = $FF; // Any Certificate type
  70. SSRVOPT_CALLBACK = $0001;
  71. SSRVOPT_DWORD = $0002;
  72. SSRVOPT_DWORDPTR = $0004;
  73. SSRVOPT_GUIDPTR = $0008;
  74. SSRVOPT_OLDGUIDPTR = $0010;
  75. SSRVOPT_UNATTENDED = $0020;
  76. SSRVOPT_NOCOPY = $0040;
  77. SSRVOPT_PARENTWIN = $0080;
  78. SSRVOPT_PARAMTYPE = $0100;
  79. SSRVOPT_SECURE = $0200;
  80. SSRVOPT_TRACE = $0400;
  81. SSRVOPT_SETCONTEXT = $0800;
  82. SSRVOPT_PROXY = $1000;
  83. SSRVOPT_DOWNSTREAM_STORE = $2000;
  84. SSRVOPT_RESET = ULONG_PTR(-1);
  85. SSRVACTION_TRACE = 1;
  86. SSRVACTION_QUERYCANCEL = 2;
  87. SSRVACTION_EVENT = 3;
  88. UNDNAME_COMPLETE = $0000; // Enable full undecoration
  89. UNDNAME_NO_LEADING_UNDERSCORES = $0001; // Remove leading underscores from MS extended keywords
  90. UNDNAME_NO_MS_KEYWORDS = $0002; // Disable expansion of MS extended keywords
  91. UNDNAME_NO_FUNCTION_RETURNS = $0004; // Disable expansion of return type for primary declaration
  92. UNDNAME_NO_ALLOCATION_MODEL = $0008; // Disable expansion of the declaration model
  93. UNDNAME_NO_ALLOCATION_LANGUAGE = $0010; // Disable expansion of the declaration language specifier
  94. UNDNAME_NO_MS_THISTYPE = $0020; // NYI Disable expansion of MS keywords on the 'this' type for primary declaration
  95. UNDNAME_NO_CV_THISTYPE = $0040; // NYI Disable expansion of CV modifiers on the 'this' type for primary declaration
  96. UNDNAME_NO_THISTYPE = $0060; // Disable all modifiers on the 'this' type
  97. UNDNAME_NO_ACCESS_SPECIFIERS = $0080; // Disable expansion of access specifiers for members
  98. UNDNAME_NO_THROW_SIGNATURES = $0100; // Disable expansion of 'throw-signatures' for functions and pointers to functions
  99. UNDNAME_NO_MEMBER_TYPE = $0200; // Disable expansion of 'static' or 'virtual'ness of members
  100. UNDNAME_NO_RETURN_UDT_MODEL = $0400; // Disable expansion of MS model for UDT returns
  101. UNDNAME_32_BIT_DECODE = $0800; // Undecorate 32-bit decorated names
  102. UNDNAME_NAME_ONLY = $1000; // Crack only the name for primary declaration;
  103. // return just [scope::]name. Does expand template params
  104. UNDNAME_NO_ARGUMENTS = $2000; // Don't undecorate arguments to function
  105. UNDNAME_NO_SPECIAL_SYMS = $4000; // Don't undecorate special names (v-table, vcall, vector xxx, metatype, etc)
  106. SYMFLAG_VALUEPRESENT = $00000001;
  107. SYMFLAG_REGISTER = $00000008;
  108. SYMFLAG_REGREL = $00000010;
  109. SYMFLAG_FRAMEREL = $00000020;
  110. SYMFLAG_PARAMETER = $00000040;
  111. SYMFLAG_LOCAL = $00000080;
  112. SYMFLAG_CONSTANT = $00000100;
  113. SYMFLAG_EXPORT = $00000200;
  114. SYMFLAG_FORWARDER = $00000400;
  115. SYMFLAG_FUNCTION = $00000800;
  116. SYMFLAG_VIRTUAL = $00001000;
  117. SYMFLAG_THUNK = $00002000;
  118. SYMFLAG_TLSREL = $00004000;
  119. CBA_DEFERRED_SYMBOL_LOAD_START = $00000001;
  120. CBA_DEFERRED_SYMBOL_LOAD_COMPLETE = $00000002;
  121. CBA_DEFERRED_SYMBOL_LOAD_FAILURE = $00000003;
  122. CBA_SYMBOLS_UNLOADED = $00000004;
  123. CBA_DUPLICATE_SYMBOL = $00000005;
  124. CBA_READ_MEMORY = $00000006;
  125. CBA_DEFERRED_SYMBOL_LOAD_CANCEL = $00000007;
  126. CBA_SET_OPTIONS = $00000008;
  127. CBA_EVENT = $00000010;
  128. CBA_DEFERRED_SYMBOL_LOAD_PARTIAL = $00000020;
  129. CBA_DEBUG_INFO = $10000000;
  130. DSLFLAG_MISMATCHED_PDB = $1;
  131. DSLFLAG_MISMATCHED_DBG = $2;
  132. SYMOPT_CASE_INSENSITIVE = $00000001;
  133. SYMOPT_UNDNAME = $00000002;
  134. SYMOPT_DEFERRED_LOADS = $00000004;
  135. SYMOPT_NO_CPP = $00000008;
  136. SYMOPT_LOAD_LINES = $00000010;
  137. SYMOPT_OMAP_FIND_NEAREST = $00000020;
  138. SYMOPT_LOAD_ANYTHING = $00000040;
  139. SYMOPT_IGNORE_CVREC = $00000080;
  140. SYMOPT_NO_UNQUALIFIED_LOADS = $00000100;
  141. SYMOPT_FAIL_CRITICAL_ERRORS = $00000200;
  142. SYMOPT_EXACT_SYMBOLS = $00000400;
  143. SYMOPT_ALLOW_ABSOLUTE_SYMBOLS = $00000800;
  144. SYMOPT_IGNORE_NT_SYMPATH = $00001000;
  145. SYMOPT_INCLUDE_32BIT_MODULES = $00002000;
  146. SYMOPT_PUBLICS_ONLY = $00004000;
  147. SYMOPT_NO_PUBLICS = $00008000;
  148. SYMOPT_AUTO_PUBLICS = $00010000;
  149. SYMOPT_NO_IMAGE_SEARCH = $00020000;
  150. SYMOPT_SECURE = $00040000;
  151. SYMOPT_NO_PROMPTS = $00080000;
  152. SYMOPT_DEBUG = $80000000;
  153. SYMENUMFLAG_FULLSRCH = 1;
  154. SYMENUMFLAG_SPEEDSRCH = 2;
  155. SYMF_OMAP_GENERATED = $00000001;
  156. SYMF_OMAP_MODIFIED = $00000002;
  157. SYMF_REGISTER = $00000008;
  158. SYMF_REGREL = $00000010;
  159. SYMF_FRAMEREL = $00000020;
  160. SYMF_PARAMETER = $00000040;
  161. SYMF_LOCAL = $00000080;
  162. SYMF_CONSTANT = $00000100;
  163. SYMF_EXPORT = $00000200;
  164. SYMF_FORWARDER = $00000400;
  165. SYMF_FUNCTION = $00000800;
  166. SYMF_VIRTUAL = $00001000;
  167. SYMF_THUNK = $00002000;
  168. SYMF_TLSREL = $00004000;
  169. // These values should also not be used.
  170. // They have been replaced by SYMFLAG_ values.
  171. IMAGEHLP_SYMBOL_INFO_VALUEPRESENT = 1;
  172. IMAGEHLP_SYMBOL_INFO_REGISTER = SYMF_REGISTER ; // = $0008
  173. IMAGEHLP_SYMBOL_INFO_REGRELATIVE = SYMF_REGREL ; // = $0010
  174. IMAGEHLP_SYMBOL_INFO_FRAMERELATIVE = SYMF_FRAMEREL ; // = $0020
  175. IMAGEHLP_SYMBOL_INFO_PARAMETER = SYMF_PARAMETER ; // = $0040
  176. IMAGEHLP_SYMBOL_INFO_LOCAL = SYMF_LOCAL ; // = $0080
  177. IMAGEHLP_SYMBOL_INFO_CONSTANT = SYMF_CONSTANT ; // = $0100
  178. IMAGEHLP_SYMBOL_FUNCTION = SYMF_FUNCTION; // = $0800
  179. IMAGEHLP_SYMBOL_VIRTUAL = SYMF_VIRTUAL; // = $1000
  180. IMAGEHLP_SYMBOL_THUNK = SYMF_THUNK ; // = $2000
  181. IMAGEHLP_SYMBOL_INFO_TLSRELATIVE = SYMF_TLSREL; // = $4000
  182. MINIDUMP_MISC1_PROCESS_ID = $00000001;
  183. MINIDUMP_MISC1_PROCESS_TIMES = $00000002;
  184. Type
  185. DIGEST_HANDLE = POINTER;
  186. TDIGEST_HANDLE = DIGEST_HANDLE;
  187. PRVA = ^TRVA;
  188. TRVA = dword;
  189. RVA = TRVA;
  190. ULONG64 = QWORD; // to windows unit ?
  191. ULONG32 = CARDINAL;
  192. PRVA64 = ^TRVA64;
  193. TRVA64 = ULONG64;
  194. RVA64 = TRVA64;
  195. PPSTR = ^PSTR;
  196. _IMAGEHLP_STATUS_REASON =(
  197. BindOutOfMemory,
  198. BindRvaToVaFailed,
  199. BindNoRoomInImage,
  200. BindImportModuleFailed,
  201. BindImportProcedureFailed,
  202. BindImportModule,
  203. BindImportProcedure,
  204. BindForwarder,
  205. BindForwarderNOT,
  206. BindImageModified,
  207. BindExpandFileHeaders,
  208. BindImageComplete,
  209. BindMismatchedSymbols,
  210. BindSymbolsNotUpdated,
  211. BindImportProcedure32,
  212. BindImportProcedure64,
  213. BindForwarder32,
  214. BindForwarder64,
  215. BindForwarderNOT32,
  216. BindForwarderNOT64);
  217. IMAGEHLP_STATUS_REASON = _IMAGEHLP_STATUS_REASON;
  218. TIMAGEHLP_STATUS_REASON = _IMAGEHLP_STATUS_REASON;
  219. ADDRESS_MODE =(
  220. AddrMode1616,
  221. AddrMode1632,
  222. AddrModeReal,
  223. AddrModeFlat);
  224. TADDRESS_MODE = ADDRESS_MODE;
  225. SYM_TYPE =(
  226. SymNone = 0,
  227. SymCoff,
  228. SymCv,
  229. SymPdb,
  230. SymExport,
  231. SymDeferred,
  232. SymSym, // .sym file
  233. SymDia,
  234. SymVirtual,
  235. NumSymTypes);
  236. TSYM_TYPE = SYM_TYPE;
  237. _IMAGEHLP_SYMBOL_TYPE_INFO = (
  238. TI_GET_SYMTAG,
  239. TI_GET_SYMNAME,
  240. TI_GET_LENGTH,
  241. TI_GET_TYPE,
  242. TI_GET_TYPEID,
  243. TI_GET_BASETYPE,
  244. TI_GET_ARRAYINDEXTYPEID,
  245. TI_FINDCHILDREN,
  246. TI_GET_DATAKIND,
  247. TI_GET_ADDRESSOFFSET,
  248. TI_GET_OFFSET,
  249. TI_GET_VALUE,
  250. TI_GET_COUNT,
  251. TI_GET_CHILDRENCOUNT,
  252. TI_GET_BITPOSITION,
  253. TI_GET_VIRTUALBASECLASS,
  254. TI_GET_VIRTUALTABLESHAPEID,
  255. TI_GET_VIRTUALBASEPOINTEROFFSET,
  256. TI_GET_CLASSPARENTID,
  257. TI_GET_NESTED,
  258. TI_GET_SYMINDEX,
  259. TI_GET_LEXICALPARENT,
  260. TI_GET_ADDRESS,
  261. TI_GET_THISADJUST,
  262. TI_GET_UDTKIND,
  263. TI_IS_EQUIV_TO,
  264. TI_GET_CALLING_CONVENTION);
  265. IMAGEHLP_SYMBOL_TYPE_INFO = _IMAGEHLP_SYMBOL_TYPE_INFO;
  266. TIMAGEHLP_SYMBOL_TYPE_INFO = _IMAGEHLP_SYMBOL_TYPE_INFO;
  267. _MINIDUMP_STREAM_TYPE = (
  268. UnusedStream = 0,
  269. ReservedStream0 = 1,
  270. ReservedStream1 = 2,
  271. ThreadListStream = 3,
  272. ModuleListStream = 4,
  273. MemoryListStream = 5,
  274. ExceptionStream = 6,
  275. SystemInfoStream = 7,
  276. ThreadExListStream = 8,
  277. Memory64ListStream = 9,
  278. CommentStreamA = 10,
  279. CommentStreamW = 11,
  280. HandleDataStream = 12,
  281. FunctionTableStream = 13,
  282. UnloadedModuleListStream = 14,
  283. MiscInfoStream = 15,
  284. LastReservedStream = $ffff);
  285. MINIDUMP_STREAM_TYPE = _MINIDUMP_STREAM_TYPE;
  286. _MINIDUMP_CALLBACK_TYPE =(
  287. ModuleCallback,
  288. ThreadCallback,
  289. ThreadExCallback,
  290. IncludeThreadCallback,
  291. IncludeModuleCallback,
  292. MemoryCallback);
  293. MINIDUMP_CALLBACK_TYPE = _MINIDUMP_CALLBACK_TYPE;
  294. _THREAD_WRITE_FLAGS =(
  295. ThreadWriteThread = $0001,
  296. ThreadWriteStack = $0002,
  297. ThreadWriteContext = $0004,
  298. ThreadWriteBackingStore = $0008,
  299. ThreadWriteInstructionWindow = $0010,
  300. ThreadWriteThreadData = $0020);
  301. THREAD_WRITE_FLAGS = _THREAD_WRITE_FLAGS;
  302. _MODULE_WRITE_FLAGS =(
  303. ModuleWriteModule = $0001,
  304. ModuleWriteDataSeg = $0002,
  305. ModuleWriteMiscRecord = $0004,
  306. ModuleWriteCvRecord = $0008,
  307. ModuleReferencedByMemory = $0010);
  308. MODULE_WRITE_FLAGS = _MODULE_WRITE_FLAGS;
  309. tagan = (
  310. sevInfo = 0,
  311. sevProblem,
  312. sevAttn,
  313. sevFatal,
  314. sevMax );
  315. Anonymous = (
  316. hdBase = 0, // root directory for dbghelp
  317. hdSym, // where symbols are stored
  318. hdSrc, // where source is stored
  319. hdMax // end marker
  320. );
  321. _MINIDUMP_TYPE = (
  322. MiniDumpNormal = $0000,
  323. MiniDumpWithDataSegs = $0001,
  324. MiniDumpWithFullMemory = $0002,
  325. MiniDumpWithHandleData = $0004,
  326. MiniDumpFilterMemory = $0008,
  327. MiniDumpScanMemory = $0010,
  328. MiniDumpWithUnloadedModules = $0020,
  329. MiniDumpWithIndirectlyReferencedMemory = $0040,
  330. MiniDumpFilterModulePaths = $0080,
  331. MiniDumpWithProcessThreadData = $0100,
  332. MiniDumpWithPrivateReadWriteMemory = $0200,
  333. MiniDumpWithoutOPTIONALData = $0400);
  334. MINIDUMP_TYPE = _MINIDUMP_TYPE;
  335. TMINIDUMP_TYPE = _MINIDUMP_TYPE;
  336. TLOADED_IMAGE = record
  337. ModuleName : PSTR;
  338. hFile : THANDLE;
  339. MappedAddress : PUCHAR;
  340. {$ifdef IMAGEHLP64}
  341. FileHeader : PIMAGE_NT_HEADERS64;
  342. {$else}
  343. FileHeader : PIMAGE_NT_HEADERS32;
  344. {$endif}
  345. LastRvaSection : PIMAGE_SECTION_HEADER;
  346. NumberOfSections : ULONG;
  347. Sections : PIMAGE_SECTION_HEADER;
  348. Characteristics : ULONG;
  349. fSystemImage : bytebool;
  350. fDOSImage : bytebool;
  351. Links : TLISTENTRY;
  352. SizeOfImage : ULONG;
  353. end;
  354. LOADED_IMAGE = TLOADED_IMAGE;
  355. PLOADED_IMAGE = ^TLOADED_IMAGE;
  356. PPLOADED_IMAGE = ^PLOADED_IMAGE;
  357. {$ifndef win64}
  358. PIMAGE_DEBUG_INFORMATION = ^TIMAGE_DEBUG_INFORMATION;
  359. TIMAGE_DEBUG_INFORMATION = record
  360. List : TLISTENTRY;
  361. ReservedSize : DWORD;
  362. ReservedMappedBase : POINTER;
  363. ReservedMachine : USHORT;
  364. ReservedCharacteristics : USHORT;
  365. ReservedCheckSum : DWORD;
  366. ImageBase : DWORD;
  367. SizeOfImage : DWORD;
  368. ReservedNumberOfSections : DWORD;
  369. ReservedSections : PIMAGE_SECTION_HEADER;
  370. ReservedExportedNamesSize : DWORD;
  371. ReservedExportedNames : PSTR;
  372. ReservedNumberOfFunctionTableEntries : DWORD;
  373. ReservedFunctionTableEntries : PIMAGE_FUNCTION_ENTRY;
  374. ReservedLowestFunctionStartingAddress : DWORD;
  375. ReservedHighestFunctionEndingAddress : DWORD;
  376. ReservedNumberOfFpoTableEntries : DWORD;
  377. ReservedFpoTableEntries : PFPO_DATA;
  378. SizeOfCoffSymbols : DWORD;
  379. CoffSymbols : PIMAGE_COFF_SYMBOLS_HEADER;
  380. ReservedSizeOfCodeViewSymbols : DWORD;
  381. ReservedCodeViewSymbols : pointer;
  382. ImageFilePath : PSTR;
  383. ImageFileName : PSTR;
  384. ReservedDebugFilePath : PSTR;
  385. ReservedTimeDateStamp : DWORD;
  386. ReservedRomImage : bool;
  387. ReservedDebugDirectory : PIMAGE_DEBUG_DIRECTORY;
  388. ReservedNumberOfDebugDirectories : DWORD;
  389. ReservedOriginalFunctionTableBaseAddress : DWORD;
  390. Reserved : array[0..1] of DWORD;
  391. end;
  392. IMAGE_DEBUG_INFORMATION = TIMAGE_DEBUG_INFORMATION;
  393. {$ENDIF}
  394. PMODLOAD_DATA = ^TMODLOAD_DATA;
  395. TMODLOAD_DATA = record
  396. ssize : DWORD;
  397. ssig : DWORD;
  398. data : POINTER;
  399. _size : DWORD;
  400. flags : DWORD;
  401. end;
  402. MODLOAD_DATA = TMODLOAD_DATA;
  403. tagADDRESS64 = record
  404. Offset : dword64;
  405. Segment : word;
  406. Mode : TADDRESS_MODE;
  407. end;
  408. TADDRESS64 = tagADDRESS64;
  409. PADDRESS64 = ^TADDRESS64;
  410. LPADDRESS64 = PADDRESS64;
  411. {$IFDEF IMAGEHLP64}
  412. TADDRESS=TADDRESS64;
  413. PADDRESS=PADDRESS64;
  414. LPADDRESS=PADDRESS64;
  415. {$ELSE}
  416. tagADDRESS = record
  417. Offset : dword;
  418. Segment : word;
  419. Mode : TADDRESS_MODE;
  420. end;
  421. TADDRESS = tagADDRESS;
  422. PADDRESS = ^TADDRESS;
  423. LPADDRESS = PADDRESS;
  424. {$ENDIF}
  425. PKDHELP64 = ^TKDHELP64;
  426. TKDHELP64 = record
  427. Thread : DWORD64;
  428. ThCallbackStack : DWORD;
  429. ThCallbackBStore : DWORD;
  430. NextCallback : DWORD;
  431. FramePointer : DWORD;
  432. KiCallUserMode : DWORD64;
  433. KeUserCallbackDispatcher : DWORD64;
  434. SystemRangeStart : DWORD64;
  435. Reserved : array[0..7] of DWORD64;
  436. end;
  437. KDHELP64 = TKDHELP64;
  438. {$IFDEF IMAGEHLP64}
  439. TKDHELP = KDHELP64;
  440. KDHELP = KDHELP64;
  441. PKDHELP = PKDHELP64;
  442. {$ELSE}
  443. PKDHELP = ^TKDHELP;
  444. TKDHELP = record
  445. Thread : DWORD;
  446. ThCallbackStack : DWORD;
  447. NextCallback : DWORD;
  448. FramePointer : DWORD;
  449. KiCallUserMode : DWORD;
  450. KeUserCallbackDispatcher : DWORD;
  451. SystemRangeStart : DWORD;
  452. ThCallbackBStore : DWORD;
  453. Reserved : array[0..7] of DWORD;
  454. end;
  455. KDHELP = TKDHELP;
  456. {$ENDIF}
  457. tagSTACKFRAME64 = record
  458. AddrPC : TADDRESS64;
  459. AddrReturn : TADDRESS64;
  460. AddrFrame : TADDRESS64;
  461. AddrStack : TADDRESS64;
  462. AddrBStore : TADDRESS64;
  463. FuncTableEntry : POINTER;
  464. Params : array[0..3] of DWORD64;
  465. Far : BOOL;
  466. Virtual : BOOL;
  467. Reserved : array[0..2] of DWORD64;
  468. KdHelp : TKDHELP64;
  469. end;
  470. TSTACKFRAME64 = tagSTACKFRAME64;
  471. PSTACKFRAME64 = ^TSTACKFRAME64;
  472. LPSTACKFRAME64= ^TSTACKFRAME64;
  473. {$IFDEF IMAGEHLP64}
  474. STACKFRAME = TSTACKFRAME64;
  475. LPSTACKFRAME = LPSTACKFRAME64;
  476. TSTACKFRAME = TSTACKFRAME64;
  477. PSTACKFRAME = PSTACKFRAME64;
  478. {$ELSE}
  479. tagSTACKFRAME = record
  480. AddrPC : TADDRESS;
  481. AddrReturn : TADDRESS;
  482. AddrFrame : TADDRESS;
  483. AddrStack : TADDRESS;
  484. FuncTableEntry : POINTER;
  485. Params : array[0..3] of DWORD;
  486. _Far : BOOL;
  487. _Virtual : BOOL;
  488. Reserved : array[0..2] of DWORD;
  489. KdHelp : TKDHELP;
  490. AddrBStore : TADDRESS;
  491. end;
  492. TSTACKFRAME = tagSTACKFRAME;
  493. PSTACKFRAME = ^TSTACKFRAME;
  494. LPSTACKFRAME= ^TSTACKFRAME;
  495. {$ENDIF}
  496. PAPI_VERSION = ^TAPI_VERSION;
  497. LPAPI_VERSION= PAPI_VERSION;
  498. TAPI_VERSION = record
  499. MajorVersion : ushort;
  500. MinorVersion : ushort;
  501. Revision : ushort;
  502. Reserved : ushort;
  503. end;
  504. API_VERSION = TAPI_VERSION;
  505. PIMAGEHLP_SYMBOL64 = ^TIMAGEHLP_SYMBOL64;
  506. TIMAGEHLP_SYMBOL64 = record
  507. SizeOfStruct : dword;
  508. Address : dword64;
  509. Size : dword;
  510. Flags : dword;
  511. MaxNameLength : dword;
  512. Name : array[0..0] of TCHAR;
  513. end;
  514. IMAGEHLP_SYMBOL64 = TIMAGEHLP_SYMBOL64;
  515. LPIMAGEHLP_SYMBOL64 = PIMAGEHLP_SYMBOL64;
  516. PIMAGEHLP_SYMBOL64_PACKAGE = ^TIMAGEHLP_SYMBOL64_PACKAGE;
  517. TIMAGEHLP_SYMBOL64_PACKAGE = record
  518. sym : TIMAGEHLP_SYMBOL64;
  519. name : array[0..(MAX_SYM_NAME+1)-1] of TCHAR;
  520. end;
  521. IMAGEHLP_SYMBOL64_PACKAGE = TIMAGEHLP_SYMBOL64_PACKAGE;
  522. LPIMAGEHLP_SYMBOL64_PACKAGE = ^TIMAGEHLP_SYMBOL64_PACKAGE;
  523. {$IFDEF IMAGEHLP64}
  524. IMAGEHLP_SYMBOL = IMAGEHLP_SYMBOL64;
  525. TIMAGEHLP_SYMBOL = IMAGEHLP_SYMBOL64;
  526. PIMAGEHLP_SYMBOL = PIMAGEHLP_SYMBOL64;
  527. TIMAGEHLP_SYMBOL_PACKAGE = IMAGEHLP_SYMBOL64_PACKAGE;
  528. IMAGEHLP_SYMBOL_PACKAGE = IMAGEHLP_SYMBOL64_PACKAGE;
  529. PIMAGEHLP_SYMBOL_PACKAGE= PIMAGEHLP_SYMBOL64_PACKAGE;
  530. {$ELSE}
  531. PIMAGEHLP_SYMBOL = ^TIMAGEHLP_SYMBOL;
  532. TIMAGEHLP_SYMBOL = record
  533. SizeOfStruct : dword;
  534. Address : dword;
  535. Size : dword;
  536. Flags : dword;
  537. MaxNameLength : dword;
  538. Name : array[0..0] of TCHAR;
  539. end;
  540. IMAGEHLP_SYMBOL = TIMAGEHLP_SYMBOL;
  541. LPIMAGEHLP_SYMBOL = PIMAGEHLP_SYMBOL;
  542. PIMAGEHLP_SYMBOL_PACKAGE = ^TIMAGEHLP_SYMBOL_PACKAGE;
  543. TIMAGEHLP_SYMBOL_PACKAGE = record
  544. sym : TIMAGEHLP_SYMBOL;
  545. name : array[0..(MAX_SYM_NAME+1)-1] of TCHAR;
  546. end;
  547. IMAGEHLP_SYMBOL_PACKAGE = TIMAGEHLP_SYMBOL_PACKAGE;
  548. LPIMAGEHLP_SYMBOL_PACKAGE = PIMAGEHLP_SYMBOL_PACKAGE;
  549. {$ENDIF}
  550. PIMAGEHLP_MODULE64 = ^TIMAGEHLP_MODULE64;
  551. TIMAGEHLP_MODULE64 = record
  552. SizeOfStruct : dword;
  553. BaseOfImage : dword64;
  554. ImageSize : dword;
  555. TimeDateStamp : dword;
  556. CheckSum : dword;
  557. NumSyms : dword;
  558. SymType : TSYM_TYPE;
  559. ModuleName : array[0..31] of TCHAR;
  560. ImageName : array[0..255] of TCHAR;
  561. LoadedImageName : array[0..255] of TCHAR;
  562. LoadedPdbName : array[0..255] of TCHAR;
  563. CVSig : dword;
  564. CVData : array[0..(MAX_PATH*3)-1] of TCHAR;
  565. PdbSig : dword;
  566. PdbSig70 : TGUID;
  567. PdbAge : dword;
  568. PdbUnmatched : bool;
  569. DbgUnmatched : bool;
  570. LineNumbers : bool;
  571. GlobalSymbols : bool;
  572. TypeInfo : bool;
  573. end;
  574. IMAGEHLP_MODULE64 = TIMAGEHLP_MODULE64;
  575. PIMAGEHLP_MODULE64W = ^TIMAGEHLP_MODULE64W;
  576. TIMAGEHLP_MODULE64W = record
  577. SizeOfStruct : dword;
  578. BaseOfImage : dword64;
  579. ImageSize : dword;
  580. TimeDateStamp : dword;
  581. CheckSum : dword;
  582. NumSyms : dword;
  583. SymType : TSYM_TYPE;
  584. ModuleName : array[0..31] of wchar;
  585. ImageName : array[0..255] of wchar;
  586. LoadedImageName : array[0..255] of wchar;
  587. LoadedPdbName : array[0..255] of wchar;
  588. CVSig : dword;
  589. CVData : array[0..(MAX_PATH*3)-1] of wchar;
  590. PdbSig : dword;
  591. PdbSig70 : TGUID;
  592. PdbAge : dword;
  593. PdbUnmatched : bool;
  594. DbgUnmatched : bool;
  595. LineNumbers : bool;
  596. GlobalSymbols : bool;
  597. TypeInfo : bool;
  598. end;
  599. IMAGEHLP_MODULE64W = TIMAGEHLP_MODULE64W;
  600. LPIMAGEHLP_MODULE64W = PIMAGEHLP_MODULE64W;
  601. IMAGEHLP_MODULEW64 = TIMAGEHLP_MODULE64W;
  602. TIMAGEHLP_MODULEW64 = TIMAGEHLP_MODULE64W;
  603. PIMAGEHLP_MODULEW64 = PIMAGEHLP_MODULE64W;
  604. {$IFDEF IMAGEHLP64}
  605. IMAGEHLP_MODULE = TIMAGEHLP_MODULE64;
  606. LPIMAGEHLP_MODULE = PIMAGEHLP_MODULE64;
  607. IMAGEHLP_MODULEW = TIMAGEHLP_MODULE64W;
  608. LPIMAGEHLP_MODULEW = PIMAGEHLP_MODULE64W;
  609. {$ELSE}
  610. PIMAGEHLP_MODULE = ^TIMAGEHLP_MODULE;
  611. TIMAGEHLP_MODULE = record
  612. SizeOfStruct : dword;
  613. BaseOfImage : dword;
  614. ImageSize : dword;
  615. TimeDateStamp : dword;
  616. CheckSum : dword;
  617. NumSyms : dword;
  618. SymType : TSYM_TYPE;
  619. ModuleName : array[0..31] of TCHAR;
  620. ImageName : array[0..255] of TCHAR;
  621. LoadedImageName : array[0..255] of TCHAR;
  622. end;
  623. IMAGEHLP_MODULE = TIMAGEHLP_MODULE;
  624. LPIMAGEHLP_MODULE = PIMAGEHLP_MODULE;
  625. PIMAGEHLP_MODULEW = ^TIMAGEHLP_MODULEW;
  626. TIMAGEHLP_MODULEW = record
  627. SizeOfStruct : dword;
  628. BaseOfImage : dword;
  629. ImageSize : dword;
  630. TimeDateStamp : dword;
  631. CheckSum : dword;
  632. NumSyms : dword;
  633. SymType : TSYM_TYPE;
  634. ModuleName : array[0..31] of wchar;
  635. ImageName : array[0..255] of wchar;
  636. LoadedImageName : array[0..255] of wchar;
  637. end;
  638. IMAGEHLP_MODULEW = TIMAGEHLP_MODULEW;
  639. LPIMAGEHLP_MODULEW = PIMAGEHLP_MODULEW;
  640. {$ENDIF}
  641. PIMAGEHLP_LINE64 = ^TIMAGEHLP_LINE64;
  642. TIMAGEHLP_LINE64 = record
  643. SizeOfStruct : dword;
  644. Key : pointer;
  645. LineNumber : dword;
  646. FileName : PAnsiChar;
  647. Address : dword64;
  648. end;
  649. IMAGEHLP_LINE64 = TIMAGEHLP_LINE64;
  650. LPIMAGEHLP_LINE64 = PIMAGEHLP_LINE64;
  651. {$ifdef IMAGEHLP64}
  652. IMAGEHLP_LINE = IMAGEHLP_LINE64;
  653. TIMAGEHLP_LINE = IMAGEHLP_LINE64;
  654. PIMAGEHLP_LINE = PIMAGEHLP_LINE64;
  655. LPIMAGEHLP_LINE = PIMAGEHLP_LINE64;
  656. {$else}
  657. PIMAGEHLP_LINE = ^TIMAGEHLP_LINE;
  658. TIMAGEHLP_LINE = record
  659. SizeOfStruct : dword;
  660. Key : pointer;
  661. LineNumber : dword;
  662. FileName : PAnsiChar;
  663. Address : dword;
  664. end;
  665. IMAGEHLP_LINE = TIMAGEHLP_LINE;
  666. LPIMAGEHLP_LINE = PIMAGEHLP_LINE;
  667. {$endif}
  668. PSOURCEFILE = ^TSOURCEFILE;
  669. TSOURCEFILE = record
  670. ModBase : dword64;
  671. FileName : PAnsiChar;
  672. end;
  673. PIMAGEHLP_CBA_READ_MEMORY = ^TIMAGEHLP_CBA_READ_MEMORY;
  674. TIMAGEHLP_CBA_READ_MEMORY = record
  675. addr : dword64;
  676. buf : pointer;
  677. bytes : dword;
  678. bytesread : PDWORD;
  679. end;
  680. IMAGEHLP_CBA_READ_MEMORY = TIMAGEHLP_CBA_READ_MEMORY;
  681. LPIMAGEHLP_CBA_READ_MEMORY = PIMAGEHLP_CBA_READ_MEMORY;
  682. PIMAGEHLP_CBA_EVENT = ^TIMAGEHLP_CBA_EVENT;
  683. TIMAGEHLP_CBA_EVENT = record
  684. severity : dword;
  685. code : dword;
  686. desc : PAnsiChar;
  687. _object : pointer;
  688. end;
  689. IMAGEHLP_CBA_EVENT = TIMAGEHLP_CBA_EVENT;
  690. LPIMAGEHLP_CBA_EVENT = PIMAGEHLP_CBA_EVENT;
  691. PIMAGEHLP_DEFERRED_SYMBOL_LOAD64 = ^TIMAGEHLP_DEFERRED_SYMBOL_LOAD64;
  692. TIMAGEHLP_DEFERRED_SYMBOL_LOAD64 = record
  693. SizeOfStruct : dword;
  694. BaseOfImage : dword64;
  695. CheckSum : dword;
  696. TimeDateStamp : dword;
  697. FileName : array[0..(MAX_PATH)-1] of TCHAR;
  698. Reparse : bytebool;
  699. hFile : THANDLE;
  700. Flags : dword;
  701. end;
  702. IMAGEHLP_DEFERRED_SYMBOL_LOAD64 = TIMAGEHLP_DEFERRED_SYMBOL_LOAD64;
  703. LPIMAGEHLP_DEFERRED_SYMBOL_LOAD64 = PIMAGEHLP_DEFERRED_SYMBOL_LOAD64;
  704. {$ifdef IMAGEHLP64}
  705. IMAGEHLP_DEFERRED_SYMBOL_LOAD = IMAGEHLP_DEFERRED_SYMBOL_LOAD64;
  706. TIMAGEHLP_DEFERRED_SYMBOL_LOAD = IMAGEHLP_DEFERRED_SYMBOL_LOAD64;
  707. PIMAGEHLP_DEFERRED_SYMBOL_LOAD = PIMAGEHLP_DEFERRED_SYMBOL_LOAD64;
  708. {$else}
  709. PIMAGEHLP_DEFERRED_SYMBOL_LOAD = ^TIMAGEHLP_DEFERRED_SYMBOL_LOAD;
  710. TIMAGEHLP_DEFERRED_SYMBOL_LOAD = record
  711. SizeOfStruct : dword;
  712. BaseOfImage : dword;
  713. CheckSum : dword;
  714. TimeDateStamp : dword;
  715. FileName : array[0..(MAX_PATH)-1] of TCHAR;
  716. Reparse : bytebool;
  717. hFile : THANDLE;
  718. end;
  719. IMAGEHLP_DEFERRED_SYMBOL_LOAD = TIMAGEHLP_DEFERRED_SYMBOL_LOAD;
  720. LPIMAGEHLP_DEFERRED_SYMBOL_LOAD = PIMAGEHLP_DEFERRED_SYMBOL_LOAD;
  721. {$endif}
  722. PIMAGEHLP_DUPLICATE_SYMBOL64 = ^TIMAGEHLP_DUPLICATE_SYMBOL64;
  723. TIMAGEHLP_DUPLICATE_SYMBOL64 = record
  724. SizeOfStruct : dword;
  725. NumberOfDups : dword;
  726. Symbol : PIMAGEHLP_SYMBOL64;
  727. SelectedSymbol : dword;
  728. end;
  729. IMAGEHLP_DUPLICATE_SYMBOL64 = TIMAGEHLP_DUPLICATE_SYMBOL64;
  730. LPIMAGEHLP_DUPLICATE_SYMBOL64 = PIMAGEHLP_DUPLICATE_SYMBOL64;
  731. {$ifdef IMAGEHLP64}
  732. IMAGEHLP_DUPLICATE_SYMBOL = IMAGEHLP_DUPLICATE_SYMBOL64;
  733. PIMAGEHLP_DUPLICATE_SYMBOL = PIMAGEHLP_DUPLICATE_SYMBOL64;
  734. TIMAGEHLP_DUPLICATE_SYMBOL = IMAGEHLP_DUPLICATE_SYMBOL64;
  735. LPIMAGEHLP_DUPLICATE_SYMBOL = PIMAGEHLP_DUPLICATE_SYMBOL64;
  736. {$else}
  737. PIMAGEHLP_DUPLICATE_SYMBOL = ^TIMAGEHLP_DUPLICATE_SYMBOL;
  738. TIMAGEHLP_DUPLICATE_SYMBOL = record
  739. SizeOfStruct : dword;
  740. NumberOfDups : dword;
  741. Symbol : PIMAGEHLP_SYMBOL;
  742. SelectedSymbol : dword;
  743. end;
  744. IMAGEHLP_DUPLICATE_SYMBOL = TIMAGEHLP_DUPLICATE_SYMBOL;
  745. LPIMAGEHLP_DUPLICATE_SYMBOL = PIMAGEHLP_DUPLICATE_SYMBOL;
  746. {$endif}
  747. PSRCCODEINFO = ^TSRCCODEINFO;
  748. TSRCCODEINFO = record
  749. SizeOfStruct : dword;
  750. Key : pointer;
  751. ModBase : dword64;
  752. Obj : array[0..(MAX_PATH+1)-1] of TCHAR;
  753. FileName : array[0..(MAX_PATH+1)-1] of TCHAR;
  754. LineNumber : dword;
  755. Address : dword64;
  756. end;
  757. SRCCODEINFO = TSRCCODEINFO;
  758. LPSRCCODEINFO = PSRCCODEINFO;
  759. PIMAGEHLP_SYMBOL_SRC = ^TIMAGEHLP_SYMBOL_SRC;
  760. TIMAGEHLP_SYMBOL_SRC = record
  761. sizeofstruct : dword;
  762. _type : dword;
  763. _file : array[0..(MAX_PATH)-1] of AnsiChar;
  764. end;
  765. IMAGEHLP_SYMBOL_SRC = TIMAGEHLP_SYMBOL_SRC;
  766. LPIMAGEHLP_SYMBOL_SRC = PIMAGEHLP_SYMBOL_SRC;
  767. PMODULE_TYPE_INFO = ^TMODULE_TYPE_INFO;
  768. TMODULE_TYPE_INFO = record
  769. dataLength : USHORT;
  770. leaf : USHORT;
  771. data : array[0..0] of TBYTE;
  772. end;
  773. MODULE_TYPE_INFO = TMODULE_TYPE_INFO;
  774. LPMODULE_TYPE_INFO = PMODULE_TYPE_INFO;
  775. PSYMBOL_INFO = ^TSYMBOL_INFO;
  776. TSYMBOL_INFO = record
  777. SizeOfStruct : ULONG;
  778. TypeIndex : ULONG;
  779. Reserved : array[0..1] of ULONG64;
  780. info : ULONG;
  781. Size : ULONG;
  782. ModBase : ULONG64;
  783. Flags : ULONG;
  784. Value : ULONG64;
  785. Address : ULONG64;
  786. Register : ULONG;
  787. Scope : ULONG;
  788. Tag : ULONG;
  789. NameLen : ULONG;
  790. MaxNameLen : ULONG;
  791. Name : array[0..0] of TCHAR;
  792. end;
  793. SYMBOL_INFO = TSYMBOL_INFO;
  794. LPSYMBOL_INFO = PSYMBOL_INFO;
  795. PSYMBOL_INFO_PACKAGE = ^TSYMBOL_INFO_PACKAGE;
  796. TSYMBOL_INFO_PACKAGE = record
  797. si : TSYMBOL_INFO;
  798. name : array[0..(MAX_SYM_NAME+1)-1] of TCHAR;
  799. end;
  800. SYMBOL_INFO_PACKAGE = TSYMBOL_INFO_PACKAGE;
  801. LPSYMBOL_INFO_PACKAGE = PSYMBOL_INFO_PACKAGE;
  802. PIMAGEHLP_STACK_FRAME = ^TIMAGEHLP_STACK_FRAME;
  803. TIMAGEHLP_STACK_FRAME = record
  804. InstructionOffset : ULONG64;
  805. ReturnOffset : ULONG64;
  806. FrameOffset : ULONG64;
  807. StackOffset : ULONG64;
  808. BackingStoreOffset : ULONG64;
  809. FuncTableEntry : ULONG64;
  810. Params : array[0..3] of ULONG64;
  811. Reserved : array[0..4] of ULONG64;
  812. Virtual : BOOL;
  813. Reserved2 : ULONG;
  814. end;
  815. IMAGEHLP_STACK_FRAME = TIMAGEHLP_STACK_FRAME;
  816. LPIMAGEHLP_STACK_FRAME = PIMAGEHLP_STACK_FRAME;
  817. PIMAGEHLP_CONTEXT = ^TIMAGEHLP_CONTEXT;
  818. TIMAGEHLP_CONTEXT = pointer;
  819. PPIMAGEHLP_CONTEXT = ^PIMAGEHLP_CONTEXT;
  820. PTI_FINDCHILDREN_PARAMS = ^TTI_FINDCHILDREN_PARAMS;
  821. TTI_FINDCHILDREN_PARAMS = record
  822. Count : ULONG;
  823. Start : ULONG;
  824. ChildId : array[0..0] of ULONG;
  825. end;
  826. PMINIDUMP_LOCATION_DESCRIPTOR = ^TMINIDUMP_LOCATION_DESCRIPTOR;
  827. TMINIDUMP_LOCATION_DESCRIPTOR = record
  828. DataSize : ULONG32;
  829. Rva : TRVA;
  830. end;
  831. MINIDUMP_LOCATION_DESCRIPTOR = TMINIDUMP_LOCATION_DESCRIPTOR ;
  832. PMINIDUMP_LOCATION_DESCRIPTOR64 = ^TMINIDUMP_LOCATION_DESCRIPTOR64;
  833. TMINIDUMP_LOCATION_DESCRIPTOR64 = record
  834. DataSize : ULONG64;
  835. Rva : TRVA64;
  836. end;
  837. MINIDUMP_LOCATION_DESCRIPTOR64 = TMINIDUMP_LOCATION_DESCRIPTOR64;
  838. PMINIDUMP_MEMORY_DESCRIPTOR = ^TMINIDUMP_MEMORY_DESCRIPTOR;
  839. TMINIDUMP_MEMORY_DESCRIPTOR = record
  840. StartOfMemoryRange : ULONG64;
  841. Memory : TMINIDUMP_LOCATION_DESCRIPTOR;
  842. end;
  843. MINIDUMP_MEMORY_DESCRIPTOR = TMINIDUMP_MEMORY_DESCRIPTOR;
  844. LPMINIDUMP_MEMORY_DESCRIPTOR = PMINIDUMP_MEMORY_DESCRIPTOR;
  845. PMINIDUMP_MEMORY_DESCRIPTOR64 = ^TMINIDUMP_MEMORY_DESCRIPTOR64;
  846. TMINIDUMP_MEMORY_DESCRIPTOR64 = record
  847. StartOfMemoryRange : ULONG64;
  848. DataSize : ULONG64;
  849. end;
  850. MINIDUMP_MEMORY_DESCRIPTOR64 = TMINIDUMP_MEMORY_DESCRIPTOR64;
  851. LPMINIDUMP_MEMORY_DESCRIPTOR64 = PMINIDUMP_MEMORY_DESCRIPTOR64;
  852. PMINIDUMP_HEADER = ^TMINIDUMP_HEADER;
  853. TMINIDUMP_HEADER = record
  854. Signature : ULONG32;
  855. Version : ULONG32;
  856. NumberOfStreams : ULONG32;
  857. StreamDirectoryRva : TRVA;
  858. CheckSum : ULONG32;
  859. a : packed record
  860. case longint of
  861. 0 : ( Reserved : ULONG32 );
  862. 1 : ( TimeDateStamp : ULONG32 );
  863. end;
  864. Flags : ULONG64;
  865. end;
  866. MINIDUMP_HEADER = TMINIDUMP_HEADER;
  867. LPMINIDUMP_HEADER = PMINIDUMP_HEADER;
  868. PMINIDUMP_DIRECTORY = ^TMINIDUMP_DIRECTORY;
  869. TMINIDUMP_DIRECTORY = record
  870. StreamType : ULONG32;
  871. Location : TMINIDUMP_LOCATION_DESCRIPTOR;
  872. end;
  873. MINIDUMP_DIRECTORY = TMINIDUMP_DIRECTORY;
  874. LPMINIDUMP_DIRECTORY = PMINIDUMP_DIRECTORY;
  875. PPMINIDUMP_DIRECTORY = ^PMINIDUMP_DIRECTORY;
  876. PMINIDUMP_STRING = ^TMINIDUMP_STRING;
  877. TMINIDUMP_STRING = record
  878. Length : ULONG32;
  879. Buffer : array[0..0] of WCHAR;
  880. end;
  881. MINIDUMP_STRING = TMINIDUMP_STRING;
  882. LPMINIDUMP_STRING = PMINIDUMP_STRING;
  883. PCPU_INFORMATION = ^TCPU_INFORMATION;
  884. TCPU_INFORMATION = record
  885. case longint of
  886. 0 : ( X86CpuInfo : packed record
  887. VendorId : array[0..2] of ULONG32;
  888. VersionInformation : ULONG32;
  889. FeatureInformation : ULONG32;
  890. AMDExtendedCpuFeatures : ULONG32;
  891. end );
  892. 1 : ( OtherCpuInfo : packed record
  893. ProcessorFeatures : array[0..1] of ULONG64;
  894. end );
  895. end;
  896. CPU_INFORMATION = TCPU_INFORMATION;
  897. LPCPU_INFORMATION = PCPU_INFORMATION;
  898. PMINIDUMP_SYSTEM_INFO = ^TMINIDUMP_SYSTEM_INFO;
  899. TMINIDUMP_SYSTEM_INFO = record
  900. ProcessorArchitecture : USHORT;
  901. ProcessorLevel : USHORT;
  902. ProcessorRevision : USHORT;
  903. c : packed record
  904. case longint of
  905. 0 : ( Reserved0 : USHORT );
  906. 1 : ( b : packed record
  907. NumberOfProcessors : UCHAR;
  908. ProductType : UCHAR;
  909. end );
  910. end;
  911. MajorVersion : ULONG32;
  912. MinorVersion : ULONG32;
  913. BuildNumber : ULONG32;
  914. PlatformId : ULONG32;
  915. CSDVersionRva : TRVA;
  916. e : packed record
  917. case longint of
  918. 0 : ( Reserved1 : ULONG32 );
  919. 1 : ( d : packed record
  920. SuiteMask : USHORT;
  921. Reserved2 : USHORT;
  922. end );
  923. end;
  924. Cpu : TCPU_INFORMATION;
  925. end;
  926. MINIDUMP_SYSTEM_INFO = TMINIDUMP_SYSTEM_INFO;
  927. LPMINIDUMP_SYSTEM_INFO = PMINIDUMP_SYSTEM_INFO;
  928. PMINIDUMP_THREAD = ^TMINIDUMP_THREAD;
  929. TMINIDUMP_THREAD = record
  930. ThreadId : ULONG32;
  931. SuspendCount : ULONG32;
  932. PriorityClass : ULONG32;
  933. Priority : ULONG32;
  934. Teb : ULONG64;
  935. Stack : TMINIDUMP_MEMORY_DESCRIPTOR;
  936. ThreadContext : TMINIDUMP_LOCATION_DESCRIPTOR;
  937. end;
  938. MINIDUMP_THREAD = TMINIDUMP_THREAD;
  939. LPMINIDUMP_THREAD = PMINIDUMP_THREAD;
  940. PMINIDUMP_THREAD_LIST = ^TMINIDUMP_THREAD_LIST;
  941. TMINIDUMP_THREAD_LIST = record
  942. NumberOfThreads : ULONG32;
  943. Threads : array[0..0] of TMINIDUMP_THREAD;
  944. end;
  945. MINIDUMP_THREAD_LIST = TMINIDUMP_THREAD_LIST;
  946. LPMINIDUMP_THREAD_LIST = PMINIDUMP_THREAD_LIST;
  947. PMINIDUMP_THREAD_EX = ^TMINIDUMP_THREAD_EX;
  948. TMINIDUMP_THREAD_EX = record
  949. ThreadId : ULONG32;
  950. SuspendCount : ULONG32;
  951. PriorityClass : ULONG32;
  952. Priority : ULONG32;
  953. Teb : ULONG64;
  954. Stack : TMINIDUMP_MEMORY_DESCRIPTOR;
  955. ThreadContext : TMINIDUMP_LOCATION_DESCRIPTOR;
  956. BackingStore : TMINIDUMP_MEMORY_DESCRIPTOR;
  957. end;
  958. MINIDUMP_THREAD_EX = PMINIDUMP_THREAD_EX;
  959. LPMINIDUMP_THREAD_EX = PMINIDUMP_THREAD_EX;
  960. PMINIDUMP_THREAD_EX_LIST = ^TMINIDUMP_THREAD_EX_LIST;
  961. TMINIDUMP_THREAD_EX_LIST = record
  962. NumberOfThreads : ULONG32;
  963. Threads : array[0..0] of TMINIDUMP_THREAD_EX;
  964. end;
  965. MINIDUMP_THREAD_EX_LIST = TMINIDUMP_THREAD_EX_LIST;
  966. LPMINIDUMP_THREAD_EX_LIST = PMINIDUMP_THREAD_EX_LIST;
  967. PMINIDUMP_EXCEPTION = ^TMINIDUMP_EXCEPTION;
  968. TMINIDUMP_EXCEPTION = record
  969. ExceptionCode : ULONG32;
  970. ExceptionFlags : ULONG32;
  971. ExceptionRecord : ULONG64;
  972. ExceptionAddress : ULONG64;
  973. NumberParameters : ULONG32;
  974. __unusedAlignment : ULONG32;
  975. ExceptionInformation : array[0..(EXCEPTION_MAXIMUM_PARAMETERS)-1] of ULONG64;
  976. end;
  977. MINIDUMP_EXCEPTION = TMINIDUMP_EXCEPTION;
  978. LPMINIDUMP_EXCEPTION = PMINIDUMP_EXCEPTION;
  979. PMINIDUMP_EXCEPTION_STREAM = ^TMINIDUMP_EXCEPTION_STREAM;
  980. TMINIDUMP_EXCEPTION_STREAM = record
  981. ThreadId : ULONG32;
  982. __alignment : ULONG32;
  983. ExceptionRecord : TMINIDUMP_EXCEPTION;
  984. ThreadContext : TMINIDUMP_LOCATION_DESCRIPTOR;
  985. end;
  986. MINIDUMP_EXCEPTION_STREAM = TMINIDUMP_EXCEPTION_STREAM;
  987. LPMINIDUMP_EXCEPTION_STREAM = PMINIDUMP_EXCEPTION_STREAM;
  988. PMINIDUMP_MODULE = ^TMINIDUMP_MODULE;
  989. TMINIDUMP_MODULE = record
  990. BaseOfImage : ULONG64;
  991. SizeOfImage : ULONG32;
  992. CheckSum : ULONG32;
  993. TimeDateStamp : ULONG32;
  994. ModuleNameRva : TRVA;
  995. VersionInfo : TVSFIXEDFILEINFO;
  996. CvRecord : TMINIDUMP_LOCATION_DESCRIPTOR;
  997. MiscRecord : TMINIDUMP_LOCATION_DESCRIPTOR;
  998. Reserved0 : ULONG64;
  999. Reserved1 : ULONG64;
  1000. end;
  1001. MINIDUMP_MODULE = TMINIDUMP_MODULE;
  1002. LPMINIDUMP_MODULE = PMINIDUMP_MODULE;
  1003. PMINIDUMP_MODULE_LIST = ^TMINIDUMP_MODULE_LIST;
  1004. TMINIDUMP_MODULE_LIST = record
  1005. NumberOfModules : ULONG32;
  1006. Modules : array[0..0] of TMINIDUMP_MODULE;
  1007. end;
  1008. MINIDUMP_MODULE_LIST = TMINIDUMP_MODULE_LIST;
  1009. LPMINIDUMP_MODULE_LIST = PMINIDUMP_MODULE_LIST;
  1010. PMINIDUMP_MEMORY_LIST = ^TMINIDUMP_MEMORY_LIST;
  1011. TMINIDUMP_MEMORY_LIST = record
  1012. NumberOfMemoryRanges : ULONG32;
  1013. MemoryRanges : array[0..0] of TMINIDUMP_MEMORY_DESCRIPTOR;
  1014. end;
  1015. MINIDUMP_MEMORY_LIST = TMINIDUMP_MEMORY_LIST;
  1016. LPMINIDUMP_MEMORY_LIST = PMINIDUMP_MEMORY_LIST;
  1017. PMINIDUMP_MEMORY64_LIST = ^TMINIDUMP_MEMORY64_LIST;
  1018. TMINIDUMP_MEMORY64_LIST = record
  1019. NumberOfMemoryRanges : ULONG64;
  1020. BaseRva : TRVA64;
  1021. MemoryRanges : array[0..0] of TMINIDUMP_MEMORY_DESCRIPTOR64;
  1022. end;
  1023. MINIDUMP_MEMORY64_LIST = TMINIDUMP_MEMORY64_LIST;
  1024. LPMINIDUMP_MEMORY64_LIST = PMINIDUMP_MEMORY64_LIST;
  1025. PMINIDUMP_EXCEPTION_INFORMATION = ^TMINIDUMP_EXCEPTION_INFORMATION;
  1026. TMINIDUMP_EXCEPTION_INFORMATION = record
  1027. ThreadId : dword;
  1028. ExceptionPointers : PEXCEPTION_POINTERS;
  1029. ClientPointers : BOOL;
  1030. end;
  1031. MINIDUMP_EXCEPTION_INFORMATION = TMINIDUMP_EXCEPTION_INFORMATION;
  1032. LPMINIDUMP_EXCEPTION_INFORMATION = PMINIDUMP_EXCEPTION_INFORMATION;
  1033. PMINIDUMP_EXCEPTION_INFORMATION64 = ^TMINIDUMP_EXCEPTION_INFORMATION64;
  1034. TMINIDUMP_EXCEPTION_INFORMATION64 = record
  1035. ThreadId : dword;
  1036. ExceptionRecord : ULONG64;
  1037. ContextRecord : ULONG64;
  1038. ClientPointers : BOOL;
  1039. end;
  1040. MINIDUMP_EXCEPTION_INFORMATION64 = TMINIDUMP_EXCEPTION_INFORMATION64;
  1041. LPMINIDUMP_EXCEPTION_INFORMATION64 = PMINIDUMP_EXCEPTION_INFORMATION64;
  1042. PMINIDUMP_HANDLE_DESCRIPTOR = ^TMINIDUMP_HANDLE_DESCRIPTOR;
  1043. TMINIDUMP_HANDLE_DESCRIPTOR = record
  1044. Handle : ULONG64;
  1045. TypeNameRva : TRVA;
  1046. ObjectNameRva : TRVA;
  1047. Attributes : ULONG32;
  1048. GrantedAccess : ULONG32;
  1049. HandleCount : ULONG32;
  1050. PointerCount : ULONG32;
  1051. end;
  1052. MINIDUMP_HANDLE_DESCRIPTOR = TMINIDUMP_HANDLE_DESCRIPTOR;
  1053. LPMINIDUMP_HANDLE_DESCRIPTOR = PMINIDUMP_HANDLE_DESCRIPTOR;
  1054. PMINIDUMP_HANDLE_DATA_STREAM = ^TMINIDUMP_HANDLE_DATA_STREAM;
  1055. TMINIDUMP_HANDLE_DATA_STREAM = record
  1056. SizeOfHeader : ULONG32;
  1057. SizeOfDescriptor : ULONG32;
  1058. NumberOfDescriptors : ULONG32;
  1059. Reserved : ULONG32;
  1060. end;
  1061. MINIDUMP_HANDLE_DATA_STREAM = TMINIDUMP_HANDLE_DATA_STREAM;
  1062. LPMINIDUMP_HANDLE_DATA_STREAM = PMINIDUMP_HANDLE_DATA_STREAM;
  1063. PMINIDUMP_FUNCTION_TABLE_DESCRIPTOR = ^TMINIDUMP_FUNCTION_TABLE_DESCRIPTOR;
  1064. TMINIDUMP_FUNCTION_TABLE_DESCRIPTOR = record
  1065. MinimumAddress : ULONG64;
  1066. MaximumAddress : ULONG64;
  1067. BaseAddress : ULONG64;
  1068. EntryCount : ULONG32;
  1069. SizeOfAlignPad : ULONG32;
  1070. end;
  1071. MINIDUMP_FUNCTION_TABLE_DESCRIPTOR = TMINIDUMP_FUNCTION_TABLE_DESCRIPTOR;
  1072. LPMINIDUMP_FUNCTION_TABLE_DESCRIPTOR = PMINIDUMP_FUNCTION_TABLE_DESCRIPTOR;
  1073. PMINIDUMP_FUNCTION_TABLE_STREAM = ^TMINIDUMP_FUNCTION_TABLE_STREAM;
  1074. TMINIDUMP_FUNCTION_TABLE_STREAM = record
  1075. SizeOfHeader : ULONG32;
  1076. SizeOfDescriptor : ULONG32;
  1077. SizeOfNativeDescriptor : ULONG32;
  1078. SizeOfFunctionEntry : ULONG32;
  1079. NumberOfDescriptors : ULONG32;
  1080. SizeOfAlignPad : ULONG32;
  1081. end;
  1082. MINIDUMP_FUNCTION_TABLE_STREAM = TMINIDUMP_FUNCTION_TABLE_STREAM;
  1083. LPPMINIDUMP_FUNCTION_TABLE_STREAM = PMINIDUMP_FUNCTION_TABLE_STREAM;
  1084. PMINIDUMP_UNLOADED_MODULE = ^TMINIDUMP_UNLOADED_MODULE;
  1085. TMINIDUMP_UNLOADED_MODULE = record
  1086. BaseOfImage : ULONG64;
  1087. SizeOfImage : ULONG32;
  1088. CheckSum : ULONG32;
  1089. TimeDateStamp : ULONG32;
  1090. ModuleNameRva : TRVA;
  1091. end;
  1092. MINIDUMP_UNLOADED_MODULE = TMINIDUMP_UNLOADED_MODULE;
  1093. LPMINIDUMP_UNLOADED_MODULE = PMINIDUMP_UNLOADED_MODULE;
  1094. PMINIDUMP_UNLOADED_MODULE_LIST = ^TMINIDUMP_UNLOADED_MODULE_LIST;
  1095. TMINIDUMP_UNLOADED_MODULE_LIST = record
  1096. SizeOfHeader : ULONG32;
  1097. SizeOfEntry : ULONG32;
  1098. NumberOfEntries : ULONG32;
  1099. end;
  1100. MINIDUMP_UNLOADED_MODULE_LIST = TMINIDUMP_UNLOADED_MODULE_LIST;
  1101. LPMINIDUMP_UNLOADED_MODULE_LIST = PMINIDUMP_UNLOADED_MODULE_LIST;
  1102. PMINIDUMP_MISC_INFO = ^TMINIDUMP_MISC_INFO;
  1103. TMINIDUMP_MISC_INFO = record
  1104. SizeOfInfo : ULONG32;
  1105. Flags1 : ULONG32;
  1106. ProcessId : ULONG32;
  1107. ProcessCreateTime : ULONG32;
  1108. ProcessUserTime : ULONG32;
  1109. ProcessKernelTime : ULONG32;
  1110. end;
  1111. MINIDUMP_MISC_INFO = TMINIDUMP_MISC_INFO;
  1112. LPMINIDUMP_MISC_INFO = PMINIDUMP_MISC_INFO;
  1113. PMINIDUMP_USER_RECORD = ^TMINIDUMP_USER_RECORD;
  1114. TMINIDUMP_USER_RECORD = record
  1115. _Type : ULONG32;
  1116. Memory : TMINIDUMP_LOCATION_DESCRIPTOR;
  1117. end;
  1118. MINIDUMP_USER_RECORD = TMINIDUMP_USER_RECORD;
  1119. LPMINIDUMP_USER_RECORD = PMINIDUMP_USER_RECORD;
  1120. PMINIDUMP_USER_STREAM = ^TMINIDUMP_USER_STREAM;
  1121. TMINIDUMP_USER_STREAM = record
  1122. _Type : ULONG32;
  1123. BufferSize : ULONG;
  1124. Buffer : pointer;
  1125. end;
  1126. MINIDUMP_USER_STREAM = TMINIDUMP_USER_STREAM;
  1127. LPMINIDUMP_USER_STREAM = PMINIDUMP_USER_STREAM;
  1128. PMINIDUMP_USER_STREAM_INFORMATION = ^TMINIDUMP_USER_STREAM_INFORMATION;
  1129. TMINIDUMP_USER_STREAM_INFORMATION = record
  1130. UserStreamCount : ULONG;
  1131. UserStreamArray : PMINIDUMP_USER_STREAM;
  1132. end;
  1133. MINIDUMP_USER_STREAM_INFORMATION = TMINIDUMP_USER_STREAM_INFORMATION;
  1134. LPMINIDUMP_USER_STREAM_INFORMATION = PMINIDUMP_USER_STREAM_INFORMATION;
  1135. PMINIDUMP_THREAD_CALLBACK = ^TMINIDUMP_THREAD_CALLBACK;
  1136. TMINIDUMP_THREAD_CALLBACK = record
  1137. ThreadId : ULONG;
  1138. ThreadHandle : THANDLE;
  1139. Context : TCONTEXT;
  1140. SizeOfContext : ULONG;
  1141. StackBase : ULONG64;
  1142. StackEnd : ULONG64;
  1143. end;
  1144. MINIDUMP_THREAD_CALLBACK = TMINIDUMP_THREAD_CALLBACK;
  1145. LPMINIDUMP_THREAD_CALLBACK = PMINIDUMP_THREAD_CALLBACK;
  1146. PMINIDUMP_THREAD_EX_CALLBACK = ^TMINIDUMP_THREAD_EX_CALLBACK;
  1147. TMINIDUMP_THREAD_EX_CALLBACK = record
  1148. ThreadId : ULONG;
  1149. ThreadHandle : THANDLE;
  1150. Context : TCONTEXT;
  1151. SizeOfContext : ULONG;
  1152. StackBase : ULONG64;
  1153. StackEnd : ULONG64;
  1154. BackingStoreBase : ULONG64;
  1155. BackingStoreEnd : ULONG64;
  1156. end;
  1157. MINIDUMP_THREAD_EX_CALLBACK = TMINIDUMP_THREAD_EX_CALLBACK;
  1158. LPMINIDUMP_THREAD_EX_CALLBACK = PMINIDUMP_THREAD_EX_CALLBACK;
  1159. PMINIDUMP_INCLUDE_THREAD_CALLBACK = ^TMINIDUMP_INCLUDE_THREAD_CALLBACK;
  1160. TMINIDUMP_INCLUDE_THREAD_CALLBACK = record
  1161. ThreadId : ULONG;
  1162. end;
  1163. MINIDUMP_INCLUDE_THREAD_CALLBACK = TMINIDUMP_INCLUDE_THREAD_CALLBACK;
  1164. LPMINIDUMP_INCLUDE_THREAD_CALLBACK = PMINIDUMP_INCLUDE_THREAD_CALLBACK;
  1165. PMINIDUMP_MODULE_CALLBACK = ^TMINIDUMP_MODULE_CALLBACK;
  1166. TMINIDUMP_MODULE_CALLBACK = record
  1167. FullPath : PWCHAR;
  1168. BaseOfImage : ULONG64;
  1169. SizeOfImage : ULONG;
  1170. CheckSum : ULONG;
  1171. TimeDateStamp : ULONG;
  1172. VersionInfo : TVSFIXEDFILEINFO;
  1173. CvRecord : pointer;
  1174. SizeOfCvRecord : ULONG;
  1175. MiscRecord : pointer;
  1176. SizeOfMiscRecord : ULONG;
  1177. end;
  1178. MINIDUMP_MODULE_CALLBACK = TMINIDUMP_MODULE_CALLBACK;
  1179. LPMINIDUMP_MODULE_CALLBACK = PMINIDUMP_MODULE_CALLBACK;
  1180. PMINIDUMP_INCLUDE_MODULE_CALLBACK = ^TMINIDUMP_INCLUDE_MODULE_CALLBACK;
  1181. TMINIDUMP_INCLUDE_MODULE_CALLBACK = record
  1182. BaseOfImage : ULONG64;
  1183. end;
  1184. MINIDUMP_INCLUDE_MODULE_CALLBACK = TMINIDUMP_INCLUDE_MODULE_CALLBACK;
  1185. LPMINIDUMP_INCLUDE_MODULE_CALLBACK = PMINIDUMP_INCLUDE_MODULE_CALLBACK;
  1186. PMINIDUMP_CALLBACK_INPUT = ^TMINIDUMP_CALLBACK_INPUT;
  1187. TMINIDUMP_CALLBACK_INPUT = record
  1188. ProcessId : ULONG;
  1189. ProcessHandle : THANDLE;
  1190. CallbackType : ULONG;
  1191. anony : packed record
  1192. case longint of
  1193. 0 : ( Thread : TMINIDUMP_THREAD_CALLBACK );
  1194. 1 : ( ThreadEx : TMINIDUMP_THREAD_EX_CALLBACK );
  1195. 2 : ( Module : TMINIDUMP_MODULE_CALLBACK );
  1196. 3 : ( IncludeThread : TMINIDUMP_INCLUDE_THREAD_CALLBACK );
  1197. 4 : ( IncludeModule : TMINIDUMP_INCLUDE_MODULE_CALLBACK );
  1198. end;
  1199. end;
  1200. MINIDUMP_CALLBACK_INPUT = TMINIDUMP_CALLBACK_INPUT;
  1201. LPMINIDUMP_CALLBACK_INPUT = PMINIDUMP_CALLBACK_INPUT;
  1202. PMINIDUMP_CALLBACK_OUTPUT = ^TMINIDUMP_CALLBACK_OUTPUT;
  1203. TMINIDUMP_CALLBACK_OUTPUT = record
  1204. anony3 : packed record
  1205. case longint of
  1206. 0 : ( ModuleWriteFlags : ULONG );
  1207. 1 : ( ThreadWriteFlags : ULONG );
  1208. 2 : ( anony2 : packed record
  1209. MemoryBase : ULONG64;
  1210. MemorySize : ULONG;
  1211. end );
  1212. end;
  1213. end;
  1214. MINIDUMP_CALLBACK_OUTPUT = TMINIDUMP_CALLBACK_OUTPUT;
  1215. LPMINIDUMP_CALLBACK_OUTPUT = PMINIDUMP_CALLBACK_OUTPUT;
  1216. TIMAGEHLP_STATUS_ROUTINE = function (Reason:TIMAGEHLP_STATUS_REASON; ImageName:PSTR; DllName:PSTR; Va:ULONG_PTR; Parameter:ULONG_PTR):BOOL;stdcall;
  1217. TIMAGEHLP_STATUS_ROUTINE32 = function (Reason:TIMAGEHLP_STATUS_REASON; ImageName:PSTR; DllName:PSTR; Va:ULONG; Parameter:ULONG_PTR):BOOL;stdcall;
  1218. TIMAGEHLP_STATUS_ROUTINE64 = function (Reason:TIMAGEHLP_STATUS_REASON; ImageName:PSTR; DllName:PSTR; Va:ULONG64; Parameter:ULONG_PTR):BOOL;stdcall;
  1219. TDIGEST_FUNCTION = function (refdata:TDIGEST_HANDLE; pData:pbyte; dwLength:DWORD):bool;stdcall;
  1220. TFIND_DEBUG_FILE_CALLBACK = function (FileHandle:THANDLE; FileName:PSTR; CallerData:pointer):bool;stdcall; // callback
  1221. TFINDFILEINPATHCALLBACK = function (filename:PSTR; context:pointer):bool;stdcall;
  1222. TFIND_EXE_FILE_CALLBACK = function (FileHandle:THANDLE; FileName:PSTR; CallerData:pointer):bool;stdcall;
  1223. TSYMBOLSERVERPROC = function (para1:LPCSTR; para2:LPCSTR; para3:pointer; para4:DWORD; para5:DWORD; para6:lpstr):bool;stdcall;
  1224. TSYMBOLSERVEROPENPROC = function (para1:pointer):bool;stdcall;
  1225. TSYMBOLSERVERCLOSEPROC = function (para1:pointer):bool;stdcall;
  1226. TSYMBOLSERVERSETOPTIONSPROC= function (para1:UINT_PTR; para2:ULONG64):bool;stdcall;
  1227. TSYMBOLSERVERCALLBACKPROC = function (action:UINT_PTR; data:ULONG64; context:ULONG64):bool;stdcall;
  1228. TSYMBOLSERVERGETOPTIONSPROC= function :UINT_PTR;stdcall;
  1229. TSYMBOLSERVERPINGPROC = function (para1:LPCSTR):bool;stdcall;
  1230. TENUMDIRTREE_CALLBACK = function (FilePath:LPCSTR; CallerData:pointer):bool;stdcall;
  1231. TREAD_PROCESS_MEMORY_ROUTINE64 = function (hProcess:THANDLE; qwBaseAddress:dword64; lpBuffer:pointer; nSize:dword; lpNumberOfBytesRead:lpdword):bool;stdcall;
  1232. TFUNCTION_TABLE_ACCESS_ROUTINE64= function (hProcess:THANDLE; AddrBase:dword64):pointer;stdcall;
  1233. TGET_MODULE_BASE_ROUTINE64 = function (hProcess:THANDLE; Address:dword64):dword64;stdcall;
  1234. TTRANSLATE_ADDRESS_ROUTINE64 = function (hProcess:THANDLE; hThread:THANDLE; lpaddr:LPADDRESS64):dword64;stdcall;
  1235. {$IFDEF IMAGEHLP64}
  1236. TREAD_PROCESS_MEMORY_ROUTINE = TREAD_PROCESS_MEMORY_ROUTINE64 ;
  1237. TFUNCTION_TABLE_ACCESS_ROUTINE = TFUNCTION_TABLE_ACCESS_ROUTINE64;
  1238. TGET_MODULE_BASE_ROUTINE = TGET_MODULE_BASE_ROUTINE64;
  1239. TTRANSLATE_ADDRESS_ROUTINE = TTRANSLATE_ADDRESS_ROUTINE64;
  1240. {$ELSE}
  1241. TREAD_PROCESS_MEMORY_ROUTINE = function (hProcess:THANDLE; lpBaseAddress:dword; lpBuffer:pointer; nSize:dword; lpNumberOfBytesRead:PDWORD):bool;stdcall;
  1242. TFUNCTION_TABLE_ACCESS_ROUTINE = function (hProcess:THANDLE; AddrBase:dword):pointer;stdcall;
  1243. TGET_MODULE_BASE_ROUTINE = function (hProcess:THANDLE; Address:dword):dword;stdcall;
  1244. TTRANSLATE_ADDRESS_ROUTINE = function (hProcess:THANDLE; hThread:THANDLE; lpaddr:LPADDRESS):dword;stdcall;
  1245. {$ENDIF}
  1246. TSYM_ENUMMODULES_CALLBACK64 = function (ModuleName:PSTR; BaseOfDll:dword64; UserContext:pointer):bool;stdcall; {CALLBACK }
  1247. TSYM_ENUMSYMBOLS_CALLBACK64 = function (SymbolName:PSTR; SymbolAddress:dword64; SymbolSize:ULONG; UserContext:pointer):bool;stdcall; {CALLBACK }
  1248. TSYM_ENUMSYMBOLS_CALLBACK64W = function (SymbolName:lpwstr; SymbolAddress:dword64; SymbolSize:ULONG; UserContext:pointer):bool;stdcall; {CALLBACK }
  1249. TENUMLOADED_MODULES_CALLBACK64 = function (ModuleName:PSTR; ModuleBase:dword64; ModuleSize:ULONG; UserContext:pointer):bool;stdcall; {CALLBACK }
  1250. TSYMBOL_REGISTERED_CALLBACK64 = function (hProcess:THANDLE; ActionCode:ULONG; CallbackData:ULONG64; UserContext:ULONG64):bool;stdcall; {CALLBACK }
  1251. TSYMBOL_FUNCENTRY_CALLBACK64 = function (hProcess:THANDLE; AddrBase:ULONG64; UserContext:ULONG64):pointer;stdcall; {CALLBACK }
  1252. {$IFDEF IMAGEHLP64}
  1253. TSYM_ENUMMODULES_CALLBACK = TSYM_ENUMMODULES_CALLBACK64;
  1254. TSYM_ENUMSYMBOLS_CALLBACK = TSYM_ENUMSYMBOLS_CALLBACK64;
  1255. TSYM_ENUMSYMBOLS_CALLBACKW = TSYM_ENUMSYMBOLS_CALLBACK64W;
  1256. TENUMLOADED_MODULES_CALLBACK = TENUMLOADED_MODULES_CALLBACK64;
  1257. TSYMBOL_REGISTERED_CALLBACK = TSYMBOL_REGISTERED_CALLBACK64;
  1258. TSYMBOL_FUNCENTRY_CALLBACK = TSYMBOL_FUNCENTRY_CALLBACK64;
  1259. {$ELSE}
  1260. TSYM_ENUMMODULES_CALLBACK = function (ModuleName:PSTR; BaseOfDll:ULONG; UserContext:pointer):bool;stdcall;
  1261. TSYM_ENUMSYMBOLS_CALLBACK = function (SymbolName:PSTR; SymbolAddress:ULONG; SymbolSize:ULONG; UserContext:pointer):bool;stdcall;
  1262. TSYM_ENUMSYMBOLS_CALLBACKW = function (SymbolName:lpwstr; SymbolAddress:ULONG; SymbolSize:ULONG; UserContext:pointer):bool;stdcall;
  1263. TENUMLOADED_MODULES_CALLBACK = function (ModuleName:PSTR; ModuleBase:ULONG; ModuleSize:ULONG; UserContext:pointer):bool;stdcall;
  1264. TSYMBOL_REGISTERED_CALLBACK = function (hProcess:THANDLE; ActionCode:ULONG; CallbackData:pointer; UserContext:pointer):bool;stdcall;
  1265. TSYMBOL_FUNCENTRY_CALLBACK = function (hProcess:THANDLE; AddrBase:dword; UserContext:pointer):pointer;stdcall; {CALLBACK }
  1266. {$ENDIF}
  1267. TSYM_ENUMSOURCFILES_CALLBACK = function (pSourceFile:PSOURCEFILE; UserContext:pointer):BOOL;stdcall;
  1268. TSYM_ENUMLINES_CALLBACK = function (LineInfo:PSRCCODEINFO; UserContext:pointer):BOOL;stdcall;
  1269. TSYM_ENUMERATESYMBOLS_CALLBACK = function (pSymInfo:PSYMBOL_INFO; SymbolSize:ULONG; UserContext:pointer):BOOL;stdcall;
  1270. TDBGHELP_CREATE_USER_DUMP_CALLBACK = function (DataType:dword; Data:PPOINTER; DataLength:lpdword; UserData:pointer):BOOL;stdcall;
  1271. TMINIDUMP_CALLBACK_ROUTINE = function (CallbackParam:pointer; CallbackInput:PMINIDUMP_CALLBACK_INPUT; CallbackOutput:PMINIDUMP_CALLBACK_OUTPUT):BOOL;stdcall;
  1272. PMINIDUMP_CALLBACK_INFORMATION = ^TMINIDUMP_CALLBACK_INFORMATION;
  1273. TMINIDUMP_CALLBACK_INFORMATION = record
  1274. CallbackRoutine : TMINIDUMP_CALLBACK_ROUTINE;
  1275. CallbackParam : pointer;
  1276. end;
  1277. MINIDUMP_CALLBACK_INFORMATION = TMINIDUMP_CALLBACK_INFORMATION;
  1278. LPMINIDUMP_CALLBACK_INFORMATION = PMINIDUMP_CALLBACK_INFORMATION;
  1279. function BindImage(ImageName:PSTR; DllPath:PSTR; SymbolPath:PSTR):BOOL;stdcall;external External_library name 'BindImage';
  1280. function BindImageEx(Flags:DWORD; ImageName:PSTR; DllPath:PSTR; SymbolPath:PSTR; StatusRoutine:TIMAGEHLP_STATUS_ROUTINE):BOOL;stdcall;external External_library name 'BindImageEx';
  1281. function ReBaseImage(CurrentImageName:PSTR; SymbolPath:PSTR; fReBase:bool; fRebaseSysfileOk:bool; fGoingDown:bool;
  1282. CheckImageSize:ULONG; OldImageSize:PULONG; OldImageBase:PULONG_PTR; NewImageSize:PULONG; NewImageBase:PULONG_PTR;
  1283. TimeStamp:ULONG):bool;stdcall;external External_library name 'ReBaseImage';
  1284. function ReBaseImage64(CurrentImageName:PSTR; SymbolPath:PSTR; fReBase:bool; fRebaseSysfileOk:bool; fGoingDown:bool;
  1285. CheckImageSize:ULONG; OldImageSize:PULONG; OldImageBase:PULONG64; NewImageSize:PULONG; NewImageBase:PULONG64;
  1286. TimeStamp:ULONG):bool;stdcall;external External_library name 'ReBaseImage64';
  1287. function CheckSumMappedFile(BaseAddress:pointer; FileLength:DWORD; HeaderSum:PDWORD; CheckSum:PDWORD):PIMAGE_NT_HEADERS;stdcall;external External_library name 'CheckSumMappedFile';
  1288. function MapFileAndCheckSumA(Filename:PSTR; HeaderSum:PDWORD; CheckSum:PDWORD):DWORD;stdcall;external External_library name 'MapFileAndCheckSumA';
  1289. function MapFileAndCheckSumW(Filename:lpwstr; HeaderSum:PDWORD; CheckSum:PDWORD):DWORD;stdcall;external External_library name 'MapFileAndCheckSumW';
  1290. {$IFDEF UNICODE}
  1291. function MapFileAndCheckSum(Filename:lpwstr; HeaderSum:PDWORD; CheckSum:PDWORD):DWORD;stdcall;external External_library name 'MapFileAndCheckSumW';
  1292. {$ELSE}
  1293. function MapFileAndCheckSum(Filename:PSTR; HeaderSum:PDWORD; CheckSum:PDWORD):DWORD;stdcall;external External_library name 'MapFileAndCheckSumA';
  1294. {$ENDIF}
  1295. function GetImageConfigInformation(LoadedImage:PLOADED_IMAGE; ImageConfigInformation:PIMAGE_LOAD_CONFIG_DIRECTORY):bool;stdcall;external External_library name 'GetImageConfigInformation';
  1296. function GetImageUnusedHeaderBytes(LoadedImage:PLOADED_IMAGE; SizeUnusedHeaderBytes:PDWORD):DWORD;stdcall;external External_library name 'GetImageUnusedHeaderBytes';
  1297. function SetImageConfigInformation(LoadedImage:PLOADED_IMAGE; ImageConfigInformation:PIMAGE_LOAD_CONFIG_DIRECTORY):bool;stdcall;external External_library name 'SetImageConfigInformation';
  1298. function ImageGetDigestStream(FileHandle:THANDLE; DigestLevel:DWORD; DigestFunction:TDIGEST_FUNCTION; DigestHandle:TDIGEST_HANDLE):bool;stdcall;external External_library name 'ImageGetDigestStream';
  1299. function ImageAddCertificate(FileHandle:THANDLE; Certificate:PWINCERTIFICATE; Index:PDWORD):bool;stdcall;external External_library name 'ImageAddCertificate';
  1300. function ImageRemoveCertificate(FileHandle:THANDLE; Index:DWORD):bool;stdcall;external External_library name 'ImageRemoveCertificate';
  1301. function ImageEnumerateCertificates(FileHandle:THANDLE; TypeFilter:word; CertificateCount:PDWORD; Indices:PDWORD; IndexCount:DWORD):bool;stdcall;external External_library name 'ImageEnumerateCertificates';
  1302. function ImageGetCertificateData(FileHandle:THANDLE; CertificateIndex:DWORD; Certificate:PWINCERTIFICATE; RequiredLength:PDWORD):bool;stdcall;external External_library name 'ImageGetCertificateData';
  1303. function ImageGetCertificateHeader(FileHandle:THANDLE; CertificateIndex:DWORD; Certificateheader:PWINCERTIFICATE):bool;stdcall;external External_library name 'ImageGetCertificateHeader';
  1304. function ImageLoad(DllName:PSTR; DllPath:PSTR):PLOADED_IMAGE;stdcall;external External_library name 'ImageLoad';
  1305. function ImageUnload(LoadedImage:PLOADED_IMAGE):bool;stdcall;external External_library name 'ImageUnload';
  1306. function MapAndLoad(ImageName:PSTR; DllPath:PSTR; LoadedImage:PLOADED_IMAGE; DotDll:bool; ReadOnly:BOOL):bool;stdcall;external External_library name 'MapAndLoad';
  1307. function UnMapAndLoad(LoadedImage:PLOADED_IMAGE):bool;stdcall;external External_library name 'UnMapAndLoad';
  1308. function TouchFileTimes(FileHandle:THANDLE; pSystemTime:PSYSTEMTIME):bool;stdcall;external External_library name 'TouchFileTimes';
  1309. function SplitSymbols(ImageName:PSTR; SymbolsPath:PSTR; SymbolFilePath:PSTR; Flags:DWORD):bool;stdcall;external External_library name 'SplitSymbols';
  1310. function UpdateDebugInfoFile(ImageFileName:PSTR; SymbolPath:PSTR; DebugFilePath:PSTR; NtHeaders:PIMAGE_NT_HEADERS32):bool;stdcall;external External_library name 'UpdateDebugInfoFile';
  1311. function UpdateDebugInfoFileEx(ImageFileName:PSTR; SymbolPath:PSTR; DebugFilePath:PSTR; NtHeaders:PIMAGE_NT_HEADERS32; OldChecksum:DWORD):bool;stdcall;external External_library name 'UpdateDebugInfoFileEx';
  1312. function FindDebugInfoFile(FileName:PSTR; SymbolPath:PSTR; DebugFilePath:PSTR):THANDLE;stdcall;external External_library name 'FindDebugInfoFile';
  1313. function FindDebugInfoFileEx(FileName:PSTR; SymbolPath:PSTR; DebugFilePath:PSTR; Callback:TFIND_DEBUG_FILE_CALLBACK; CallerData:pointer):THANDLE;stdcall;external External_library name 'FindDebugInfoFileEx';
  1314. function SymFindFileInPath(hprocess:THANDLE; SearchPath:lpstr; FileName:lpstr; id:pointer; two:DWORD;
  1315. three:DWORD; flags:DWORD; FoundFile:lpstr; callback:TFINDFILEINPATHCALLBACK; context:pointer):bool;stdcall;external External_library name 'SymFindFileInPath';
  1316. function FindExecutableImage(FileName:PSTR; SymbolPath:PSTR; ImageFilePath:PSTR):THANDLE;stdcall;external External_library name 'FindExecutableImage';
  1317. function FindExecutableImageEx(FileName:PSTR; SymbolPath:PSTR; ImageFilePath:PSTR; Callback:TFIND_EXE_FILE_CALLBACK; CallerData:pointer):THANDLE;stdcall;external External_library name 'FindExecutableImageEx';
  1318. function ImageNtHeader(Base:pointer):PIMAGE_NT_HEADERS;stdcall;external External_library name 'ImageNtHeader';
  1319. function ImageDirectoryEntryToDataEx(Base:pointer; MappedAsImage:bytebool; DirectoryEntry:ushort; Size:PULONG; FoundHeader:PPIMAGE_SECTION_HEADER):pointer;stdcall;external External_library name 'ImageDirectoryEntryToDataEx';
  1320. function ImageDirectoryEntryToData(Base:pointer; MappedAsImage:bytebool; DirectoryEntry:ushort; Size:PULONG):pointer;stdcall;external External_library name 'ImageDirectoryEntryToData';
  1321. function ImageRvaToSection(NtHeaders:PIMAGE_NT_HEADERS; Base:pointer; Rva:ULONG):PIMAGE_SECTION_HEADER;stdcall;external External_library name 'ImageRvaToSection';
  1322. function ImageRvaToVa(NtHeaders:PIMAGE_NT_HEADERS; Base:pointer; Rva:ULONG; LastRvaSection:PPIMAGE_SECTION_HEADER):pointer;stdcall;external External_library name 'ImageRvaToVa';
  1323. {$IFNDEF WIN64}
  1324. function MapDebugInformation(FileHandle:THANDLE; FileName:PSTR; SymbolPath:PSTR; ImageBase:dword):PIMAGE_DEBUG_INFORMATION;stdcall;external External_library name 'MapDebugInformation';
  1325. function UnmapDebugInformation(DebugInfo:PIMAGE_DEBUG_INFORMATION):bool;stdcall;external External_library name 'UnmapDebugInformation';
  1326. {$ENDIF}
  1327. function SearchTreeForFile(RootPath:PSTR; InputPathName:PSTR; OutputPathBuffer:PSTR):bool;stdcall;external External_library name 'SearchTreeForFile';
  1328. function EnumDirTree(hProcess:THANDLE; RootPath:PSTR; InputPathName:PSTR; OutputPathBuffer:PSTR; Callback:TENUMDIRTREE_CALLBACK;
  1329. CallbackData:pointer):bool;stdcall;external External_library name 'EnumDirTree';
  1330. function MakeSureDirectoryPathExists(DirPath:LPCSTR):bool;stdcall;external External_library name 'MakeSureDirectoryPathExists';
  1331. function UnDecorateSymbolName(DecoratedName:LPCSTR; UnDecoratedName:PSTR; UndecoratedLength:dword; Flags:dword):dword;stdcall;external External_library name 'UnDecorateSymbolName';
  1332. function StackWalk64(MachineType:dword; hProcess:THANDLE; hThread:THANDLE; StackFrame:LPSTACKFRAME64; ContextRecord:pointer;
  1333. ReadMemoryRoutine:TREAD_PROCESS_MEMORY_ROUTINE64; FunctionTableAccessRoutine:TFUNCTION_TABLE_ACCESS_ROUTINE64; GetModuleBaseRoutine:TGET_MODULE_BASE_ROUTINE64; TranslateAddress:TTRANSLATE_ADDRESS_ROUTINE64):bool;stdcall;external External_library name 'StackWalk64';
  1334. {$IFDEF IMAGEHLP64}
  1335. function StackWalk(MachineType:dword; hProcess:THANDLE; hThread:THANDLE; StackFrame:LPSTACKFRAME64; ContextRecord:pointer;
  1336. ReadMemoryRoutine:TREAD_PROCESS_MEMORY_ROUTINE64; FunctionTableAccessRoutine:TFUNCTION_TABLE_ACCESS_ROUTINE64; GetModuleBaseRoutine:TGET_MODULE_BASE_ROUTINE64; TranslateAddress:TTRANSLATE_ADDRESS_ROUTINE64):bool;stdcall;external External_library name 'StackWalk64';
  1337. {$ELSE}
  1338. function StackWalk(MachineType:dword; hProcess:THANDLE; hThread:THANDLE; StackFrame:LPSTACKFRAME; ContextRecord:pointer;
  1339. ReadMemoryRoutine:TREAD_PROCESS_MEMORY_ROUTINE; FunctionTableAccessRoutine:TFUNCTION_TABLE_ACCESS_ROUTINE; GetModuleBaseRoutine:TGET_MODULE_BASE_ROUTINE; TranslateAddress:TTRANSLATE_ADDRESS_ROUTINE):bool;stdcall;external External_library name 'StackWalk';
  1340. {$ENDIF}
  1341. function ImagehlpApiVersion:LPAPI_VERSION;stdcall;external External_library name 'ImagehlpApiVersion';
  1342. function ImagehlpApiVersionEx(AppVersion:LPAPI_VERSION):LPAPI_VERSION;stdcall;external External_library name 'ImagehlpApiVersionEx';
  1343. function GetTimestampForLoadedLibrary(Module:HMODULE):dword;stdcall;external External_library name 'GetTimestampForLoadedLibrary';
  1344. function SymSetParentWindow(hwnd:HWND):bool;stdcall;external External_library name 'SymSetParentWindow';
  1345. function SymSetHomeDirectory(dir:LPCSTR):PAnsiChar;stdcall;external External_library name 'SymSetHomeDirectory';
  1346. function SymGetHomeDirectory(_type:dword; dir:PSTR; size:Tsize):PAnsiChar;stdcall;external External_library name 'SymGetHomeDirectory';
  1347. function SymSetOptions(SymOptions:dword):dword;stdcall;external External_library name 'SymSetOptions';
  1348. function SymGetOptions:dword;stdcall;external External_library name 'SymGetOptions';
  1349. function SymCleanup(hProcess:THANDLE):BOOL;stdcall;external External_library name 'SymCleanup';
  1350. function SymMatchString(_string:lpstr; expression:lpstr; fCase:BOOL):BOOL;stdcall;external External_library name 'SymMatchString';
  1351. function SymEnumSourceFiles(hProcess:THANDLE; ModBase:ULONG64; Mask:lpstr; cbSrcFiles:TSYM_ENUMSOURCFILES_CALLBACK; UserContext:pointer):BOOL;stdcall;external External_library name 'SymEnumSourceFiles';
  1352. function SymEnumerateModules64(hProcess:THANDLE; EnumModulesCallback:TSYM_ENUMMODULES_CALLBACK64; UserContext:pointer):BOOL;stdcall;external External_library name 'SymEnumerateModules64';
  1353. function SymEnumerateSymbols64(hProcess:THANDLE; BaseOfDll:dword64; EnumSymbolsCallback:TSYM_ENUMSYMBOLS_CALLBACK64; UserContext:pointer):BOOL;stdcall;external External_library name 'SymEnumerateSymbols64';
  1354. function SymEnumerateSymbolsW64(hProcess:THANDLE; BaseOfDll:dword64; EnumSymbolsCallback:TSYM_ENUMSYMBOLS_CALLBACK64W; UserContext:pointer):BOOL;stdcall;external External_library name 'SymEnumerateSymbolsW64';
  1355. function EnumerateLoadedModules64(hProcess:THANDLE; EnumLoadedModulesCallback:TENUMLOADED_MODULES_CALLBACK64; UserContext:pointer):BOOL;stdcall;external External_library name 'EnumerateLoadedModules64';
  1356. function SymFunctionTableAccess64(hProcess:THANDLE; AddrBase:dword64):pointer;stdcall;external External_library name 'SymFunctionTableAccess64';
  1357. function SymGetModuleInfo64(hProcess:THANDLE; qwAddr:dword64; ModuleInfo:PIMAGEHLP_MODULE64):BOOL;stdcall;external External_library name 'SymGetModuleInfo64';
  1358. function SymGetModuleInfoW64(hProcess:THANDLE; qwAddr:dword64; ModuleInfo:PIMAGEHLP_MODULEW64):BOOL;stdcall;external External_library name 'SymGetModuleInfoW64';
  1359. function SymGetModuleBase64(hProcess:THANDLE; qwAddr:dword64):dword64;stdcall;external External_library name 'SymGetModuleBase64';
  1360. function SymGetSymNext64(hProcess:THANDLE; Symbol:PIMAGEHLP_SYMBOL64):BOOL;stdcall;external External_library name 'SymGetSymNext64';
  1361. function SymGetSymPrev64(hProcess:THANDLE; Symbol:PIMAGEHLP_SYMBOL64):BOOL;stdcall;external External_library name 'SymGetSymPrev64';
  1362. {$ifdef IMAGEHLP64}
  1363. function SymEnumerateModules(hProcess:THANDLE; EnumModulesCallback:TSYM_ENUMMODULES_CALLBACK64; UserContext:pointer):BOOL;stdcall;external External_library name 'SymEnumerateModules64';
  1364. function SymEnumerateSymbols(hProcess:THANDLE; BaseOfDll:dword64; EnumSymbolsCallback:TSYM_ENUMSYMBOLS_CALLBACK64; UserContext:pointer):BOOL;stdcall;external External_library name 'SymEnumerateSymbols64';
  1365. function SymEnumerateSymbolsW(hProcess:THANDLE; BaseOfDll:dword64; EnumSymbolsCallback:TSYM_ENUMSYMBOLS_CALLBACK64W; UserContext:pointer):BOOL;stdcall;external External_library name 'SymEnumerateSymbolsW64';
  1366. function EnumerateLoadedModules(hProcess:THANDLE; EnumLoadedModulesCallback:TENUMLOADED_MODULES_CALLBACK64; UserContext:pointer):BOOL;stdcall;external External_library name 'EnumerateLoadedModules64';
  1367. function SymFunctionTableAccess(hProcess:THANDLE; AddrBase:dword64):pointer;stdcall;external External_library name 'SymFunctionTableAccess64';
  1368. function SymGetModuleInfo(hProcess:THANDLE; qwAddr:dword64; ModuleInfo:PIMAGEHLP_MODULE64):BOOL;stdcall;external External_library name 'SymGetModuleInfo64';
  1369. function SymGetModuleInfoW(hProcess:THANDLE; qwAddr:dword64; ModuleInfo:PIMAGEHLP_MODULEW64):BOOL;stdcall;external External_library name 'SymGetModuleInfoW64';
  1370. function SymGetModuleBase(hProcess:THANDLE; qwAddr:dword64):dword64;stdcall;external External_library name 'SymGetModuleBase64';
  1371. function SymGetSymNext(hProcess:THANDLE; Symbol:PIMAGEHLP_SYMBOL64):BOOL;stdcall;external External_library name 'SymGetSymNext64';
  1372. function SymGetSymPrev(hProcess:THANDLE; Symbol:PIMAGEHLP_SYMBOL64):BOOL;stdcall;external External_library name 'SymGetSymPrev64';
  1373. {$ELSE}
  1374. function SymEnumerateModules(hProcess:THANDLE; EnumModulesCallback:TSYM_ENUMMODULES_CALLBACK; UserContext:pointer):BOOL;stdcall;external External_library name 'SymEnumerateModules';
  1375. function SymEnumerateSymbols(hProcess:THANDLE; BaseOfDll:dword; EnumSymbolsCallback:TSYM_ENUMSYMBOLS_CALLBACK; UserContext:pointer):BOOL;stdcall;external External_library name 'SymEnumerateSymbols';
  1376. function SymEnumerateSymbolsW(hProcess:THANDLE; BaseOfDll:dword; EnumSymbolsCallback:TSYM_ENUMSYMBOLS_CALLBACKW; UserContext:pointer):BOOL;stdcall;external External_library name 'SymEnumerateSymbolsW';
  1377. function EnumerateLoadedModules(hProcess:THANDLE; EnumLoadedModulesCallback:TENUMLOADED_MODULES_CALLBACK; UserContext:pointer):BOOL;stdcall;external External_library name 'EnumerateLoadedModules';
  1378. function SymFunctionTableAccess(hProcess:THANDLE; AddrBase:dword):pointer;stdcall;external External_library name 'SymFunctionTableAccess';
  1379. function SymGetModuleInfo(hProcess:THANDLE; dwAddr:dword; ModuleInfo:PIMAGEHLP_MODULE):BOOL;stdcall;external External_library name 'SymGetModuleInfo';
  1380. function SymGetModuleInfoW(hProcess:THANDLE; dwAddr:dword; ModuleInfo:PIMAGEHLP_MODULEW):BOOL;stdcall;external External_library name 'SymGetModuleInfoW';
  1381. function SymGetSymPrev(hProcess:THANDLE; Symbol:PIMAGEHLP_SYMBOL):BOOL;stdcall;external External_library name 'SymGetSymPrev';
  1382. function SymGetSymNext(hProcess:THANDLE; Symbol:PIMAGEHLP_SYMBOL):BOOL;stdcall;external External_library name 'SymGetSymNext';
  1383. function SymGetModuleBase(hProcess:THANDLE; dwAddr:dword):dword;stdcall;external External_library name 'SymGetModuleBase';
  1384. {$ENDIF}
  1385. function SymGetLineFromAddr64(hProcess:THANDLE; qwAddr:dword64; pdwDisplacement:PDWORD; Line64:PIMAGEHLP_LINE64):BOOL;stdcall;external External_library name 'SymGetLineFromAddr64';
  1386. function SymGetLineFromName64(hProcess:THANDLE; ModuleName:PSTR; FileName:PSTR; dwLineNumber:dword; plDisplacement:PLONG;
  1387. Line:PIMAGEHLP_LINE64):BOOL;stdcall;external External_library name 'SymGetLineFromName64';
  1388. function SymGetLineNext64(hProcess:THANDLE; Line:PIMAGEHLP_LINE64):BOOL;stdcall;external External_library name 'SymGetLineNext64';
  1389. function SymGetLinePrev64(hProcess:THANDLE; Line:PIMAGEHLP_LINE64):BOOL;stdcall;external External_library name 'SymGetLinePrev64';
  1390. function SymLoadModule64(hProcess:THANDLE; hFile:THANDLE; ImageName:PSTR; ModuleName:PSTR; BaseOfDll:dword64;
  1391. SizeOfDll:dword):dword64;stdcall;external External_library name 'SymLoadModule64';
  1392. function SymUnloadModule64(hProcess:THANDLE; BaseOfDll:dword64):BOOL;stdcall;external External_library name 'SymUnloadModule64';
  1393. function SymUnDName64(sym:PIMAGEHLP_SYMBOL64; UnDecName:PSTR; UnDecNameLength:dword):BOOL;stdcall;external External_library name 'SymUnDName64';
  1394. function SymRegisterCallback64(hProcess:THANDLE; CallbackFunction:TSYMBOL_REGISTERED_CALLBACK64; UserContext:ULONG64):BOOL;stdcall;external External_library name 'SymRegisterCallback64';
  1395. function SymRegisterFunctionEntryCallback64(hProcess:THANDLE; CallbackFunction:TSYMBOL_FUNCENTRY_CALLBACK64; UserContext:ULONG64):BOOL;stdcall;external External_library name 'SymRegisterFunctionEntryCallback64';
  1396. {$ifdef IMAGEHLP64}
  1397. function SymGetLineFromAddr(hProcess:THANDLE; qwAddr:dword64; pdwDisplacement:PDWORD; Line64:PIMAGEHLP_LINE64):BOOL;stdcall;external External_library name 'SymGetLineFromAddr64';
  1398. function SymGetLineFromName(hProcess:THANDLE; ModuleName:PSTR; FileName:PSTR; dwLineNumber:dword; plDisplacement:PLONG;
  1399. Line:PIMAGEHLP_LINE64):BOOL;stdcall;external External_library name 'SymGetLineFromName64';
  1400. function SymGetLineNext(hProcess:THANDLE; Line:PIMAGEHLP_LINE64):BOOL;stdcall;external External_library name 'SymGetLineNext64';
  1401. function SymGetLinePrev(hProcess:THANDLE; Line:PIMAGEHLP_LINE64):BOOL;stdcall;external External_library name 'SymGetLinePrev64';
  1402. function SymLoadModule(hProcess:THANDLE; hFile:THANDLE; ImageName:PSTR; ModuleName:PSTR; BaseOfDll:dword64;
  1403. SizeOfDll:dword):dword64;stdcall;external External_library name 'SymLoadModule64';
  1404. function SymUnloadModule(hProcess:THANDLE; BaseOfDll:dword64):BOOL;stdcall;external External_library name 'SymUnloadModule64';
  1405. function SymUnDName(sym:PIMAGEHLP_SYMBOL64; UnDecName:PSTR; UnDecNameLength:dword):BOOL;stdcall;external External_library name 'SymUnDName64';
  1406. function SymRegisterCallback(hProcess:THANDLE; CallbackFunction:TSYMBOL_REGISTERED_CALLBACK64; UserContext:ULONG64):BOOL;stdcall;external External_library name 'SymRegisterCallback64';
  1407. function SymRegisterFunctionEntryCallback(hProcess:THANDLE; CallbackFunction:TSYMBOL_FUNCENTRY_CALLBACK64; UserContext:ULONG64):BOOL;stdcall;external External_library name 'SymRegisterFunctionEntryCallback64';
  1408. {$else}
  1409. function SymGetLineFromAddr(hProcess:THANDLE; dwAddr:dword; pdwDisplacement:PDWORD; Line:PIMAGEHLP_LINE):BOOL;stdcall;external External_library name 'SymGetLineFromAddr';
  1410. function SymGetLineFromName(hProcess:THANDLE; ModuleName:PSTR; FileName:PSTR; dwLineNumber:dword; plDisplacement:PLONG;
  1411. Line:PIMAGEHLP_LINE):BOOL;stdcall;external External_library name 'SymGetLineFromName';
  1412. function SymGetLineNext(hProcess:THANDLE; Line:PIMAGEHLP_LINE):BOOL;stdcall;external External_library name 'SymGetLineNext';
  1413. function SymGetLinePrev(hProcess:THANDLE; Line:PIMAGEHLP_LINE):BOOL;stdcall;external External_library name 'SymGetLinePrev';
  1414. function SymLoadModule(hProcess:THANDLE; hFile:THANDLE; ImageName:PSTR; ModuleName:PSTR; BaseOfDll:dword;
  1415. SizeOfDll:dword):dword;stdcall;external External_library name 'SymLoadModule';
  1416. function SymUnloadModule(hProcess:THANDLE; BaseOfDll:dword):BOOL;stdcall;external External_library name 'SymUnloadModule';
  1417. function SymUnDName(sym:PIMAGEHLP_SYMBOL; UnDecName:PSTR; UnDecNameLength:dword):BOOL;stdcall;external External_library name 'SymUnDName';
  1418. function SymRegisterCallback(hProcess:THANDLE; CallbackFunction:TSYMBOL_REGISTERED_CALLBACK; UserContext:pointer):BOOL;stdcall;external External_library name 'SymRegisterCallback';
  1419. function SymRegisterFunctionEntryCallback(hProcess:THANDLE; CallbackFunction:TSYMBOL_FUNCENTRY_CALLBACK; UserContext:pointer):BOOL;stdcall;external External_library name 'SymRegisterFunctionEntryCallback';
  1420. {$endif}
  1421. function SymEnumLines(hProcess:THANDLE; Base:ULONG64; Obj:LPCSTR; _File:LPCSTR; EnumLinesCallback:TSYM_ENUMLINES_CALLBACK;
  1422. UserContext:pointer):BOOL;stdcall;external External_library name 'SymEnumLines';
  1423. function SymMatchFileName(FileName:PSTR; Match:PSTR; FileNameStop:PPSTR; MatchStop:PPSTR):BOOL;stdcall;external External_library name 'SymMatchFileName';
  1424. function SymInitialize(hProcess:THANDLE; UserSearchPath:PSTR; fInvadeProcess:BOOL):BOOL;stdcall;external External_library name 'SymInitialize';
  1425. function SymGetSearchPath(hProcess:THANDLE; SearchPath:PSTR; SearchPathLength:dword):BOOL;stdcall;external External_library name 'SymGetSearchPath';
  1426. function SymSetSearchPath(hProcess:THANDLE; SearchPath:PSTR):BOOL;stdcall;external External_library name 'SymSetSearchPath';
  1427. function SymLoadModuleEx(hProcess:THANDLE; hFile:THANDLE; ImageName:PSTR; ModuleName:PSTR; BaseOfDll:dword64;
  1428. DllSize:dword; Data:PMODLOAD_DATA; Flags:dword):dword64;stdcall;external External_library name 'SymLoadModuleEx';
  1429. function SymSetContext(hProcess:THANDLE; StackFrame:PIMAGEHLP_STACK_FRAME; Context:PIMAGEHLP_CONTEXT):BOOL;stdcall;external External_library name 'SymSetContext';
  1430. function SymFromAddr(hProcess:THANDLE; Address:dword64; Displacement:PDWORD64; Symbol:PSYMBOL_INFO):BOOL;stdcall;external External_library name 'SymFromAddr';
  1431. function SymFromToken(hProcess:THANDLE; Base:dword64; Token:dword; Symbol:PSYMBOL_INFO):BOOL;stdcall;external External_library name 'SymFromToken';
  1432. function SymFromName(hProcess:THANDLE; Name:lpstr; Symbol:PSYMBOL_INFO):BOOL;stdcall;external External_library name 'SymFromName';
  1433. function SymEnumSymbols(hProcess:THANDLE; BaseOfDll:ULONG64; Mask:LPCSTR; EnumSymbolsCallback:TSYM_ENUMERATESYMBOLS_CALLBACK; UserContext:pointer):BOOL;stdcall;external External_library name 'SymEnumSymbols';
  1434. function SymEnumSymbolsForAddr(hProcess:THANDLE; Address:dword64; EnumSymbolsCallback:TSYM_ENUMERATESYMBOLS_CALLBACK; UserContext:pointer):BOOL;stdcall;external External_library name 'SymEnumSymbolsForAddr';
  1435. function SymGetTypeInfo(hProcess:THANDLE; ModBase:dword64; TypeId:ULONG; GetType:TIMAGEHLP_SYMBOL_TYPE_INFO; pInfo:pointer):BOOL;stdcall;external External_library name 'SymGetTypeInfo';
  1436. function SymEnumTypes(hProcess:THANDLE; BaseOfDll:ULONG64; EnumSymbolsCallback:TSYM_ENUMERATESYMBOLS_CALLBACK; UserContext:pointer):BOOL;stdcall;external External_library name 'SymEnumTypes';
  1437. function SymGetTypeFromName(hProcess:THANDLE; BaseOfDll:ULONG64; Name:lpstr; Symbol:PSYMBOL_INFO):BOOL;stdcall;external External_library name 'SymGetTypeFromName';
  1438. function SymAddSymbol(hProcess:THANDLE; BaseOfDll:ULONG64; Name:LPCSTR; Address:dword64; Size:dword;
  1439. Flags:dword):BOOL;stdcall;external External_library name 'SymAddSymbol';
  1440. function SymDeleteSymbol(hProcess:THANDLE; BaseOfDll:ULONG64; Name:LPCSTR; Address:dword64; Flags:dword):BOOL;stdcall;external External_library name 'SymDeleteSymbol';
  1441. function DbgHelpCreateUserDump(FileName:lpstr; Callback:TDBGHELP_CREATE_USER_DUMP_CALLBACK; UserData:pointer):BOOL;stdcall;external External_library name 'DbgHelpCreateUserDump';
  1442. function DbgHelpCreateUserDumpW(FileName:LPWSTR; Callback:TDBGHELP_CREATE_USER_DUMP_CALLBACK; UserData:pointer):BOOL;stdcall;external External_library name 'DbgHelpCreateUserDumpW';
  1443. function SymGetSymFromAddr64(hProcess:THANDLE; qwAddr:dword64; pdwDisplacement:PDWORD64; Symbol:PIMAGEHLP_SYMBOL64):BOOL;stdcall;external External_library name 'SymGetSymFromAddr64';
  1444. function SymGetSymFromName64(hProcess:THANDLE; Name:PSTR; Symbol:PIMAGEHLP_SYMBOL64):BOOL;stdcall;external External_library name 'SymGetSymFromName64';
  1445. {$ifdef IMAGEHLP64}
  1446. {$else}
  1447. function SymGetSymFromAddr(hProcess:THANDLE; dwAddr:dword; pdwDisplacement:PDWORD; Symbol:PIMAGEHLP_SYMBOL):BOOL;stdcall;external External_library name 'SymGetSymFromAddr';
  1448. function SymGetSymFromName(hProcess:THANDLE; Name:PSTR; Symbol:PIMAGEHLP_SYMBOL):BOOL;stdcall;external External_library name 'SymGetSymFromName';
  1449. {$endif}
  1450. function FindFileInPath(hprocess:THANDLE; SearchPath:lpstr; FileName:lpstr; id:pointer; two:dword;
  1451. three:dword; flags:dword; FilePath:lpstr):BOOL;stdcall;external External_library name 'FindFileInPath';
  1452. function FindFileInSearchPath(hprocess:THANDLE; SearchPath:lpstr; FileName:lpstr; one:dword; two:dword;
  1453. three:dword; FilePath:lpstr):BOOL;stdcall;external External_library name 'FindFileInSearchPath';
  1454. function SymEnumSym(hProcess:THANDLE; BaseOfDll:ULONG64; EnumSymbolsCallback:TSYM_ENUMERATESYMBOLS_CALLBACK; UserContext:pointer):BOOL;stdcall;external External_library name 'SymEnumSym';
  1455. function MiniDumpWriteDump(hProcess:THANDLE; ProcessId:dword; hFile:THANDLE; DumpType:TMINIDUMP_TYPE; ExceptionParam:PMINIDUMP_EXCEPTION_INFORMATION;
  1456. UserStreamParam:PMINIDUMP_USER_STREAM_INFORMATION; CallbackParam:TMINIDUMP_CALLBACK_INFORMATION):BOOL;stdcall;external External_library name 'MiniDumpWriteDump';
  1457. function MiniDumpReadDumpStream(BaseOfDump:pointer; StreamNumber:ULONG; Dir:PPMINIDUMP_DIRECTORY; StreamPointer:PPOINTER; StreamSize:PULONG):BOOL;stdcall;external External_library name 'MiniDumpReadDumpStream';
  1458. function RVA_TO_ADDR(Mapping:ULONG_PTR;RVA:CARDINAL):POINTER; inline;
  1459. procedure Address64To32(a64: LPADDRESS64 ;a32:LPADDRESS); inline;
  1460. Procedure Address32To64(a32: LPADDRESS ;a64:LPADDRESS64); inline;
  1461. procedure KdHelp32To64(p32:PKDHELP;p64:PKDHELP64); inline;
  1462. implementation
  1463. function RVA_TO_ADDR(Mapping:ULONG_PTR;RVA:CARDINAL):POINTER;
  1464. begin
  1465. rva_to_addr:=pointer(ulong_ptr(mapping)+rva);
  1466. end;
  1467. Procedure Address32To64(a32: LPADDRESS ;a64:LPADDRESS64);
  1468. begin
  1469. a64^.Offset := ULONG64(LONG64(LONG(a32^.Offset))); // I assume these multiple typecasts are to avoid sign problems?
  1470. a64^.Segment := a32^.Segment;
  1471. a64^.Mode := a32^.Mode;
  1472. end;
  1473. procedure Address64To32(a64: LPADDRESS64 ;a32:LPADDRESS);
  1474. begin
  1475. a32^.Offset := ULONG(a64^.Offset);
  1476. a32^.Segment:= a64^.Segment;
  1477. a32^.Mode := a64^.Mode;
  1478. end;
  1479. procedure KdHelp32To64(p32:PKDHELP;p64:PKDHELP64);
  1480. begin
  1481. p64^.Thread := p32^.Thread;
  1482. p64^.ThCallbackStack := p32^.ThCallbackStack;
  1483. p64^.NextCallback := p32^.NextCallback;
  1484. p64^.FramePointer := p32^.FramePointer;
  1485. p64^.KiCallUserMode := p32^.KiCallUserMode;
  1486. p64^.KeUserCallbackDispatcher := p32^.KeUserCallbackDispatcher;
  1487. p64^.SystemRangeStart := p32^.SystemRangeStart;
  1488. end;
  1489. end.