dbghelp.h 29 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830
  1. /*
  2. * Declarations for DBGHELP
  3. *
  4. * Copyright (C) 2003 Eric Pouech
  5. *
  6. * This library is free software; you can redistribute it and/or
  7. * modify it under the terms of the GNU Lesser General Public
  8. * License as published by the Free Software Foundation; either
  9. * version 2.1 of the License, or (at your option) any later version.
  10. *
  11. * This library is distributed in the hope that it will be useful,
  12. * but WITHOUT ANY WARRANTY; without even the implied warranty of
  13. * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
  14. * Lesser General Public License for more details.
  15. *
  16. * You should have received a copy of the GNU Lesser General Public
  17. * License along with this library; if not, write to the Free Software
  18. * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
  19. */
  20. #ifndef __WINE_DBGHELP_H
  21. #define __WINE_DBGHELP_H
  22. #ifdef __cplusplus
  23. extern "C" {
  24. #endif /* defined(__cplusplus) */
  25. typedef struct _LOADED_IMAGE
  26. {
  27. LPSTR ModuleName;
  28. HANDLE hFile;
  29. PUCHAR MappedAddress;
  30. PIMAGE_NT_HEADERS FileHeader;
  31. PIMAGE_SECTION_HEADER LastRvaSection;
  32. ULONG NumberOfSections;
  33. PIMAGE_SECTION_HEADER Sections;
  34. ULONG Characteristics;
  35. BOOLEAN fSystemImage;
  36. BOOLEAN fDOSImage;
  37. LIST_ENTRY Links;
  38. ULONG SizeOfImage;
  39. } LOADED_IMAGE, *PLOADED_IMAGE;
  40. /*************************
  41. * IMAGEHLP equiv *
  42. *************************/
  43. typedef enum
  44. {
  45. AddrMode1616,
  46. AddrMode1632,
  47. AddrModeReal,
  48. AddrModeFlat
  49. } ADDRESS_MODE;
  50. typedef struct _tagADDRESS
  51. {
  52. DWORD Offset;
  53. WORD Segment;
  54. ADDRESS_MODE Mode;
  55. } ADDRESS, *LPADDRESS;
  56. #define SYMF_OMAP_GENERATED 0x00000001
  57. #define SYMF_OMAP_MODIFIED 0x00000002
  58. #define SYMF_USER_GENERATED 0x00000004
  59. #define SYMF_REGISTER 0x00000008
  60. #define SYMF_REGREL 0x00000010
  61. #define SYMF_FRAMEREL 0x00000020
  62. #define SYMF_PARAMETER 0x00000040
  63. #define SYMF_LOCAL 0x00000080
  64. #define SYMF_CONSTANT 0x00000100
  65. #define SYMF_EXPORT 0x00000200
  66. #define SYMF_FORWARDER 0x00000400
  67. #define SYMF_FUNCTION 0x00000800
  68. #define SYMF_VIRTUAL 0x00001000
  69. #define SYMF_THUNK 0x00002000
  70. #define SYMF_TLSREL 0x00004000
  71. typedef enum
  72. {
  73. SymNone = 0,
  74. SymCoff,
  75. SymCv,
  76. SymPdb,
  77. SymExport,
  78. SymDeferred,
  79. SymSym,
  80. SymDia,
  81. NumSymTypes
  82. } SYM_TYPE;
  83. typedef struct _IMAGEHLP_SYMBOL
  84. {
  85. DWORD SizeOfStruct;
  86. DWORD Address;
  87. DWORD Size;
  88. DWORD Flags;
  89. DWORD MaxNameLength;
  90. CHAR Name[1];
  91. } IMAGEHLP_SYMBOL, *PIMAGEHLP_SYMBOL;
  92. typedef struct _IMAGEHLP_MODULE
  93. {
  94. DWORD SizeOfStruct;
  95. DWORD BaseOfImage;
  96. DWORD ImageSize;
  97. DWORD TimeDateStamp;
  98. DWORD CheckSum;
  99. DWORD NumSyms;
  100. SYM_TYPE SymType;
  101. CHAR ModuleName[32];
  102. CHAR ImageName[256];
  103. CHAR LoadedImageName[256];
  104. } IMAGEHLP_MODULE, *PIMAGEHLP_MODULE;
  105. typedef struct _IMAGEHLP_MODULEW {
  106. DWORD SizeOfStruct;
  107. DWORD BaseOfImage;
  108. DWORD ImageSize;
  109. DWORD TimeDateStamp;
  110. DWORD CheckSum;
  111. DWORD NumSyms;
  112. SYM_TYPE SymType;
  113. WCHAR ModuleName[32];
  114. WCHAR ImageName[256];
  115. WCHAR LoadedImageName[256];
  116. } IMAGEHLP_MODULEW, *PIMAGEHLP_MODULEW;
  117. typedef struct _IMAGEHLP_LINE
  118. {
  119. DWORD SizeOfStruct;
  120. PVOID Key;
  121. DWORD LineNumber;
  122. PCHAR FileName;
  123. DWORD Address;
  124. } IMAGEHLP_LINE, *PIMAGEHLP_LINE;
  125. typedef struct _SOURCEFILE
  126. {
  127. DWORD64 ModBase;
  128. PCHAR FileName;
  129. } SOURCEFILE, *PSOURCEFILE;
  130. #define CBA_DEFERRED_SYMBOL_LOAD_START 0x00000001
  131. #define CBA_DEFERRED_SYMBOL_LOAD_COMPLETE 0x00000002
  132. #define CBA_DEFERRED_SYMBOL_LOAD_FAILURE 0x00000003
  133. #define CBA_SYMBOLS_UNLOADED 0x00000004
  134. #define CBA_DUPLICATE_SYMBOL 0x00000005
  135. #define CBA_READ_MEMORY 0x00000006
  136. #define CBA_DEFERRED_SYMBOL_LOAD_CANCEL 0x00000007
  137. #define CBA_SET_OPTIONS 0x00000008
  138. #define CBA_EVENT 0x00000010
  139. #define CBA_DEBUG_INFO 0x10000000
  140. typedef struct _IMAGEHLP_CBA_READ_MEMORY
  141. {
  142. DWORD64 addr;
  143. PVOID buf;
  144. DWORD bytes;
  145. DWORD *bytesread;
  146. } IMAGEHLP_CBA_READ_MEMORY, *PIMAGEHLP_CBA_READ_MEMORY;
  147. enum
  148. {
  149. sevInfo = 0,
  150. sevProblem,
  151. sevAttn,
  152. sevFatal,
  153. sevMax
  154. };
  155. typedef struct _IMAGEHLP_CBA_EVENT
  156. {
  157. DWORD severity;
  158. DWORD code;
  159. PCHAR desc;
  160. PVOID object;
  161. } IMAGEHLP_CBA_EVENT, *PIMAGEHLP_CBA_EVENT;
  162. typedef struct _IMAGEHLP_DEFERRED_SYMBOL_LOAD
  163. {
  164. DWORD SizeOfStruct;
  165. DWORD BaseOfImage;
  166. DWORD CheckSum;
  167. DWORD TimeDateStamp;
  168. CHAR FileName[MAX_PATH];
  169. BOOLEAN Reparse;
  170. } IMAGEHLP_DEFERRED_SYMBOL_LOAD, *PIMAGEHLP_DEFERRED_SYMBOL_LOAD;
  171. typedef struct _IMAGEHLP_DUPLICATE_SYMBOL
  172. {
  173. DWORD SizeOfStruct;
  174. DWORD NumberOfDups;
  175. PIMAGEHLP_SYMBOL Symbol;
  176. DWORD SelectedSymbol;
  177. } IMAGEHLP_DUPLICATE_SYMBOL, *PIMAGEHLP_DUPLICATE_SYMBOL;
  178. #define SYMOPT_CASE_INSENSITIVE 0x00000001
  179. #define SYMOPT_UNDNAME 0x00000002
  180. #define SYMOPT_DEFERRED_LOADS 0x00000004
  181. #define SYMOPT_NO_CPP 0x00000008
  182. #define SYMOPT_LOAD_LINES 0x00000010
  183. #define SYMOPT_OMAP_FIND_NEAREST 0x00000020
  184. #define SYMOPT_LOAD_ANYTHING 0x00000040
  185. #define SYMOPT_IGNORE_CVREC 0x00000080
  186. #define SYMOPT_NO_UNQUALIFIED_LOADS 0x00000100
  187. #define SYMOPT_FAIL_CRITICAL_ERRORS 0x00000200
  188. #define SYMOPT_EXACT_SYMBOLS 0x00000400
  189. #define SYMOPT_WILD_UNDERSCORE 0x00000800
  190. #define SYMOPT_USE_DEFAULTS 0x00001000
  191. #define SYMOPT_INCLUDE_32BIT_MODULES 0x00002000
  192. #define SYMOPT_PUBLICS_ONLY 0x00004000
  193. #define SYMOPT_NO_PUBLICS 0x00008000
  194. #define SYMOPT_AUTO_PUBLICS 0x00010000
  195. #define SYMOPT_NO_IMAGE_SEARCH 0x00020000
  196. #define SYMOPT_SECURE 0x00040000
  197. #define SYMOPT_NO_PROMPTS 0x00080000
  198. #define SYMOPT_DEBUG 0x80000000
  199. typedef struct _IMAGEHLP_STACK_FRAME
  200. {
  201. ULONG64 InstructionOffset;
  202. ULONG64 ReturnOffset;
  203. ULONG64 FrameOffset;
  204. ULONG64 StackOffset;
  205. ULONG64 BackingStoreOffset;
  206. ULONG64 FuncTableEntry;
  207. ULONG64 Params[4];
  208. ULONG64 Reserved[5];
  209. BOOL Virtual;
  210. ULONG Reserved2;
  211. } IMAGEHLP_STACK_FRAME, *PIMAGEHLP_STACK_FRAME;
  212. typedef VOID IMAGEHLP_CONTEXT, *PIMAGEHLP_CONTEXT;
  213. #define DBHHEADER_DEBUGDIRS 0x1
  214. typedef struct _DBGHELP_MODLOAD_DATA
  215. {
  216. DWORD ssize;
  217. DWORD ssig;
  218. PVOID data;
  219. DWORD size;
  220. DWORD flags;
  221. } MODLOAD_DATA, *PMODLOAD_DATA;
  222. /*************************
  223. * MiniDUMP *
  224. *************************/
  225. /* DebugHelp */
  226. #define MINIDUMP_SIGNATURE 0x4D444D50 /* 'PMDM' */
  227. #define MINIDUMP_VERSION (42899)
  228. typedef DWORD RVA;
  229. typedef ULONG64 RVA64;
  230. typedef enum _MINIDUMP_TYPE
  231. {
  232. MiniDumpNormal = 0x0000,
  233. MiniDumpWithDataSegs = 0x0001,
  234. MiniDumpWithFullMemory = 0x0002,
  235. MiniDumpWithHandleData = 0x0004,
  236. MiniDumpFilterMemory = 0x0008,
  237. MiniDumpScanMemory = 0x0010
  238. } MINIDUMP_TYPE;
  239. typedef enum _MINIDUMP_CALLBACK_TYPE
  240. {
  241. ModuleCallback,
  242. ThreadCallback,
  243. ThreadExCallback,
  244. IncludeThreadCallback,
  245. IncludeModuleCallback,
  246. } MINIDUMP_CALLBACK_TYPE;
  247. typedef struct _MINIDUMP_THREAD_CALLBACK
  248. {
  249. ULONG ThreadId;
  250. HANDLE ThreadHandle;
  251. CONTEXT Context;
  252. ULONG SizeOfContext;
  253. ULONGLONG StackBase;
  254. ULONG64 StackEnd;
  255. } MINIDUMP_THREAD_CALLBACK, *PMINIDUMP_THREAD_CALLBACK;
  256. typedef struct _MINIDUMP_THREAD_EX_CALLBACK
  257. {
  258. ULONG ThreadId;
  259. HANDLE ThreadHandle;
  260. CONTEXT Context;
  261. ULONG SizeOfContext;
  262. ULONGLONG StackBase;
  263. ULONGLONG StackEnd;
  264. ULONGLONG BackingStoreBase;
  265. ULONGLONG BackingStoreEnd;
  266. } MINIDUMP_THREAD_EX_CALLBACK, *PMINIDUMP_THREAD_EX_CALLBACK;
  267. typedef struct _MINIDUMP_INCLUDE_THREAD_CALLBACK
  268. {
  269. ULONG ThreadId;
  270. } MINIDUMP_INCLUDE_THREAD_CALLBACK, *PMINIDUMP_INCLUDE_THREAD_CALLBACK;
  271. typedef enum _THREAD_WRITE_FLAGS
  272. {
  273. ThreadWriteThread = 0x0001,
  274. ThreadWriteStack = 0x0002,
  275. ThreadWriteContext = 0x0004,
  276. ThreadWriteBackingStore = 0x0008,
  277. ThreadWriteInstructionWindow = 0x0010
  278. } THREAD_WRITE_FLAGS;
  279. typedef struct _MINIDUMP_MODULE_CALLBACK
  280. {
  281. PWCHAR FullPath;
  282. ULONGLONG BaseOfImage;
  283. ULONG SizeOfImage;
  284. ULONG CheckSum;
  285. ULONG TimeDateStamp;
  286. VS_FIXEDFILEINFO VersionInfo;
  287. PVOID CvRecord;
  288. ULONG SizeOfCvRecord;
  289. PVOID MiscRecord;
  290. ULONG SizeOfMiscRecord;
  291. } MINIDUMP_MODULE_CALLBACK, *PMINIDUMP_MODULE_CALLBACK;
  292. typedef struct _MINIDUMP_INCLUDE_MODULE_CALLBACK
  293. {
  294. ULONG64 BaseOfImage;
  295. } MINIDUMP_INCLUDE_MODULE_CALLBACK, *PMINIDUMP_INCLUDE_MODULE_CALLBACK;
  296. typedef enum _MODULE_WRITE_FLAGS
  297. {
  298. ModuleWriteModule = 0x0001,
  299. ModuleWriteDataSeg = 0x0002,
  300. ModuleWriteMiscRecord = 0x0004,
  301. ModuleWriteCvRecord = 0x0008,
  302. ModuleReferencedByMemory = 0x0010
  303. } MODULE_WRITE_FLAGS;
  304. typedef struct _MINIDUMP_CALLBACK_INPUT
  305. {
  306. ULONG ProcessId;
  307. HANDLE ProcessHandle;
  308. ULONG CallbackType;
  309. union
  310. {
  311. MINIDUMP_THREAD_CALLBACK Thread;
  312. MINIDUMP_THREAD_EX_CALLBACK ThreadEx;
  313. MINIDUMP_MODULE_CALLBACK Module;
  314. MINIDUMP_INCLUDE_THREAD_CALLBACK IncludeThread;
  315. MINIDUMP_INCLUDE_MODULE_CALLBACK IncludeModule;
  316. } u;
  317. } MINIDUMP_CALLBACK_INPUT, *PMINIDUMP_CALLBACK_INPUT;
  318. typedef struct _MINIDUMP_CALLBACK_OUTPUT
  319. {
  320. union
  321. {
  322. ULONG ModuleWriteFlags;
  323. ULONG ThreadWriteFlags;
  324. } u;
  325. } MINIDUMP_CALLBACK_OUTPUT, *PMINIDUMP_CALLBACK_OUTPUT;
  326. typedef BOOL (WINAPI* MINIDUMP_CALLBACK_ROUTINE)(PVOID CallbackParam,
  327. const PMINIDUMP_CALLBACK_INPUT CallbackInput,
  328. PMINIDUMP_CALLBACK_OUTPUT CallbackOutput);
  329. typedef struct _MINIDUMP_CALLBACK_INFORMATION
  330. {
  331. MINIDUMP_CALLBACK_ROUTINE CallbackRoutine;
  332. void* CallbackParam;
  333. } MINIDUMP_CALLBACK_INFORMATION, *PMINIDUMP_CALLBACK_INFORMATION;
  334. typedef struct _MINIDUMP_LOCATION_DESCRIPTOR
  335. {
  336. ULONG DataSize;
  337. RVA Rva;
  338. } MINIDUMP_LOCATION_DESCRIPTOR;
  339. typedef struct _MINIDUMP_DIRECTORY
  340. {
  341. ULONG StreamType;
  342. MINIDUMP_LOCATION_DESCRIPTOR Location;
  343. } MINIDUMP_DIRECTORY, *PMINIDUMP_DIRECTORY;
  344. typedef struct _MINIDUMP_EXCEPTION
  345. {
  346. ULONG ExceptionCode;
  347. ULONG ExceptionFlags;
  348. ULONGLONG ExceptionRecord;
  349. ULONGLONG ExceptionAddress;
  350. ULONG NumberParameters;
  351. ULONG __unusedAlignment;
  352. ULONGLONG ExceptionInformation[EXCEPTION_MAXIMUM_PARAMETERS];
  353. } MINIDUMP_EXCEPTION, *PMINIDUMP_EXCEPTION;
  354. typedef struct _MINIDUMP_EXCEPTION_INFORMATION
  355. {
  356. DWORD ThreadId;
  357. PEXCEPTION_POINTERS ExceptionPointers;
  358. BOOL ClientPointers;
  359. } MINIDUMP_EXCEPTION_INFORMATION, *PMINIDUMP_EXCEPTION_INFORMATION;
  360. typedef struct MINIDUMP_EXCEPTION_STREAM
  361. {
  362. ULONG ThreadId;
  363. ULONG __alignment;
  364. MINIDUMP_EXCEPTION ExceptionRecord;
  365. MINIDUMP_LOCATION_DESCRIPTOR ThreadContext;
  366. } MINIDUMP_EXCEPTION_STREAM, *PMINIDUMP_EXCEPTION_STREAM;
  367. typedef struct _MINIDUMP_HEADER
  368. {
  369. DWORD Signature;
  370. DWORD Version;
  371. DWORD NumberOfStreams;
  372. RVA StreamDirectoryRva;
  373. DWORD CheckSum;
  374. union
  375. {
  376. DWORD Reserved;
  377. DWORD TimeDateStamp;
  378. } u;
  379. ULONGLONG Flags;
  380. } MINIDUMP_HEADER, *PMINIDUMP_HEADER;
  381. typedef struct _MINIDUMP_MEMORY_DESCRIPTOR
  382. {
  383. ULONGLONG StartOfMemoryRange;
  384. MINIDUMP_LOCATION_DESCRIPTOR Memory;
  385. } MINIDUMP_MEMORY_DESCRIPTOR, *PMINIDUMP_MEMORY_DESCRIPTOR;
  386. typedef struct _MINIDUMP_MODULE
  387. {
  388. ULONGLONG BaseOfImage;
  389. ULONG SizeOfImage;
  390. ULONG CheckSum;
  391. ULONG TimeDateStamp;
  392. RVA ModuleNameRva;
  393. VS_FIXEDFILEINFO VersionInfo;
  394. MINIDUMP_LOCATION_DESCRIPTOR CvRecord;
  395. MINIDUMP_LOCATION_DESCRIPTOR MiscRecord;
  396. ULONGLONG Reserved0;
  397. ULONGLONG Reserved1;
  398. } MINIDUMP_MODULE, *PMINIDUMP_MODULE;
  399. typedef struct _MINIDUMP_MODULE_LIST
  400. {
  401. ULONG NumberOfModules;
  402. MINIDUMP_MODULE Modules[1]; /* FIXME: 0-sized array not supported */
  403. } MINIDUMP_MODULE_LIST, *PMINIDUMP_MODULE_LIST;
  404. typedef struct _MINIDUMP_USER_STREAM
  405. {
  406. ULONG Type;
  407. ULONG BufferSize;
  408. void* Buffer;
  409. } MINIDUMP_USER_STREAM, *PMINIDUMP_USER_STREAM;
  410. typedef struct _MINIDUMP_USER_STREAM_INFORMATION
  411. {
  412. ULONG UserStreamCount;
  413. PMINIDUMP_USER_STREAM UserStreamArray;
  414. } MINIDUMP_USER_STREAM_INFORMATION, *PMINIDUMP_USER_STREAM_INFORMATION;
  415. typedef enum _MINIDUMP_STREAM_TYPE
  416. {
  417. UnusedStream = 0,
  418. ReservedStream0 = 1,
  419. ReservedStream1 = 2,
  420. ThreadListStream = 3,
  421. ModuleListStream = 4,
  422. MemoryListStream = 5,
  423. ExceptionStream = 6,
  424. SystemInfoStream = 7,
  425. ThreadExListStream = 8,
  426. Memory64ListStream = 9,
  427. CommentStreamA = 10,
  428. CommentStreamW = 11,
  429. HandleDataStream = 12,
  430. FunctionTableStream = 13,
  431. LastReservedStream = 0xffff
  432. } MINIDUMP_STREAM_TYPE;
  433. typedef struct _MINIDUMP_SYSTEM_INFO
  434. {
  435. USHORT ProcessorArchitecture;
  436. USHORT ProcessorLevel;
  437. USHORT ProcessorRevision;
  438. USHORT Reserved0;
  439. ULONG MajorVersion;
  440. ULONG MinorVersion;
  441. ULONG BuildNumber;
  442. ULONG PlatformId;
  443. RVA CSDVersionRva;
  444. ULONG Reserved1;
  445. union _CPU_INFORMATION
  446. {
  447. struct
  448. {
  449. ULONG VendorId[3];
  450. ULONG VersionInformation;
  451. ULONG FeatureInformation;
  452. ULONG AMDExtendedCpuFeatures;
  453. } X86CpuInfo;
  454. struct
  455. {
  456. ULONGLONG ProcessorFeatures[2];
  457. } OtherCpuInfo;
  458. } Cpu;
  459. } MINIDUMP_SYSTEM_INFO, *PMINIDUMP_SYSTEM_INFO;
  460. typedef struct _MINIDUMP_THREAD
  461. {
  462. ULONG ThreadId;
  463. ULONG SuspendCount;
  464. ULONG PriorityClass;
  465. ULONG Priority;
  466. ULONGLONG Teb;
  467. MINIDUMP_MEMORY_DESCRIPTOR Stack;
  468. MINIDUMP_LOCATION_DESCRIPTOR ThreadContext;
  469. } MINIDUMP_THREAD, *PMINIDUMP_THREAD;
  470. typedef struct _MINIDUMP_THREAD_LIST
  471. {
  472. ULONG NumberOfThreads;
  473. MINIDUMP_THREAD Threads[1]; /* FIXME: no support of 0 sized array */
  474. } MINIDUMP_THREAD_LIST, *PMINIDUMP_THREAD_LIST;
  475. BOOL WINAPI MiniDumpWriteDump(HANDLE,DWORD,HANDLE,MINIDUMP_TYPE,const PMINIDUMP_EXCEPTION_INFORMATION,
  476. const PMINIDUMP_USER_STREAM_INFORMATION,const PMINIDUMP_CALLBACK_INFORMATION);
  477. BOOL WINAPI MiniDumpReadDumpStream(PVOID,ULONG,PMINIDUMP_DIRECTORY*,PVOID*,ULONG*);
  478. /*************************
  479. * MODULE handling *
  480. *************************/
  481. typedef BOOL (CALLBACK *PENUMLOADED_MODULES_CALLBACK)(PSTR, DWORD, ULONG, PVOID);
  482. BOOL WINAPI EnumerateLoadedModules(HANDLE, PENUMLOADED_MODULES_CALLBACK, PVOID);
  483. typedef BOOL (CALLBACK *PSYM_ENUMMODULES_CALLBACK)(PSTR, DWORD, PVOID);
  484. BOOL WINAPI SymEnumerateModules(HANDLE, PSYM_ENUMMODULES_CALLBACK, PVOID);
  485. BOOL WINAPI SymGetModuleInfo(HANDLE, DWORD, PIMAGEHLP_MODULE);
  486. BOOL WINAPI SymGetModuleInfoW(HANDLE, DWORD, PIMAGEHLP_MODULEW);
  487. DWORD WINAPI SymGetModuleBase(HANDLE, DWORD);
  488. DWORD WINAPI SymLoadModule(HANDLE, HANDLE, PSTR, PSTR, DWORD, DWORD);
  489. DWORD64 WINAPI SymLoadModuleEx(HANDLE, HANDLE, PSTR, PSTR, DWORD64, DWORD,
  490. PMODLOAD_DATA, DWORD);
  491. BOOL WINAPI SymUnloadModule(HANDLE, DWORD);
  492. /*************************
  493. * Symbol Handling *
  494. *************************/
  495. #define IMAGEHLP_SYMBOL_INFO_VALUEPRESENT 1
  496. #define IMAGEHLP_SYMBOL_INFO_REGISTER SYMF_REGISTER /* 0x08 */
  497. #define IMAGEHLP_SYMBOL_INFO_REGRELATIVE SYMF_REGREL /* 0x10 */
  498. #define IMAGEHLP_SYMBOL_INFO_FRAMERELATIVE SYMF_FRAMEREL /* 0x20 */
  499. #define IMAGEHLP_SYMBOL_INFO_PARAMETER SYMF_PARAMETER /* 0x40 */
  500. #define IMAGEHLP_SYMBOL_INFO_LOCAL SYMF_LOCAL /* 0x80 */
  501. #define IMAGEHLP_SYMBOL_INFO_CONSTANT SYMF_CONSTANT /* 0x100 */
  502. #define IMAGEHLP_SYMBOL_FUNCTION SYMF_FUNCTION /* 0x800 */
  503. #define SYMFLAG_VALUEPRESENT 0x00000001
  504. #define SYMFLAG_REGISTER 0x00000008
  505. #define SYMFLAG_REGREL 0x00000010
  506. #define SYMFLAG_FRAMEREL 0x00000020
  507. #define SYMFLAG_PARAMETER 0x00000040
  508. #define SYMFLAG_LOCAL 0x00000080
  509. #define SYMFLAG_CONSTANT 0x00000100
  510. #define SYMFLAG_EXPORT 0x00000200
  511. #define SYMFLAG_FORWARDER 0x00000400
  512. #define SYMFLAG_FUNCTION 0x00000800
  513. #define SYMFLAG_VIRTUAL 0x00001000
  514. #define SYMFLAG_THUNK 0x00002000
  515. #define SYMFLAG_TLSREL 0x00004000
  516. typedef struct _SYMBOL_INFO
  517. {
  518. ULONG SizeOfStruct;
  519. ULONG TypeIndex;
  520. ULONG64 Reserved[2];
  521. ULONG info; /* sdk states info, while MSDN says it's Index... */
  522. ULONG Size;
  523. ULONG64 ModBase;
  524. ULONG Flags;
  525. ULONG64 Value;
  526. ULONG64 Address;
  527. ULONG Register;
  528. ULONG Scope;
  529. ULONG Tag;
  530. ULONG NameLen;
  531. ULONG MaxNameLen;
  532. CHAR Name[1];
  533. } SYMBOL_INFO, *PSYMBOL_INFO;
  534. typedef enum _IMAGEHLP_SYMBOL_TYPE_INFO
  535. {
  536. TI_GET_SYMTAG,
  537. TI_GET_SYMNAME,
  538. TI_GET_LENGTH,
  539. TI_GET_TYPE,
  540. TI_GET_TYPEID,
  541. TI_GET_BASETYPE,
  542. TI_GET_ARRAYINDEXTYPEID,
  543. TI_FINDCHILDREN,
  544. TI_GET_DATAKIND,
  545. TI_GET_ADDRESSOFFSET,
  546. TI_GET_OFFSET,
  547. TI_GET_VALUE,
  548. TI_GET_COUNT,
  549. TI_GET_CHILDRENCOUNT,
  550. TI_GET_BITPOSITION,
  551. TI_GET_VIRTUALBASECLASS,
  552. TI_GET_VIRTUALTABLESHAPEID,
  553. TI_GET_VIRTUALBASEPOINTEROFFSET,
  554. TI_GET_CLASSPARENTID,
  555. TI_GET_NESTED,
  556. TI_GET_SYMINDEX,
  557. TI_GET_LEXICALPARENT,
  558. TI_GET_ADDRESS,
  559. TI_GET_THISADJUST,
  560. TI_GET_UDTKIND,
  561. TI_IS_EQUIV_TO,
  562. TI_GET_CALLING_CONVENTION,
  563. } IMAGEHLP_SYMBOL_TYPE_INFO;
  564. typedef struct _TI_FINDCHILDREN_PARAMS
  565. {
  566. ULONG Count;
  567. ULONG Start;
  568. ULONG ChildId[1];
  569. } TI_FINDCHILDREN_PARAMS;
  570. #define UNDNAME_COMPLETE (0x0000)
  571. #define UNDNAME_NO_LEADING_UNDERSCORES (0x0001)
  572. #define UNDNAME_NO_MS_KEYWORDS (0x0002)
  573. #define UNDNAME_NO_FUNCTION_RETURNS (0x0004)
  574. #define UNDNAME_NO_ALLOCATION_MODEL (0x0008)
  575. #define UNDNAME_NO_ALLOCATION_LANGUAGE (0x0010)
  576. #define UNDNAME_NO_MS_THISTYPE (0x0020)
  577. #define UNDNAME_NO_CV_THISTYPE (0x0040)
  578. #define UNDNAME_NO_THISTYPE (0x0060)
  579. #define UNDNAME_NO_ACCESS_SPECIFIERS (0x0080)
  580. #define UNDNAME_NO_THROW_SIGNATURES (0x0100)
  581. #define UNDNAME_NO_MEMBER_TYPE (0x0200)
  582. #define UNDNAME_NO_RETURN_UDT_MODEL (0x0400)
  583. #define UNDNAME_32_BIT_DECODE (0x0800)
  584. #define UNDNAME_NAME_ONLY (0x1000)
  585. #define UNDNAME_NO_ARGUMENTS (0x2000)
  586. #define UNDNAME_NO_SPECIAL_SYMS (0x4000)
  587. BOOL WINAPI SymGetTypeInfo(HANDLE, DWORD64, ULONG, IMAGEHLP_SYMBOL_TYPE_INFO, PVOID);
  588. typedef BOOL (CALLBACK *PSYM_ENUMERATESYMBOLS_CALLBACK)(PSYMBOL_INFO, ULONG, PVOID);
  589. BOOL WINAPI SymEnumTypes(HANDLE, ULONG64, PSYM_ENUMERATESYMBOLS_CALLBACK, PVOID);
  590. BOOL WINAPI SymFromAddr(HANDLE, DWORD64, DWORD64*, SYMBOL_INFO*);
  591. BOOL WINAPI SymFromName(HANDLE, LPSTR, PSYMBOL_INFO);
  592. BOOL WINAPI SymGetSymFromAddr(HANDLE, DWORD, PDWORD, PIMAGEHLP_SYMBOL);
  593. BOOL WINAPI SymGetSymFromName(HANDLE, PSTR, PIMAGEHLP_SYMBOL);
  594. BOOL WINAPI SymGetTypeFromName(HANDLE, ULONG64, LPSTR, PSYMBOL_INFO);
  595. BOOL WINAPI SymGetSymNext(HANDLE, PIMAGEHLP_SYMBOL);
  596. BOOL WINAPI SymGetSymPrev(HANDLE, PIMAGEHLP_SYMBOL);
  597. BOOL WINAPI SymEnumSymbols(HANDLE, ULONG64, PCSTR, PSYM_ENUMERATESYMBOLS_CALLBACK,
  598. PVOID);
  599. typedef BOOL (CALLBACK *PSYM_ENUMSYMBOLS_CALLBACK)(PSTR, DWORD, ULONG, PVOID);
  600. BOOL WINAPI SymEnumerateSymbols(HANDLE, DWORD, PSYM_ENUMSYMBOLS_CALLBACK, PVOID);
  601. typedef BOOL (CALLBACK *PSYMBOL_REGISTERED_CALLBACK)(HANDLE, ULONG, PVOID, PVOID);
  602. BOOL WINAPI SymRegisterCallback(HANDLE, PSYMBOL_REGISTERED_CALLBACK, PVOID);
  603. BOOL WINAPI SymUnDName(PIMAGEHLP_SYMBOL, PSTR, DWORD);
  604. DWORD WINAPI UnDecorateSymbolName(LPCSTR, LPSTR, DWORD, DWORD);
  605. /*************************
  606. * Source Files *
  607. *************************/
  608. typedef BOOL (CALLBACK *PSYM_ENUMSOURCFILES_CALLBACK)(PSOURCEFILE, PVOID);
  609. BOOL WINAPI SymEnumSourceFiles(HANDLE, ULONG64, LPSTR, PSYM_ENUMSOURCFILES_CALLBACK,
  610. PVOID);
  611. BOOL WINAPI SymGetLineFromAddr(HANDLE, DWORD, PDWORD, PIMAGEHLP_LINE);
  612. BOOL WINAPI SymGetLinePrev(HANDLE, PIMAGEHLP_LINE);
  613. BOOL WINAPI SymGetLineNext(HANDLE, PIMAGEHLP_LINE);
  614. /*************************
  615. * File & image handling *
  616. *************************/
  617. BOOL WINAPI SymInitialize(HANDLE, PSTR, BOOL);
  618. BOOL WINAPI SymCleanup(HANDLE);
  619. HANDLE WINAPI FindDebugInfoFile(PSTR, PSTR, PSTR);
  620. typedef BOOL (CALLBACK *PFIND_DEBUG_FILE_CALLBACK)(HANDLE, PSTR, PVOID);
  621. HANDLE WINAPI FindDebugInfoFileEx(PSTR, PSTR, PSTR, PFIND_DEBUG_FILE_CALLBACK, PVOID);
  622. typedef BOOL (CALLBACK *PFINDFILEINPATHCALLBACK)(PSTR, PVOID);
  623. BOOL WINAPI SymFindFileInPath(HANDLE, LPSTR, LPSTR, PVOID, DWORD, DWORD, DWORD,
  624. LPSTR, PFINDFILEINPATHCALLBACK, PVOID);
  625. HANDLE WINAPI FindExecutableImage(PSTR, PSTR, PSTR);
  626. typedef BOOL (CALLBACK *PFIND_EXE_FILE_CALLBACK)(HANDLE, PSTR, PVOID);
  627. HANDLE WINAPI FindExecutableImageEx(PSTR, PSTR, PSTR, PFIND_EXE_FILE_CALLBACK, PVOID);
  628. PIMAGE_NT_HEADERS WINAPI ImageNtHeader(PVOID);
  629. PVOID WINAPI ImageDirectoryEntryToDataEx(PVOID, BOOLEAN, USHORT, PULONG,
  630. PIMAGE_SECTION_HEADER *);
  631. PVOID WINAPI ImageDirectoryEntryToData(PVOID, BOOLEAN, USHORT, PULONG);
  632. PIMAGE_SECTION_HEADER WINAPI ImageRvaToSection(PIMAGE_NT_HEADERS, PVOID, ULONG);
  633. PVOID WINAPI ImageRvaToVa(PIMAGE_NT_HEADERS, PVOID, ULONG, PIMAGE_SECTION_HEADER*);
  634. BOOL WINAPI SymGetSearchPath(HANDLE, PSTR, DWORD);
  635. BOOL WINAPI SymSetSearchPath(HANDLE, PSTR);
  636. DWORD WINAPI GetTimestampForLoadedLibrary(HMODULE);
  637. BOOL WINAPI MakeSureDirectoryPathExists(PCSTR);
  638. BOOL WINAPI SearchTreeForFile(PSTR, PSTR, PSTR);
  639. typedef BOOL (CALLBACK *PENUMDIRTREE_CALLBACK)(LPCSTR, PVOID);
  640. BOOL WINAPI EnumDirTree(HANDLE, PCSTR, PCSTR, LPSTR, PENUMDIRTREE_CALLBACK, void*);
  641. BOOL WINAPI SymMatchFileName(LPSTR, LPSTR, LPSTR*, LPSTR*);
  642. /*************************
  643. * Context management *
  644. *************************/
  645. BOOL WINAPI SymSetContext(HANDLE, PIMAGEHLP_STACK_FRAME, PIMAGEHLP_CONTEXT);
  646. /*************************
  647. * Stack management *
  648. *************************/
  649. typedef struct _KDHELP
  650. {
  651. DWORD Thread;
  652. DWORD ThCallbackStack;
  653. DWORD NextCallback;
  654. DWORD FramePointer;
  655. DWORD KiCallUserMode;
  656. DWORD KeUserCallbackDispatcher;
  657. DWORD SystemRangeStart;
  658. } KDHELP, *PKDHELP;
  659. typedef struct _STACKFRAME
  660. {
  661. ADDRESS AddrPC;
  662. ADDRESS AddrReturn;
  663. ADDRESS AddrFrame;
  664. ADDRESS AddrStack;
  665. PVOID FuncTableEntry;
  666. DWORD Params[4];
  667. BOOL Far;
  668. BOOL Virtual;
  669. DWORD Reserved[3];
  670. KDHELP KdHelp;
  671. ADDRESS AddrBStore;
  672. } STACKFRAME, *LPSTACKFRAME;
  673. typedef BOOL (CALLBACK *PREAD_PROCESS_MEMORY_ROUTINE)
  674. (HANDLE, LPCVOID, PVOID, DWORD, PDWORD);
  675. typedef PVOID (CALLBACK *PFUNCTION_TABLE_ACCESS_ROUTINE)(HANDLE, DWORD);
  676. typedef DWORD (CALLBACK *PGET_MODULE_BASE_ROUTINE)(HANDLE, DWORD);
  677. typedef DWORD (CALLBACK *PTRANSLATE_ADDRESS_ROUTINE)(HANDLE, HANDLE, LPADDRESS);
  678. BOOL WINAPI StackWalk(DWORD, HANDLE, HANDLE, LPSTACKFRAME, PVOID,
  679. PREAD_PROCESS_MEMORY_ROUTINE,
  680. PFUNCTION_TABLE_ACCESS_ROUTINE,
  681. PGET_MODULE_BASE_ROUTINE,
  682. PTRANSLATE_ADDRESS_ROUTINE);
  683. PVOID WINAPI SymFunctionTableAccess(HANDLE, DWORD);
  684. /*************************
  685. * Version, global stuff *
  686. *************************/
  687. typedef struct API_VERSION
  688. {
  689. USHORT MajorVersion;
  690. USHORT MinorVersion;
  691. USHORT Revision;
  692. USHORT Reserved;
  693. } API_VERSION, *LPAPI_VERSION;
  694. LPAPI_VERSION WINAPI ImagehlpApiVersion(void);
  695. LPAPI_VERSION WINAPI ImagehlpApiVersionEx(LPAPI_VERSION);
  696. typedef struct _IMAGE_DEBUG_INFORMATION
  697. {
  698. LIST_ENTRY List;
  699. DWORD ReservedSize;
  700. PVOID ReservedMappedBase;
  701. USHORT ReservedMachine;
  702. USHORT ReservedCharacteristics;
  703. DWORD ReservedCheckSum;
  704. DWORD ImageBase;
  705. DWORD SizeOfImage;
  706. DWORD ReservedNumberOfSections;
  707. PIMAGE_SECTION_HEADER ReservedSections;
  708. DWORD ReservedExportedNamesSize;
  709. PSTR ReservedExportedNames;
  710. DWORD ReservedNumberOfFunctionTableEntries;
  711. PIMAGE_FUNCTION_ENTRY ReservedFunctionTableEntries;
  712. DWORD ReservedLowestFunctionStartingAddress;
  713. DWORD ReservedHighestFunctionEndingAddress;
  714. DWORD ReservedNumberOfFpoTableEntries;
  715. PFPO_DATA ReservedFpoTableEntries;
  716. DWORD SizeOfCoffSymbols;
  717. PIMAGE_COFF_SYMBOLS_HEADER CoffSymbols;
  718. DWORD ReservedSizeOfCodeViewSymbols;
  719. PVOID ReservedCodeViewSymbols;
  720. PSTR ImageFilePath;
  721. PSTR ImageFileName;
  722. PSTR ReservedDebugFilePath;
  723. DWORD ReservedTimeDateStamp;
  724. BOOL ReservedRomImage;
  725. PIMAGE_DEBUG_DIRECTORY ReservedDebugDirectory;
  726. DWORD ReservedNumberOfDebugDirectories;
  727. DWORD ReservedOriginalFunctionTableBaseAddress;
  728. DWORD Reserved[ 2 ];
  729. } IMAGE_DEBUG_INFORMATION, *PIMAGE_DEBUG_INFORMATION;
  730. PIMAGE_DEBUG_INFORMATION WINAPI MapDebugInformation(HANDLE, PSTR, PSTR, DWORD);
  731. BOOL WINAPI UnmapDebugInformation(PIMAGE_DEBUG_INFORMATION);
  732. DWORD WINAPI SymGetOptions(void);
  733. DWORD WINAPI SymSetOptions(DWORD);
  734. #ifdef __cplusplus
  735. } /* extern "C" */
  736. #endif /* defined(__cplusplus) */
  737. #endif /* __WINE_DBGHELP_H */