blob: a5b468f099f072f29b07db632830bc0c8a1b6c45 [file] [log] [blame]
Eric Pouech6235e932003-06-26 02:06:40 +00001/*
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
21#ifndef __WINE_DBGHELP_H
22#define __WINE_DBGHELP_H
23
Eric Pouech6235e932003-06-26 02:06:40 +000024#ifdef __cplusplus
25extern "C" {
26#endif /* defined(__cplusplus) */
27
28typedef struct _LOADED_IMAGE
29{
30 LPSTR ModuleName;
31 HANDLE hFile;
32 PUCHAR MappedAddress;
33 PIMAGE_NT_HEADERS FileHeader;
34 PIMAGE_SECTION_HEADER LastRvaSection;
35 ULONG NumberOfSections;
36 PIMAGE_SECTION_HEADER Sections;
37 ULONG Characteristics;
38 BOOLEAN fSystemImage;
39 BOOLEAN fDOSImage;
40 LIST_ENTRY Links;
41 ULONG SizeOfImage;
42} LOADED_IMAGE, *PLOADED_IMAGE;
43
44/*************************
45 * IMAGEHLP equiv *
46 *************************/
47
48typedef enum
49{
50 AddrMode1616,
51 AddrMode1632,
52 AddrModeReal,
53 AddrModeFlat
54} ADDRESS_MODE;
55
56typedef struct _tagADDRESS
57{
58 DWORD Offset;
59 WORD Segment;
60 ADDRESS_MODE Mode;
61} ADDRESS, *LPADDRESS;
62
63#define SYMF_OMAP_GENERATED 0x00000001
64#define SYMF_OMAP_MODIFIED 0x00000002
65#define SYMF_USER_GENERATED 0x00000004
66#define SYMF_REGISTER 0x00000008
67#define SYMF_REGREL 0x00000010
68#define SYMF_FRAMEREL 0x00000020
69#define SYMF_PARAMETER 0x00000040
70#define SYMF_LOCAL 0x00000080
71#define SYMF_CONSTANT 0x00000100
72#define SYMF_EXPORT 0x00000200
73#define SYMF_FORWARDER 0x00000400
74#define SYMF_FUNCTION 0x00000800
Eric Pouech48a86592004-05-18 21:29:09 +000075#define SYMF_VIRTUAL 0x00001000
76#define SYMF_THUNK 0x00002000
77#define SYMF_TLSREL 0x00004000
Eric Pouech6235e932003-06-26 02:06:40 +000078
79typedef enum
80{
81 SymNone = 0,
82 SymCoff,
83 SymCv,
84 SymPdb,
85 SymExport,
86 SymDeferred,
87 SymSym,
88 SymDia,
89 NumSymTypes
90} SYM_TYPE;
91
92typedef struct _IMAGEHLP_SYMBOL
93{
94 DWORD SizeOfStruct;
95 DWORD Address;
96 DWORD Size;
97 DWORD Flags;
98 DWORD MaxNameLength;
99 CHAR Name[1];
100} IMAGEHLP_SYMBOL, *PIMAGEHLP_SYMBOL;
101
102typedef struct _IMAGEHLP_MODULE
103{
104 DWORD SizeOfStruct;
105 DWORD BaseOfImage;
106 DWORD ImageSize;
107 DWORD TimeDateStamp;
108 DWORD CheckSum;
109 DWORD NumSyms;
110 SYM_TYPE SymType;
111 CHAR ModuleName[32];
112 CHAR ImageName[256];
113 CHAR LoadedImageName[256];
114} IMAGEHLP_MODULE, *PIMAGEHLP_MODULE;
115
116typedef struct _IMAGEHLP_MODULEW {
117 DWORD SizeOfStruct;
118 DWORD BaseOfImage;
119 DWORD ImageSize;
120 DWORD TimeDateStamp;
121 DWORD CheckSum;
122 DWORD NumSyms;
123 SYM_TYPE SymType;
124 WCHAR ModuleName[32];
125 WCHAR ImageName[256];
126 WCHAR LoadedImageName[256];
127} IMAGEHLP_MODULEW, *PIMAGEHLP_MODULEW;
128
129typedef struct _IMAGEHLP_LINE
130{
131 DWORD SizeOfStruct;
132 PVOID Key;
133 DWORD LineNumber;
134 PCHAR FileName;
135 DWORD Address;
136} IMAGEHLP_LINE, *PIMAGEHLP_LINE;
137
138typedef struct _SOURCEFILE
139{
140 DWORD ModBase;
141 PCHAR FileName;
142} SOURCEFILE, *PSOURCEFILE;
143
144#define CBA_DEFERRED_SYMBOL_LOAD_START 0x00000001
145#define CBA_DEFERRED_SYMBOL_LOAD_COMPLETE 0x00000002
146#define CBA_DEFERRED_SYMBOL_LOAD_FAILURE 0x00000003
147#define CBA_SYMBOLS_UNLOADED 0x00000004
148#define CBA_DUPLICATE_SYMBOL 0x00000005
149#define CBA_READ_MEMORY 0x00000006
150#define CBA_DEFERRED_SYMBOL_LOAD_CANCEL 0x00000007
151#define CBA_SET_OPTIONS 0x00000008
152#define CBA_EVENT 0x00000010
153#define CBA_DEBUG_INFO 0x10000000
154
155typedef struct _IMAGEHLP_CBA_READ_MEMORY
156{
157 DWORD addr;
158 PVOID buf;
159 DWORD bytes;
160 DWORD *bytesread;
161} IMAGEHLP_CBA_READ_MEMORY, *PIMAGEHLP_CBA_READ_MEMORY;
162
163enum {
164 sevInfo = 0,
165 sevProblem,
166 sevAttn,
167 sevFatal,
168 sevMax
169};
170
171typedef struct _IMAGEHLP_CBA_EVENT
172{
173 DWORD severity;
174 DWORD code;
175 PCHAR desc;
176 PVOID object;
177} IMAGEHLP_CBA_EVENT, *PIMAGEHLP_CBA_EVENT;
178
179typedef struct _IMAGEHLP_DEFERRED_SYMBOL_LOAD
180{
181 DWORD SizeOfStruct;
182 DWORD64 BaseOfImage;
183 DWORD CheckSum;
184 DWORD TimeDateStamp;
185 CHAR FileName[MAX_PATH];
186 BOOLEAN Reparse;
187} IMAGEHLP_DEFERRED_SYMBOL_LOAD, *PIMAGEHLP_DEFERRED_SYMBOL_LOAD;
188
189typedef struct _IMAGEHLP_DUPLICATE_SYMBOL
190{
191 DWORD SizeOfStruct;
192 DWORD NumberOfDups;
193 PIMAGEHLP_SYMBOL Symbol;
194 DWORD SelectedSymbol;
195} IMAGEHLP_DUPLICATE_SYMBOL, *PIMAGEHLP_DUPLICATE_SYMBOL;
196
197#define SYMOPT_CASE_INSENSITIVE 0x00000001
198#define SYMOPT_UNDNAME 0x00000002
199#define SYMOPT_DEFERRED_LOADS 0x00000004
200#define SYMOPT_NO_CPP 0x00000008
201#define SYMOPT_LOAD_LINES 0x00000010
202#define SYMOPT_OMAP_FIND_NEAREST 0x00000020
203#define SYMOPT_LOAD_ANYTHING 0x00000040
204#define SYMOPT_IGNORE_CVREC 0x00000080
205#define SYMOPT_NO_UNQUALIFIED_LOADS 0x00000100
206#define SYMOPT_FAIL_CRITICAL_ERRORS 0x00000200
207#define SYMOPT_EXACT_SYMBOLS 0x00000400
208#define SYMOPT_WILD_UNDERSCORE 0x00000800
209#define SYMOPT_USE_DEFAULTS 0x00001000
210#define SYMOPT_INCLUDE_32BIT_MODULES 0x00002000
Eric Pouech800864a2004-04-05 22:21:27 +0000211#define SYMOPT_PUBLICS_ONLY 0x00004000
212#define SYMOPT_NO_PUBLICS 0x00008000
213#define SYMOPT_AUTO_PUBLICS 0x00010000
214#define SYMOPT_NO_IMAGE_SEARCH 0x00020000
215#define SYMOPT_SECURE 0x00040000
216#define SYMOPT_NO_PROMPTS 0x00080000
Eric Pouech6235e932003-06-26 02:06:40 +0000217
218#define SYMOPT_DEBUG 0x80000000
219
220typedef struct _IMAGEHLP_STACK_FRAME
221{
222 ULONG InstructionOffset;
223 ULONG ReturnOffset;
224 ULONG FrameOffset;
225 ULONG StackOffset;
226 ULONG BackingStoreOffset;
227 ULONG FuncTableEntry;
228 ULONG Params[4];
229 ULONG Reserved[5];
230 BOOL Virtual;
231 ULONG Reserved2;
232} IMAGEHLP_STACK_FRAME, *PIMAGEHLP_STACK_FRAME;
233
234typedef VOID IMAGEHLP_CONTEXT, *PIMAGEHLP_CONTEXT;
235
236#define DBHHEADER_DEBUGDIRS 0x1
237typedef struct _DBGHELP_MODLOAD_DATA
238{
239 DWORD ssize;
240 DWORD ssig;
241 PVOID data;
242 DWORD size;
243 DWORD flags;
244} MODLOAD_DATA, *PMODLOAD_DATA;
245
246/*************************
Eric Pouech800864a2004-04-05 22:21:27 +0000247 * MiniDUMP *
Eric Pouech6235e932003-06-26 02:06:40 +0000248 *************************/
249
250/* DebugHelp */
251
252#define MINIDUMP_SIGNATURE 0x4D444D50 /* 'PMDM' */
253#define MINIDUMP_VERSION (42899)
254
255typedef DWORD RVA;
256typedef ULONG64 RVA64;
257
258typedef enum _MINIDUMP_TYPE
259{
260 MiniDumpNormal = 0x0000,
261 MiniDumpWithDataSegs = 0x0001,
262 MiniDumpWithFullMemory = 0x0002,
263 MiniDumpWithHandleData = 0x0004,
264 MiniDumpFilterMemory = 0x0008,
265 MiniDumpScanMemory = 0x0010
266} MINIDUMP_TYPE;
267
268typedef enum _MINIDUMP_CALLBACK_TYPE
269{
270 ModuleCallback,
271 ThreadCallback,
272 ThreadExCallback,
273 IncludeThreadCallback,
274 IncludeModuleCallback,
275} MINIDUMP_CALLBACK_TYPE;
276
277typedef struct _MINIDUMP_THREAD_CALLBACK
278{
279 ULONG ThreadId;
280 HANDLE ThreadHandle;
281 CONTEXT Context;
282 ULONG SizeOfContext;
283 ULONGLONG StackBase;
284 ULONG64 StackEnd;
285} MINIDUMP_THREAD_CALLBACK, *PMINIDUMP_THREAD_CALLBACK;
286
287typedef struct _MINIDUMP_THREAD_EX_CALLBACK
288{
289 ULONG ThreadId;
290 HANDLE ThreadHandle;
291 CONTEXT Context;
292 ULONG SizeOfContext;
293 ULONGLONG StackBase;
294 ULONGLONG StackEnd;
295 ULONGLONG BackingStoreBase;
296 ULONGLONG BackingStoreEnd;
297} MINIDUMP_THREAD_EX_CALLBACK, *PMINIDUMP_THREAD_EX_CALLBACK;
298
299typedef struct _MINIDUMP_INCLUDE_THREAD_CALLBACK
300{
301 ULONG ThreadId;
302} MINIDUMP_INCLUDE_THREAD_CALLBACK, *PMINIDUMP_INCLUDE_THREAD_CALLBACK;
303
304typedef enum _THREAD_WRITE_FLAGS
305{
306 ThreadWriteThread = 0x0001,
307 ThreadWriteStack = 0x0002,
308 ThreadWriteContext = 0x0004,
309 ThreadWriteBackingStore = 0x0008,
310 ThreadWriteInstructionWindow = 0x0010
311} THREAD_WRITE_FLAGS;
312
313typedef struct _MINIDUMP_MODULE_CALLBACK
314{
315 PWCHAR FullPath;
316 ULONGLONG BaseOfImage;
317 ULONG SizeOfImage;
318 ULONG CheckSum;
319 ULONG TimeDateStamp;
320 VS_FIXEDFILEINFO VersionInfo;
321 PVOID CvRecord;
322 ULONG SizeOfCvRecord;
323 PVOID MiscRecord;
324 ULONG SizeOfMiscRecord;
325} MINIDUMP_MODULE_CALLBACK, *PMINIDUMP_MODULE_CALLBACK;
326
327typedef struct _MINIDUMP_INCLUDE_MODULE_CALLBACK
328{
329 ULONG64 BaseOfImage;
330} MINIDUMP_INCLUDE_MODULE_CALLBACK, *PMINIDUMP_INCLUDE_MODULE_CALLBACK;
331
332typedef enum _MODULE_WRITE_FLAGS
333{
334 ModuleWriteModule = 0x0001,
335 ModuleWriteDataSeg = 0x0002,
336 ModuleWriteMiscRecord = 0x0004,
337 ModuleWriteCvRecord = 0x0008,
338 ModuleReferencedByMemory = 0x0010
339} MODULE_WRITE_FLAGS;
340
341typedef struct _MINIDUMP_CALLBACK_INPUT
342{
343 ULONG ProcessId;
344 HANDLE ProcessHandle;
345 ULONG CallbackType;
346 union
347 {
348 MINIDUMP_THREAD_CALLBACK Thread;
349 MINIDUMP_THREAD_EX_CALLBACK ThreadEx;
350 MINIDUMP_MODULE_CALLBACK Module;
351 MINIDUMP_INCLUDE_THREAD_CALLBACK IncludeThread;
352 MINIDUMP_INCLUDE_MODULE_CALLBACK IncludeModule;
353 } u;
354} MINIDUMP_CALLBACK_INPUT, *PMINIDUMP_CALLBACK_INPUT;
355
356typedef struct _MINIDUMP_CALLBACK_OUTPUT
357{
358 union
359 {
360 ULONG ModuleWriteFlags;
361 ULONG ThreadWriteFlags;
362 } u;
363} MINIDUMP_CALLBACK_OUTPUT, *PMINIDUMP_CALLBACK_OUTPUT;
364
365typedef BOOL (WINAPI* MINIDUMP_CALLBACK_ROUTINE)(PVOID CallbackParam,
366 const PMINIDUMP_CALLBACK_INPUT CallbackInput,
367 PMINIDUMP_CALLBACK_OUTPUT CallbackOutput);
368
369typedef struct _MINIDUMP_CALLBACK_INFORMATION
370{
371 MINIDUMP_CALLBACK_ROUTINE CallbackRoutine;
372 void* CallbackParam;
373} MINIDUMP_CALLBACK_INFORMATION, *PMINIDUMP_CALLBACK_INFORMATION;
374
375typedef struct _MINIDUMP_LOCATION_DESCRIPTOR
376{
377 ULONG DataSize;
378 RVA Rva;
379} MINIDUMP_LOCATION_DESCRIPTOR;
380
381typedef struct _MINIDUMP_DIRECTORY
382{
383 ULONG StreamType;
384 MINIDUMP_LOCATION_DESCRIPTOR Location;
385} MINIDUMP_DIRECTORY, *PMINIDUMP_DIRECTORY;
386
387typedef struct _MINIDUMP_EXCEPTION
388{
389 ULONG ExceptionCode;
390 ULONG ExceptionFlags;
391 ULONGLONG ExceptionRecord;
392 ULONGLONG ExceptionAddress;
393 ULONG NumberParameters;
394 ULONG __unusedAlignment;
395 ULONGLONG ExceptionInformation[EXCEPTION_MAXIMUM_PARAMETERS];
396} MINIDUMP_EXCEPTION, *PMINIDUMP_EXCEPTION;
397
398typedef struct _MINIDUMP_EXCEPTION_INFORMATION
399{
400 DWORD ThreadId;
401 PEXCEPTION_POINTERS ExceptionPointers;
402 BOOL ClientPointers;
403} MINIDUMP_EXCEPTION_INFORMATION, *PMINIDUMP_EXCEPTION_INFORMATION;
404
405typedef struct MINIDUMP_EXCEPTION_STREAM
406{
407 ULONG ThreadId;
408 ULONG __alignment;
409 MINIDUMP_EXCEPTION ExceptionRecord;
410 MINIDUMP_LOCATION_DESCRIPTOR ThreadContext;
411} MINIDUMP_EXCEPTION_STREAM, *PMINIDUMP_EXCEPTION_STREAM;
412
413typedef struct _MINIDUMP_HEADER
414{
415 DWORD Signature;
416 DWORD Version;
417 DWORD NumberOfStreams;
418 RVA StreamDirectoryRva;
419 DWORD CheckSum;
420 union
421 {
422 DWORD Reserved;
423 DWORD TimeDateStamp;
424 } u;
425 ULONGLONG Flags;
426} MINIDUMP_HEADER, *PMINIDUMP_HEADER;
427
428typedef struct _MINIDUMP_MEMORY_DESCRIPTOR
429{
430 ULONGLONG StartOfMemoryRange;
431 MINIDUMP_LOCATION_DESCRIPTOR Memory;
432} MINIDUMP_MEMORY_DESCRIPTOR, *PMINIDUMP_MEMORY_DESCRIPTOR;
433
434typedef struct _MINIDUMP_MODULE
435{
436 ULONGLONG BaseOfImage;
437 ULONG SizeOfImage;
438 ULONG CheckSum;
439 ULONG TimeDateStamp;
440 RVA ModuleNameRva;
441 VS_FIXEDFILEINFO VersionInfo;
442 MINIDUMP_LOCATION_DESCRIPTOR CvRecord;
443 MINIDUMP_LOCATION_DESCRIPTOR MiscRecord;
444 ULONGLONG Reserved0;
445 ULONGLONG Reserved1;
446} MINIDUMP_MODULE, *PMINIDUMP_MODULE;
447
448typedef struct _MINIDUMP_MODULE_LIST
449{
450 ULONG NumberOfModules;
451 MINIDUMP_MODULE Modules[1]; /* FIXME: 0-sized array not supported */
452} MINIDUMP_MODULE_LIST, *PMINIDUMP_MODULE_LIST;
453
454typedef struct _MINIDUMP_USER_STREAM
455{
456 ULONG Type;
457 ULONG BufferSize;
458 void* Buffer;
459} MINIDUMP_USER_STREAM, *PMINIDUMP_USER_STREAM;
460
461typedef struct _MINIDUMP_USER_STREAM_INFORMATION
462{
463 ULONG UserStreamCount;
464 PMINIDUMP_USER_STREAM UserStreamArray;
465} MINIDUMP_USER_STREAM_INFORMATION, *PMINIDUMP_USER_STREAM_INFORMATION;
466
467typedef enum _MINIDUMP_STREAM_TYPE
468{
469 UnusedStream = 0,
470 ReservedStream0 = 1,
471 ReservedStream1 = 2,
472 ThreadListStream = 3,
473 ModuleListStream = 4,
474 MemoryListStream = 5,
475 ExceptionStream = 6,
476 SystemInfoStream = 7,
477 ThreadExListStream = 8,
478 Memory64ListStream = 9,
479 CommentStreamA = 10,
480 CommentStreamW = 11,
481 HandleDataStream = 12,
482 FunctionTableStream = 13,
483
484 LastReservedStream = 0xffff
485} MINIDUMP_STREAM_TYPE;
486
487typedef struct _MINIDUMP_SYSTEM_INFO
488{
489 USHORT ProcessorArchitecture;
490 USHORT ProcessorLevel;
491 USHORT ProcessorRevision;
492 USHORT Reserved0;
493
494 ULONG MajorVersion;
495 ULONG MinorVersion;
496 ULONG BuildNumber;
497 ULONG PlatformId;
498
499 RVA CSDVersionRva;
500 ULONG Reserved1;
501 union _CPU_INFORMATION
502 {
503 struct
504 {
505 ULONG VendorId[3];
506 ULONG VersionInformation;
507 ULONG FeatureInformation;
508 ULONG AMDExtendedCpuFeatures;
509 } X86CpuInfo;
510 struct
511 {
512 ULONGLONG ProcessorFeatures[2];
513 } OtherCpuInfo;
514 } Cpu;
515
516} MINIDUMP_SYSTEM_INFO, *PMINIDUMP_SYSTEM_INFO;
517
518typedef struct _MINIDUMP_THREAD
519{
520 ULONG ThreadId;
521 ULONG SuspendCount;
522 ULONG PriorityClass;
523 ULONG Priority;
524 ULONGLONG Teb;
525 MINIDUMP_MEMORY_DESCRIPTOR Stack;
526 MINIDUMP_LOCATION_DESCRIPTOR ThreadContext;
527} MINIDUMP_THREAD, *PMINIDUMP_THREAD;
528
529typedef struct _MINIDUMP_THREAD_LIST
530{
531 ULONG NumberOfThreads;
532 MINIDUMP_THREAD Threads[1]; /* FIXME: no support of 0 sized array */
533} MINIDUMP_THREAD_LIST, *PMINIDUMP_THREAD_LIST;
534
Eric Pouech48a86592004-05-18 21:29:09 +0000535BOOL WINAPI MiniDumpWriteDump(HANDLE,DWORD,HANDLE,MINIDUMP_TYPE,const PMINIDUMP_EXCEPTION_INFORMATION,
536 const PMINIDUMP_USER_STREAM_INFORMATION,const PMINIDUMP_CALLBACK_INFORMATION);
537BOOL WINAPI MiniDumpReadDumpStream(PVOID,ULONG,PMINIDUMP_DIRECTORY*,PVOID*,ULONG*);
538
539
Eric Pouech6235e932003-06-26 02:06:40 +0000540/*************************
541 * MODULE handling *
542 *************************/
543typedef BOOL (CALLBACK *PENUMLOADED_MODULES_CALLBACK)(PSTR ModuleName, DWORD ModuleBase,
544 ULONG ModuleSize, PVOID UserContext);
545extern BOOL WINAPI EnumerateLoadedModules(HANDLE hProcess,
546 PENUMLOADED_MODULES_CALLBACK EnumLoadedModulesCallback,
547 PVOID UserContext);
548typedef BOOL (CALLBACK *PSYM_ENUMMODULES_CALLBACK)(PSTR ModuleName, DWORD BaseOfDll,
549 PVOID UserContext);
550extern BOOL WINAPI SymEnumerateModules(HANDLE hProcess,
Eric Pouech800864a2004-04-05 22:21:27 +0000551 PSYM_ENUMMODULES_CALLBACK EnumModulesCallback,
Eric Pouech6235e932003-06-26 02:06:40 +0000552 PVOID UserContext);
553extern BOOL WINAPI SymGetModuleInfo(HANDLE hProcess, DWORD dwAddr,
554 PIMAGEHLP_MODULE ModuleInfo);
555extern BOOL WINAPI SymGetModuleInfoW(HANDLE hProcess, DWORD dwAddr,
556 PIMAGEHLP_MODULEW ModuleInfo);
557extern DWORD WINAPI SymGetModuleBase(HANDLE hProcess, DWORD dwAddr);
558extern DWORD WINAPI SymLoadModule(HANDLE hProcess, HANDLE hFile, PSTR ImageName,
559 PSTR ModuleName, DWORD BaseOfDll, DWORD SizeOfDll);
560extern DWORD WINAPI SymLoadModuleEx(HANDLE hProcess, HANDLE hFile, PSTR ImageName,
561 PSTR ModuleName, DWORD BaseOfDll, DWORD DllSize,
562 PMODLOAD_DATA Data, DWORD Flags);
563extern BOOL WINAPI SymUnloadModule(HANDLE hProcess, DWORD BaseOfDll);
564
565/*************************
566 * Symbol Handling *
567 *************************/
568
569#define IMAGEHLP_SYMBOL_INFO_VALUEPRESENT 1
570#define IMAGEHLP_SYMBOL_INFO_REGISTER SYMF_REGISTER /* 0x08 */
571#define IMAGEHLP_SYMBOL_INFO_REGRELATIVE SYMF_REGREL /* 0x10 */
572#define IMAGEHLP_SYMBOL_INFO_FRAMERELATIVE SYMF_FRAMEREL /* 0x20 */
573#define IMAGEHLP_SYMBOL_INFO_PARAMETER SYMF_PARAMETER /* 0x40 */
574#define IMAGEHLP_SYMBOL_INFO_LOCAL SYMF_LOCAL /* 0x80 */
575#define IMAGEHLP_SYMBOL_INFO_CONSTANT SYMF_CONSTANT /* 0x100 */
576#define IMAGEHLP_SYMBOL_FUNCTION SYMF_FUNCTION /* 0x800 */
577
Eric Pouech800864a2004-04-05 22:21:27 +0000578#define SYMFLAG_VALUEPRESENT 0x00000001
579#define SYMFLAG_REGISTER 0x00000008
580#define SYMFLAG_REGREL 0x00000010
581#define SYMFLAG_FRAMEREL 0x00000020
582#define SYMFLAG_PARAMETER 0x00000040
583#define SYMFLAG_LOCAL 0x00000080
584#define SYMFLAG_CONSTANT 0x00000100
585#define SYMFLAG_EXPORT 0x00000200
586#define SYMFLAG_FORWARDER 0x00000400
587#define SYMFLAG_FUNCTION 0x00000800
588#define SYMFLAG_VIRTUAL 0x00001000
589#define SYMFLAG_THUNK 0x00002000
590#define SYMFLAG_TLSREL 0x00004000
591
Eric Pouech6235e932003-06-26 02:06:40 +0000592typedef struct _SYMBOL_INFO
593{
594 ULONG SizeOfStruct;
595 ULONG TypeIndex;
596 ULONG Reserved[2];
Eric Pouech48a86592004-05-18 21:29:09 +0000597 ULONG info; /* sdk states info, while MSDN says it's Index... */
Eric Pouech6235e932003-06-26 02:06:40 +0000598 ULONG Size;
599 ULONG ModBase;
600 ULONG Flags;
601 ULONG Value;
602 ULONG Address;
603 ULONG Register;
604 ULONG Scope;
605 ULONG Tag;
606 ULONG NameLen;
607 ULONG MaxNameLen;
608 CHAR Name[1];
609} SYMBOL_INFO, *PSYMBOL_INFO;
610
611typedef enum _IMAGEHLP_SYMBOL_TYPE_INFO
612{
613 TI_GET_SYMTAG,
614 TI_GET_SYMNAME,
615 TI_GET_LENGTH,
616 TI_GET_TYPE,
617 TI_GET_TYPEID,
618 TI_GET_BASETYPE,
619 TI_GET_ARRAYINDEXTYPEID,
620 TI_FINDCHILDREN,
621 TI_GET_DATAKIND,
622 TI_GET_ADDRESSOFFSET,
623 TI_GET_OFFSET,
624 TI_GET_VALUE,
625 TI_GET_COUNT,
626 TI_GET_CHILDRENCOUNT,
627 TI_GET_BITPOSITION,
628 TI_GET_VIRTUALBASECLASS,
629 TI_GET_VIRTUALTABLESHAPEID,
630 TI_GET_VIRTUALBASEPOINTEROFFSET,
631 TI_GET_CLASSPARENTID,
632 TI_GET_NESTED,
633 TI_GET_SYMINDEX,
634 TI_GET_LEXICALPARENT,
635 TI_GET_ADDRESS,
636 TI_GET_THISADJUST,
Eric Pouech800864a2004-04-05 22:21:27 +0000637 TI_GET_UDTKIND,
638 TI_IS_EQUIV_TO,
639 TI_GET_CALLING_CONVENTION,
Eric Pouech6235e932003-06-26 02:06:40 +0000640} IMAGEHLP_SYMBOL_TYPE_INFO;
641
642typedef struct _TI_FINDCHILDREN_PARAMS
643{
644 ULONG Count;
645 ULONG Start;
646 ULONG ChildId[1];
647} TI_FINDCHILDREN_PARAMS;
648
Eric Pouech800864a2004-04-05 22:21:27 +0000649#define UNDNAME_COMPLETE (0x0000)
650#define UNDNAME_NO_LEADING_UNDERSCORES (0x0001)
651#define UNDNAME_NO_MS_KEYWORDS (0x0002)
652#define UNDNAME_NO_FUNCTION_RETURNS (0x0004)
653#define UNDNAME_NO_ALLOCATION_MODEL (0x0008)
654#define UNDNAME_NO_ALLOCATION_LANGUAGE (0x0010)
655#define UNDNAME_NO_MS_THISTYPE (0x0020)
656#define UNDNAME_NO_CV_THISTYPE (0x0040)
657#define UNDNAME_NO_THISTYPE (0x0060)
658#define UNDNAME_NO_ACCESS_SPECIFIERS (0x0080)
659#define UNDNAME_NO_THROW_SIGNATURES (0x0100)
660#define UNDNAME_NO_MEMBER_TYPE (0x0200)
661#define UNDNAME_NO_RETURN_UDT_MODEL (0x0400)
662#define UNDNAME_32_BIT_DECODE (0x0800)
663#define UNDNAME_NAME_ONLY (0x1000)
664#define UNDNAME_NO_ARGUMENTS (0x2000)
665#define UNDNAME_NO_SPECIAL_SYMS (0x4000)
666
Eric Pouech6235e932003-06-26 02:06:40 +0000667BOOL WINAPI SymGetTypeInfo(HANDLE hProcess, DWORD ModBase, ULONG TypeId,
668 IMAGEHLP_SYMBOL_TYPE_INFO GetType, PVOID);
669typedef BOOL (CALLBACK *PSYM_ENUMERATESYMBOLS_CALLBACK)(PSYMBOL_INFO pSymInfo,
670 ULONG SymbolSize, PVOID UserContext);
671BOOL WINAPI SymEnumTypes(HANDLE hProcess, DWORD BaseOfDll,
672 PSYM_ENUMERATESYMBOLS_CALLBACK EnumSymbolsCallback,
673 PVOID UserContext);
Eric Pouech800864a2004-04-05 22:21:27 +0000674BOOL WINAPI SymFromAddr(HANDLE hProcess, DWORD addr, DWORD* displacement,
675 SYMBOL_INFO* sym_info);
676BOOL WINAPI SymFromName(HANDLE hProcess, LPSTR Name, PSYMBOL_INFO Symbol);
Eric Pouech48a86592004-05-18 21:29:09 +0000677BOOL WINAPI SymGetSymFromAddr(HANDLE,DWORD,PDWORD,PIMAGEHLP_SYMBOL);
678BOOL WINAPI SymGetSymFromName(HANDLE,PSTR,PIMAGEHLP_SYMBOL);
Eric Pouech6235e932003-06-26 02:06:40 +0000679BOOL WINAPI SymGetTypeFromName(HANDLE hProcess, DWORD BaseOfDll, LPSTR Name,
680 PSYMBOL_INFO Symbol);
Eric Pouech48a86592004-05-18 21:29:09 +0000681BOOL WINAPI SymGetSymNext(HANDLE,PIMAGEHLP_SYMBOL);
682BOOL WINAPI SymGetSymPrev(HANDLE,PIMAGEHLP_SYMBOL);
Eric Pouechda8b5822003-09-02 18:16:22 +0000683BOOL WINAPI SymEnumSymbols(HANDLE hProcess, ULONG BaseOfDll, PCSTR Mask,
684 PSYM_ENUMERATESYMBOLS_CALLBACK EnumSymbolsCallback,
685 PVOID UserContext);
Eric Pouech800864a2004-04-05 22:21:27 +0000686typedef BOOL (CALLBACK *PSYM_ENUMSYMBOLS_CALLBACK)(PSTR SymbolName, DWORD SymbolAddress,
687 ULONG SymbolSize, PVOID UserContext);
688BOOL WINAPI SymEnumerateSymbols(HANDLE hProcess, DWORD BaseOfDll,
689 PSYM_ENUMSYMBOLS_CALLBACK EnumSymbolsCallback,
690 PVOID UserContext);
691typedef BOOL (CALLBACK *PSYMBOL_REGISTERED_CALLBACK)(HANDLE hProcess, ULONG ActionCode,
692 PVOID CallbackData, PVOID UserContext);
693BOOL WINAPI SymRegisterCallback(HANDLE hProcess,
694 PSYMBOL_REGISTERED_CALLBACK CallbackFunction,
695 PVOID UserContext);
Eric Pouech48a86592004-05-18 21:29:09 +0000696BOOL WINAPI SymUnDName(PIMAGEHLP_SYMBOL,PSTR,DWORD);
Eric Pouech800864a2004-04-05 22:21:27 +0000697DWORD WINAPI UnDecorateSymbolName(LPCSTR DecoratedName, LPSTR UnDecoratedName,
698 DWORD UndecoratedLength, DWORD Flags);
Eric Pouech6235e932003-06-26 02:06:40 +0000699
700/*************************
701 * Source Files *
702 *************************/
703typedef BOOL (CALLBACK *PSYM_ENUMSOURCFILES_CALLBACK)(PSOURCEFILE pSourceFile,
704 PVOID UserContext);
705
706BOOL WINAPI SymEnumSourceFiles(HANDLE hProcess, ULONG ModBase, LPSTR Mask,
707 PSYM_ENUMSOURCFILES_CALLBACK cbSrcFiles,
708 PVOID UserContext);
Eric Pouech800864a2004-04-05 22:21:27 +0000709BOOL WINAPI SymGetLineFromAddr(HANDLE hProcess, DWORD dwAddr,
710 PDWORD pdwDisplacement, PIMAGEHLP_LINE Line);
711BOOL WINAPI SymGetLinePrev(HANDLE hProcess, PIMAGEHLP_LINE Line);
712BOOL WINAPI SymGetLineNext(HANDLE hProcess, PIMAGEHLP_LINE Line);
Eric Pouech6235e932003-06-26 02:06:40 +0000713
714/*************************
715 * File & image handling *
716 *************************/
Eric Pouechda8b5822003-09-02 18:16:22 +0000717BOOL WINAPI SymInitialize(HANDLE hProcess, PSTR UserSearchPath, BOOL fInvadeProcess);
718BOOL WINAPI SymCleanup(HANDLE hProcess);
719
Eric Pouech6235e932003-06-26 02:06:40 +0000720HANDLE WINAPI FindDebugInfoFile(PSTR FileName, PSTR SymbolPath, PSTR DebugFilePath);
721typedef BOOL (CALLBACK *PFIND_DEBUG_FILE_CALLBACK)(HANDLE FileHandle, PSTR FileName,
722 PVOID CallerData);
723HANDLE WINAPI FindDebugInfoFileEx(PSTR FileName, PSTR SymbolPath, PSTR DebugFilePath,
724 PFIND_DEBUG_FILE_CALLBACK Callback, PVOID CallerData);
725typedef BOOL (CALLBACK *PFINDFILEINPATHCALLBACK)(PSTR filename, PVOID context);
726
727BOOL WINAPI SymFindFileInPath(HANDLE hProcess, LPSTR searchPath, LPSTR FileName,
728 PVOID id, DWORD two, DWORD three, DWORD flags,
729 LPSTR FilePath, PFINDFILEINPATHCALLBACK callback,
730 PVOID context);
731HANDLE WINAPI FindExecutableImage(PSTR FileName, PSTR SymbolPath, PSTR ImageFilePath);
732typedef BOOL (CALLBACK *PFIND_EXE_FILE_CALLBACK)(HANDLE FileHandle, PSTR FileName,
733 PVOID CallerData);
734HANDLE WINAPI FindExecutableImageEx(PSTR FileName, PSTR SymbolPath, PSTR ImageFilePath,
735 PFIND_EXE_FILE_CALLBACK Callback, PVOID CallerData);
736PIMAGE_NT_HEADERS WINAPI ImageNtHeader(PVOID Base);
737
738PVOID WINAPI ImageDirectoryEntryToDataEx(PVOID Base, BOOLEAN MappedAsImage,
739 USHORT DirectoryEntry, PULONG Size,
740 PIMAGE_SECTION_HEADER *FoundHeader);
741PVOID WINAPI ImageDirectoryEntryToData(PVOID Base, BOOLEAN MappedAsImage,
742 USHORT DirectoryEntry, PULONG Size);
743PIMAGE_SECTION_HEADER WINAPI ImageRvaToSection(PIMAGE_NT_HEADERS NtHeaders,
744 PVOID Base, ULONG Rva);
745PVOID WINAPI ImageRvaToVa(PIMAGE_NT_HEADERS NtHeaders, PVOID Base,
746 ULONG Rva, OUT PIMAGE_SECTION_HEADER *LastRvaSection);
Eric Pouech48a86592004-05-18 21:29:09 +0000747BOOL WINAPI SymGetSearchPath(HANDLE,PSTR,DWORD);
748BOOL WINAPI SymSetSearchPath(HANDLE,PSTR);
749DWORD WINAPI GetTimestampForLoadedLibrary(HMODULE);
750BOOL WINAPI MakeSureDirectoryPathExists(PCSTR);
751BOOL WINAPI SearchTreeForFile(PSTR,PSTR,PSTR);
Eric Pouech6235e932003-06-26 02:06:40 +0000752
Eric Pouechda8b5822003-09-02 18:16:22 +0000753/*************************
754 * Context management *
755 *************************/
756BOOL WINAPI SymSetContext(HANDLE hProcess, PIMAGEHLP_STACK_FRAME StackFrame,
757 PIMAGEHLP_CONTEXT Context);
758
759
Eric Pouech800864a2004-04-05 22:21:27 +0000760/*************************
761 * Stack management *
762 *************************/
763
764typedef struct _KDHELP
765{
766 DWORD Thread;
767 DWORD ThCallbackStack;
768 DWORD NextCallback;
769 DWORD FramePointer;
770 DWORD KiCallUserMode;
771 DWORD KeUserCallbackDispatcher;
772 DWORD SystemRangeStart;
773} KDHELP, *PKDHELP;
774
775typedef struct _STACKFRAME
776{
777 ADDRESS AddrPC;
778 ADDRESS AddrReturn;
779 ADDRESS AddrFrame;
780 ADDRESS AddrStack;
781 PVOID FuncTableEntry;
782 DWORD Params[4];
783 BOOL Far;
784 BOOL Virtual;
785 DWORD Reserved[3];
786 KDHELP KdHelp;
787} STACKFRAME, *LPSTACKFRAME;
788
789typedef BOOL (CALLBACK *PREAD_PROCESS_MEMORY_ROUTINE)
790 (HANDLE hProcess, LPCVOID lpBaseAddress, PVOID lpBuffer,
791 DWORD nSize, PDWORD lpNumberOfBytesRead);
792
793typedef PVOID (CALLBACK *PFUNCTION_TABLE_ACCESS_ROUTINE)
794 (HANDLE hProcess, DWORD AddrBase);
795
796typedef DWORD (CALLBACK *PGET_MODULE_BASE_ROUTINE)
797 (HANDLE hProcess, DWORD ReturnAddress);
798
799typedef DWORD (CALLBACK *PTRANSLATE_ADDRESS_ROUTINE)
800 (HANDLE hProcess, HANDLE hThread, LPADDRESS lpaddr);
801
802BOOL WINAPI StackWalk(DWORD MachineType, HANDLE hProcess, HANDLE hThread,
803 LPSTACKFRAME StackFrame, PVOID ContextRecord,
804 PREAD_PROCESS_MEMORY_ROUTINE ReadMemoryRoutine,
805 PFUNCTION_TABLE_ACCESS_ROUTINE FunctionTableAccessRoutine,
806 PGET_MODULE_BASE_ROUTINE GetModuleBaseRoutine,
807 PTRANSLATE_ADDRESS_ROUTINE TranslateAddress);
808
809PVOID WINAPI SymFunctionTableAccess(HANDLE hProcess, DWORD AddrBase);
810
811/*************************
812 * Version, global stuff *
813 *************************/
814
815typedef struct API_VERSION
816{
817 USHORT MajorVersion;
818 USHORT MinorVersion;
819 USHORT Revision;
820 USHORT Reserved;
821} API_VERSION, *LPAPI_VERSION;
822
823LPAPI_VERSION WINAPI ImagehlpApiVersion(void);
824LPAPI_VERSION WINAPI ImagehlpApiVersionEx(LPAPI_VERSION AppVersion);
825
826typedef struct _IMAGE_DEBUG_INFORMATION
827{
828 LIST_ENTRY List;
829 DWORD ReservedSize;
830 PVOID ReservedMappedBase;
831 USHORT ReservedMachine;
832 USHORT ReservedCharacteristics;
833 DWORD ReservedCheckSum;
834 DWORD ImageBase;
835 DWORD SizeOfImage;
836 DWORD ReservedNumberOfSections;
837 PIMAGE_SECTION_HEADER ReservedSections;
838 DWORD ReservedExportedNamesSize;
839 PSTR ReservedExportedNames;
840 DWORD ReservedNumberOfFunctionTableEntries;
841 PIMAGE_FUNCTION_ENTRY ReservedFunctionTableEntries;
842 DWORD ReservedLowestFunctionStartingAddress;
843 DWORD ReservedHighestFunctionEndingAddress;
844 DWORD ReservedNumberOfFpoTableEntries;
845 PFPO_DATA ReservedFpoTableEntries;
846 DWORD SizeOfCoffSymbols;
847 PIMAGE_COFF_SYMBOLS_HEADER CoffSymbols;
848 DWORD ReservedSizeOfCodeViewSymbols;
849 PVOID ReservedCodeViewSymbols;
850 PSTR ImageFilePath;
851 PSTR ImageFileName;
852 PSTR ReservedDebugFilePath;
853 DWORD ReservedTimeDateStamp;
854 BOOL ReservedRomImage;
855 PIMAGE_DEBUG_DIRECTORY ReservedDebugDirectory;
856 DWORD ReservedNumberOfDebugDirectories;
857 DWORD ReservedOriginalFunctionTableBaseAddress;
858 DWORD Reserved[ 2 ];
859} IMAGE_DEBUG_INFORMATION, *PIMAGE_DEBUG_INFORMATION;
860
861
862PIMAGE_DEBUG_INFORMATION WINAPI MapDebugInformation(HANDLE FileHandle, PSTR FileName,
863 PSTR SymbolPath, DWORD ImageBase);
864
865BOOL WINAPI UnmapDebugInformation(PIMAGE_DEBUG_INFORMATION DebugInfo);
866
867DWORD WINAPI SymGetOptions(void);
868DWORD WINAPI SymSetOptions(DWORD);
869
Eric Pouech6235e932003-06-26 02:06:40 +0000870#ifdef __cplusplus
871} /* extern "C" */
872#endif /* defined(__cplusplus) */
873
874#endif /* __WINE_DBGHELP_H */