dbghelp: Symbol info.
[wine] / include / dbghelp.h
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
21 #ifndef __WINE_DBGHELP_H
22 #define __WINE_DBGHELP_H
23
24 #ifdef __cplusplus
25 extern "C" {
26 #endif /* defined(__cplusplus) */
27
28 typedef 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
48 typedef enum
49 {
50     AddrMode1616,
51     AddrMode1632,
52     AddrModeReal,
53     AddrModeFlat
54 } ADDRESS_MODE;
55
56 typedef struct _tagADDRESS
57 {
58     DWORD                       Offset;
59     WORD                        Segment;
60     ADDRESS_MODE                Mode;
61 } ADDRESS, *LPADDRESS;
62
63 typedef struct _tagADDRESS64
64 {
65     DWORD64                     Offset;
66     WORD                        Segment;
67     ADDRESS_MODE                Mode;
68 } ADDRESS64, *LPADDRESS64;
69
70 #define SYMF_OMAP_GENERATED   0x00000001
71 #define SYMF_OMAP_MODIFIED    0x00000002
72 #define SYMF_USER_GENERATED   0x00000004
73 #define SYMF_REGISTER         0x00000008
74 #define SYMF_REGREL           0x00000010
75 #define SYMF_FRAMEREL         0x00000020
76 #define SYMF_PARAMETER        0x00000040
77 #define SYMF_LOCAL            0x00000080
78 #define SYMF_CONSTANT         0x00000100
79 #define SYMF_EXPORT           0x00000200
80 #define SYMF_FORWARDER        0x00000400
81 #define SYMF_FUNCTION         0x00000800
82 #define SYMF_VIRTUAL          0x00001000
83 #define SYMF_THUNK            0x00002000
84 #define SYMF_TLSREL           0x00004000
85
86 typedef enum 
87 {
88     SymNone = 0,
89     SymCoff,
90     SymCv,
91     SymPdb,
92     SymExport,
93     SymDeferred,
94     SymSym,
95     SymDia,
96     NumSymTypes
97 } SYM_TYPE;
98
99 typedef struct _IMAGEHLP_SYMBOL
100 {
101     DWORD                       SizeOfStruct;
102     DWORD                       Address;
103     DWORD                       Size;
104     DWORD                       Flags;
105     DWORD                       MaxNameLength;
106     CHAR                        Name[1];
107 } IMAGEHLP_SYMBOL, *PIMAGEHLP_SYMBOL;
108
109 typedef struct _IMAGEHLP_MODULE
110 {
111     DWORD                       SizeOfStruct;
112     DWORD                       BaseOfImage;
113     DWORD                       ImageSize;
114     DWORD                       TimeDateStamp;
115     DWORD                       CheckSum;
116     DWORD                       NumSyms;
117     SYM_TYPE                    SymType;
118     CHAR                        ModuleName[32];
119     CHAR                        ImageName[256];
120     CHAR                        LoadedImageName[256];
121 } IMAGEHLP_MODULE, *PIMAGEHLP_MODULE;
122
123 typedef struct _IMAGEHLP_MODULEW
124 {
125     DWORD                       SizeOfStruct;
126     DWORD                       BaseOfImage;
127     DWORD                       ImageSize;
128     DWORD                       TimeDateStamp;
129     DWORD                       CheckSum;
130     DWORD                       NumSyms;
131     SYM_TYPE                    SymType;
132     WCHAR                       ModuleName[32];
133     WCHAR                       ImageName[256];
134     WCHAR                       LoadedImageName[256];
135 } IMAGEHLP_MODULEW, *PIMAGEHLP_MODULEW;
136
137 typedef struct _IMAGEHLP_MODULE64
138 {
139     DWORD                       SizeOfStruct;
140     DWORD64                     BaseOfImage;
141     DWORD                       ImageSize;
142     DWORD                       TimeDateStamp;
143     DWORD                       CheckSum;
144     DWORD                       NumSyms;
145     SYM_TYPE                    SymType;
146     CHAR                        ModuleName[32];
147     CHAR                        ImageName[256];
148     CHAR                        LoadedImageName[256];
149     CHAR                        LoadedPdbName[256];
150     DWORD                       CVSig;
151     CHAR                        CVData[MAX_PATH*3];
152     DWORD                       PdbSig;
153     GUID                        PdbSig70;
154     DWORD                       PdbAge;
155     BOOL                        PdbUnmatched;
156     BOOL                        DbgUnmatched;
157     BOOL                        LineNumbers;
158     BOOL                        GlobalSymbols;
159     BOOL                        TypeInfo;
160     BOOL                        SourceIndexed;
161     BOOL                        Publics;
162 } IMAGEHLP_MODULE64, *PIMAGEHLP_MODULE64;
163
164 typedef struct _IMAGEHLP_MODULE64W
165 {
166     DWORD                       SizeOfStruct;
167     DWORD64                     BaseOfImage;
168     DWORD                       ImageSize;
169     DWORD                       TimeDateStamp;
170     DWORD                       CheckSum;
171     DWORD                       NumSyms;
172     SYM_TYPE                    SymType;
173     WCHAR                       ModuleName[32];
174     WCHAR                       ImageName[256];
175     WCHAR                       LoadedImageName[256];
176     WCHAR                       LoadedPdbName[256];
177     DWORD                       CVSig;
178     WCHAR                       CVData[MAX_PATH*3];
179     DWORD                       PdbSig;
180     GUID                        PdbSig70;
181     DWORD                       PdbAge;
182     BOOL                        PdbUnmatched;
183     BOOL                        DbgUnmatched;
184     BOOL                        LineNumbers;
185     BOOL                        GlobalSymbols;
186     BOOL                        TypeInfo;
187     BOOL                        SourceIndexed;
188     BOOL                        Publics;
189 } IMAGEHLP_MODULEW64, *PIMAGEHLP_MODULEW64;
190
191 typedef struct _IMAGEHLP_LINE
192 {
193     DWORD                       SizeOfStruct;
194     PVOID                       Key;
195     DWORD                       LineNumber;
196     PCHAR                       FileName;
197     DWORD                       Address;
198 } IMAGEHLP_LINE, *PIMAGEHLP_LINE;
199
200 typedef struct _IMAGEHLP_LINE64
201 {
202     DWORD                       SizeOfStruct;
203     PVOID                       Key;
204     DWORD                       LineNumber;
205     PCHAR                       FileName;
206     DWORD64                     Address;
207 } IMAGEHLP_LINE64, *PIMAGEHLP_LINE64;
208
209 typedef struct _SOURCEFILE
210 {
211     DWORD64                     ModBase;
212     PCHAR                       FileName;
213 } SOURCEFILE, *PSOURCEFILE;
214
215 #define CBA_DEFERRED_SYMBOL_LOAD_START          0x00000001
216 #define CBA_DEFERRED_SYMBOL_LOAD_COMPLETE       0x00000002
217 #define CBA_DEFERRED_SYMBOL_LOAD_FAILURE        0x00000003
218 #define CBA_SYMBOLS_UNLOADED                    0x00000004
219 #define CBA_DUPLICATE_SYMBOL                    0x00000005
220 #define CBA_READ_MEMORY                         0x00000006
221 #define CBA_DEFERRED_SYMBOL_LOAD_CANCEL         0x00000007
222 #define CBA_SET_OPTIONS                         0x00000008
223 #define CBA_EVENT                               0x00000010
224 #define CBA_DEBUG_INFO                          0x10000000
225
226 typedef struct _IMAGEHLP_CBA_READ_MEMORY
227 {
228     DWORD64   addr;
229     PVOID     buf;
230     DWORD     bytes;
231     DWORD    *bytesread;
232 } IMAGEHLP_CBA_READ_MEMORY, *PIMAGEHLP_CBA_READ_MEMORY;
233
234 enum
235 {
236     sevInfo = 0,
237     sevProblem,
238     sevAttn,
239     sevFatal,
240     sevMax
241 };
242
243 typedef struct _IMAGEHLP_CBA_EVENT
244 {
245     DWORD       severity;
246     DWORD       code;
247     PCHAR       desc;
248     PVOID       object;
249 } IMAGEHLP_CBA_EVENT, *PIMAGEHLP_CBA_EVENT;
250
251 typedef struct _IMAGEHLP_DEFERRED_SYMBOL_LOAD
252 {
253     DWORD                       SizeOfStruct;
254     DWORD                       BaseOfImage;
255     DWORD                       CheckSum;
256     DWORD                       TimeDateStamp;
257     CHAR                        FileName[MAX_PATH];
258     BOOLEAN                     Reparse;
259 } IMAGEHLP_DEFERRED_SYMBOL_LOAD, *PIMAGEHLP_DEFERRED_SYMBOL_LOAD;
260
261 typedef struct _IMAGEHLP_DUPLICATE_SYMBOL
262 {
263     DWORD                       SizeOfStruct;
264     DWORD                       NumberOfDups;
265     PIMAGEHLP_SYMBOL            Symbol;
266     DWORD                       SelectedSymbol;
267 } IMAGEHLP_DUPLICATE_SYMBOL, *PIMAGEHLP_DUPLICATE_SYMBOL;
268
269 #define SYMOPT_CASE_INSENSITIVE         0x00000001
270 #define SYMOPT_UNDNAME                  0x00000002
271 #define SYMOPT_DEFERRED_LOADS           0x00000004
272 #define SYMOPT_NO_CPP                   0x00000008
273 #define SYMOPT_LOAD_LINES               0x00000010
274 #define SYMOPT_OMAP_FIND_NEAREST        0x00000020
275 #define SYMOPT_LOAD_ANYTHING            0x00000040
276 #define SYMOPT_IGNORE_CVREC             0x00000080
277 #define SYMOPT_NO_UNQUALIFIED_LOADS     0x00000100
278 #define SYMOPT_FAIL_CRITICAL_ERRORS     0x00000200
279 #define SYMOPT_EXACT_SYMBOLS            0x00000400
280 #define SYMOPT_WILD_UNDERSCORE          0x00000800
281 #define SYMOPT_USE_DEFAULTS             0x00001000
282 #define SYMOPT_INCLUDE_32BIT_MODULES    0x00002000
283 #define SYMOPT_PUBLICS_ONLY             0x00004000
284 #define SYMOPT_NO_PUBLICS               0x00008000
285 #define SYMOPT_AUTO_PUBLICS             0x00010000
286 #define SYMOPT_NO_IMAGE_SEARCH          0x00020000
287 #define SYMOPT_SECURE                   0x00040000
288 #define SYMOPT_NO_PROMPTS               0x00080000
289
290 #define SYMOPT_DEBUG                    0x80000000
291
292 typedef struct _IMAGEHLP_STACK_FRAME
293 {
294     ULONG64     InstructionOffset;
295     ULONG64     ReturnOffset;
296     ULONG64     FrameOffset;
297     ULONG64     StackOffset;
298     ULONG64     BackingStoreOffset;
299     ULONG64     FuncTableEntry;
300     ULONG64     Params[4];
301     ULONG64     Reserved[5];
302     BOOL        Virtual;
303     ULONG       Reserved2;
304 } IMAGEHLP_STACK_FRAME, *PIMAGEHLP_STACK_FRAME;
305
306 typedef VOID IMAGEHLP_CONTEXT, *PIMAGEHLP_CONTEXT;
307
308 #define DBHHEADER_DEBUGDIRS     0x1
309 typedef struct _DBGHELP_MODLOAD_DATA
310 {
311     DWORD               ssize;
312     DWORD               ssig;
313     PVOID               data;
314     DWORD               size;
315     DWORD               flags;
316 } MODLOAD_DATA, *PMODLOAD_DATA;
317
318 /*************************
319  *       MiniDUMP        *
320  *************************/
321
322 /* DebugHelp */
323
324 #define MINIDUMP_SIGNATURE 0x504D444D /* 'MDMP' */
325 #define MINIDUMP_VERSION   (42899)
326
327 typedef DWORD   RVA;
328 typedef ULONG64 RVA64;
329
330 typedef enum _MINIDUMP_TYPE 
331 {
332     MiniDumpNormal                              = 0x0000,
333     MiniDumpWithDataSegs                        = 0x0001,
334     MiniDumpWithFullMemory                      = 0x0002,
335     MiniDumpWithHandleData                      = 0x0004,
336     MiniDumpFilterMemory                        = 0x0008,
337     MiniDumpScanMemory                          = 0x0010,
338     MiniDumpWithUnloadedModules                 = 0x0020,
339     MiniDumpWithIndirectlyReferencedMemory      = 0x0040,
340     MiniDumpFilterModulePaths                   = 0x0080,
341     MiniDumpWithProcessThreadData               = 0x0100,
342     MiniDumpWithPrivateReadWriteMemory          = 0x0200,
343     MiniDumpWithoutOptionalData                 = 0x0400,
344     MiniDumpWithFullMemoryInfo                  = 0x0800,
345     MiniDumpWithThreadInfo                      = 0x1000,
346     MiniDumpWithCodeSegs                        = 0x2000
347 } MINIDUMP_TYPE;
348
349 typedef enum _MINIDUMP_CALLBACK_TYPE
350 {
351     ModuleCallback,
352     ThreadCallback,
353     ThreadExCallback,
354     IncludeThreadCallback,
355     IncludeModuleCallback,
356     MemoryCallback,
357 } MINIDUMP_CALLBACK_TYPE;
358
359 typedef struct _MINIDUMP_THREAD_CALLBACK
360 {
361     ULONG                       ThreadId;
362     HANDLE                      ThreadHandle;
363     CONTEXT                     Context;
364     ULONG                       SizeOfContext;
365     ULONG64                     StackBase;
366     ULONG64                     StackEnd;
367 } MINIDUMP_THREAD_CALLBACK, *PMINIDUMP_THREAD_CALLBACK;
368
369 typedef struct _MINIDUMP_THREAD_EX_CALLBACK 
370 {
371     ULONG                       ThreadId;
372     HANDLE                      ThreadHandle;
373     CONTEXT                     Context;
374     ULONG                       SizeOfContext;
375     ULONG64                     StackBase;
376     ULONG64                     StackEnd;
377     ULONG64                     BackingStoreBase;
378     ULONG64                     BackingStoreEnd;
379 } MINIDUMP_THREAD_EX_CALLBACK, *PMINIDUMP_THREAD_EX_CALLBACK;
380
381 typedef struct _MINIDUMP_INCLUDE_THREAD_CALLBACK
382 {
383     ULONG ThreadId;
384 } MINIDUMP_INCLUDE_THREAD_CALLBACK, *PMINIDUMP_INCLUDE_THREAD_CALLBACK;
385
386 typedef enum _THREAD_WRITE_FLAGS 
387 {
388     ThreadWriteThread            = 0x0001,
389     ThreadWriteStack             = 0x0002,
390     ThreadWriteContext           = 0x0004,
391     ThreadWriteBackingStore      = 0x0008,
392     ThreadWriteInstructionWindow = 0x0010,
393     ThreadWriteThreadData        = 0x0020,
394     ThreadWriteThreadInfo        = 0x0040
395 } THREAD_WRITE_FLAGS;
396
397 typedef struct _MINIDUMP_MODULE_CALLBACK 
398 {
399     PWCHAR                      FullPath;
400     ULONG64                     BaseOfImage;
401     ULONG                       SizeOfImage;
402     ULONG                       CheckSum;
403     ULONG                       TimeDateStamp;
404     VS_FIXEDFILEINFO            VersionInfo;
405     PVOID                       CvRecord;
406     ULONG                       SizeOfCvRecord;
407     PVOID                       MiscRecord;
408     ULONG                       SizeOfMiscRecord;
409 } MINIDUMP_MODULE_CALLBACK, *PMINIDUMP_MODULE_CALLBACK;
410
411 typedef struct _MINIDUMP_INCLUDE_MODULE_CALLBACK 
412 {
413     ULONG64 BaseOfImage;
414 } MINIDUMP_INCLUDE_MODULE_CALLBACK, *PMINIDUMP_INCLUDE_MODULE_CALLBACK;
415
416 typedef enum _MODULE_WRITE_FLAGS 
417 {
418     ModuleWriteModule        = 0x0001,
419     ModuleWriteDataSeg       = 0x0002,
420     ModuleWriteMiscRecord    = 0x0004,
421     ModuleWriteCvRecord      = 0x0008,
422     ModuleReferencedByMemory = 0x0010,
423     ModuleWriteTlsData       = 0x0020,
424     ModuleWriteCodeSegs      = 0x0040,
425 } MODULE_WRITE_FLAGS;
426
427 typedef struct _MINIDUMP_CALLBACK_INPUT 
428 {
429     ULONG                       ProcessId;
430     HANDLE                      ProcessHandle;
431     ULONG                       CallbackType;
432     union 
433     {
434         MINIDUMP_THREAD_CALLBACK        Thread;
435         MINIDUMP_THREAD_EX_CALLBACK     ThreadEx;
436         MINIDUMP_MODULE_CALLBACK        Module;
437         MINIDUMP_INCLUDE_THREAD_CALLBACK IncludeThread;
438         MINIDUMP_INCLUDE_MODULE_CALLBACK IncludeModule;
439     } DUMMYUNIONNAME;
440 } MINIDUMP_CALLBACK_INPUT, *PMINIDUMP_CALLBACK_INPUT;
441
442 typedef struct _MINIDUMP_CALLBACK_OUTPUT
443 {
444     union 
445     {
446         ULONG                           ModuleWriteFlags;
447         ULONG                           ThreadWriteFlags;
448         struct
449         {
450             ULONG64                     MemoryBase;
451             ULONG                       MemorySize;
452         } DUMMYSTRUCTNAME;
453     } DUMMYUNIONNAME;
454 } MINIDUMP_CALLBACK_OUTPUT, *PMINIDUMP_CALLBACK_OUTPUT;
455
456 typedef BOOL (WINAPI* MINIDUMP_CALLBACK_ROUTINE)(PVOID, const PMINIDUMP_CALLBACK_INPUT, PMINIDUMP_CALLBACK_OUTPUT);
457
458 typedef struct _MINIDUMP_CALLBACK_INFORMATION 
459 {
460     MINIDUMP_CALLBACK_ROUTINE   CallbackRoutine;
461     void*                       CallbackParam;
462 } MINIDUMP_CALLBACK_INFORMATION, *PMINIDUMP_CALLBACK_INFORMATION;
463
464 typedef struct _MINIDUMP_LOCATION_DESCRIPTOR 
465 {
466     ULONG                       DataSize;
467     RVA                         Rva;
468 } MINIDUMP_LOCATION_DESCRIPTOR;
469
470 typedef struct _MINIDUMP_DIRECTORY 
471 {
472     ULONG                       StreamType;
473     MINIDUMP_LOCATION_DESCRIPTOR Location;
474 } MINIDUMP_DIRECTORY, *PMINIDUMP_DIRECTORY;
475
476 typedef struct _MINIDUMP_EXCEPTION
477 {
478     ULONG                       ExceptionCode;
479     ULONG                       ExceptionFlags;
480     ULONG64                     ExceptionRecord;
481     ULONG64                     ExceptionAddress;
482     ULONG                       NumberParameters;
483     ULONG                        __unusedAlignment;
484     ULONG64                     ExceptionInformation[EXCEPTION_MAXIMUM_PARAMETERS];
485 } MINIDUMP_EXCEPTION, *PMINIDUMP_EXCEPTION;
486
487 typedef struct _MINIDUMP_EXCEPTION_INFORMATION
488 {
489     DWORD                       ThreadId;
490     PEXCEPTION_POINTERS         ExceptionPointers;
491     BOOL                        ClientPointers;
492 } MINIDUMP_EXCEPTION_INFORMATION, *PMINIDUMP_EXCEPTION_INFORMATION;
493
494 typedef struct MINIDUMP_EXCEPTION_STREAM 
495 {
496     ULONG                       ThreadId;
497     ULONG                       __alignment;
498     MINIDUMP_EXCEPTION          ExceptionRecord;
499     MINIDUMP_LOCATION_DESCRIPTOR ThreadContext;
500 } MINIDUMP_EXCEPTION_STREAM, *PMINIDUMP_EXCEPTION_STREAM;
501
502 typedef struct _MINIDUMP_HEADER 
503 {
504     DWORD                       Signature;
505     DWORD                       Version;
506     DWORD                       NumberOfStreams;
507     RVA                         StreamDirectoryRva;
508     DWORD                       CheckSum;
509     union 
510     {
511         DWORD                           Reserved;
512         DWORD                           TimeDateStamp;
513     } DUMMYUNIONNAME;
514     ULONG64                     Flags;
515 } MINIDUMP_HEADER, *PMINIDUMP_HEADER;
516
517 typedef struct _MINIDUMP_MEMORY_DESCRIPTOR 
518 {
519     ULONG64                     StartOfMemoryRange;
520     MINIDUMP_LOCATION_DESCRIPTOR Memory;
521 } MINIDUMP_MEMORY_DESCRIPTOR, *PMINIDUMP_MEMORY_DESCRIPTOR;
522
523 typedef struct _MINIDUMP_MEMORY_LIST
524 {
525     ULONG                       NumberOfMemoryRanges;
526     MINIDUMP_MEMORY_DESCRIPTOR  MemoryRanges[1]; /* FIXME: 0-sized array not supported */
527 } MINIDUMP_MEMORY_LIST, *PMINIDUMP_MEMORY_LIST;
528
529 #define MINIDUMP_MISC1_PROCESS_ID       0x00000001
530 #define MINIDUMP_MISC1_PROCESS_TIMES    0x00000002
531
532 typedef struct _MINIDUMP_MISC_INFO
533 {
534     ULONG                       SizeOfInfo;
535     ULONG                       Flags1;
536     ULONG                       ProcessId;
537     ULONG                       ProcessCreateTime;
538     ULONG                       ProcessUserTime;
539     ULONG                       ProcessKernelTime;
540 } MINIDUMP_MISC_INFO, *PMINIDUMP_MISC_INFO;
541
542 typedef struct _MINIDUMP_MODULE
543 {
544     ULONG64                     BaseOfImage;
545     ULONG                       SizeOfImage;
546     ULONG                       CheckSum;
547     ULONG                       TimeDateStamp;
548     RVA                         ModuleNameRva;
549     VS_FIXEDFILEINFO            VersionInfo;
550     MINIDUMP_LOCATION_DESCRIPTOR CvRecord;
551     MINIDUMP_LOCATION_DESCRIPTOR MiscRecord;
552     ULONG64                     Reserved0;
553     ULONG64                     Reserved1;
554 } MINIDUMP_MODULE, *PMINIDUMP_MODULE;
555
556 typedef struct _MINIDUMP_MODULE_LIST 
557 {
558     ULONG                       NumberOfModules;
559     MINIDUMP_MODULE             Modules[1]; /* FIXME: 0-sized array not supported */
560 } MINIDUMP_MODULE_LIST, *PMINIDUMP_MODULE_LIST;
561
562 typedef struct _MINIDUMP_STRING
563 {
564     ULONG                       Length;
565     WCHAR                       Buffer[1]; /* FIXME: O-sized array not supported */
566 } MINIDUMP_STRING, *PMINIDUMP_STRING;
567
568 typedef struct _MINIDUMP_SYSTEM_INFO
569 {
570     USHORT                      ProcessorArchitecture;
571     USHORT                      ProcessorLevel;
572     USHORT                      ProcessorRevision;
573     union
574     {
575         USHORT                          Reserved0;
576         struct
577         {
578             UCHAR                       NumberOfProcessors;
579             UCHAR                       ProductType;
580         } DUMMYSTRUCTNAME;
581     } DUMMYUNIONNAME;
582
583     ULONG                       MajorVersion;
584     ULONG                       MinorVersion;
585     ULONG                       BuildNumber;
586     ULONG                       PlatformId;
587
588     RVA                         CSDVersionRva;
589     union
590     {
591         ULONG                           Reserved1;
592         struct
593         {
594             USHORT                      SuiteMask;
595             USHORT                      Reserved2;
596         } DUMMYSTRUCTNAME;
597     } DUMMYUNIONNAME1;
598     union _CPU_INFORMATION 
599     {
600         struct 
601         {
602             ULONG                       VendorId[3];
603             ULONG                       VersionInformation;
604             ULONG                       FeatureInformation;
605             ULONG                       AMDExtendedCpuFeatures;
606         } X86CpuInfo;
607         struct 
608         {
609             ULONG64                     ProcessorFeatures[2];
610         } OtherCpuInfo;
611     } Cpu;
612
613 } MINIDUMP_SYSTEM_INFO, *PMINIDUMP_SYSTEM_INFO;
614
615 typedef struct _MINIDUMP_THREAD
616 {
617     ULONG                       ThreadId;
618     ULONG                       SuspendCount;
619     ULONG                       PriorityClass;
620     ULONG                       Priority;
621     ULONG64                     Teb;
622     MINIDUMP_MEMORY_DESCRIPTOR  Stack;
623     MINIDUMP_LOCATION_DESCRIPTOR ThreadContext;
624 } MINIDUMP_THREAD, *PMINIDUMP_THREAD;
625
626 typedef struct _MINIDUMP_THREAD_LIST
627 {
628     ULONG                       NumberOfThreads;
629     MINIDUMP_THREAD             Threads[1]; /* FIXME: no support of 0 sized array */
630 } MINIDUMP_THREAD_LIST, *PMINIDUMP_THREAD_LIST;
631
632 typedef struct _MINIDUMP_USER_STREAM
633 {
634     ULONG                       Type;
635     ULONG                       BufferSize;
636     void*                       Buffer;
637 } MINIDUMP_USER_STREAM, *PMINIDUMP_USER_STREAM;
638
639 typedef struct _MINIDUMP_USER_STREAM_INFORMATION
640 {
641     ULONG                       UserStreamCount;
642     PMINIDUMP_USER_STREAM       UserStreamArray;
643 } MINIDUMP_USER_STREAM_INFORMATION, *PMINIDUMP_USER_STREAM_INFORMATION;
644
645 typedef enum _MINIDUMP_STREAM_TYPE
646 {
647     UnusedStream                = 0,
648     ReservedStream0             = 1,
649     ReservedStream1             = 2,
650     ThreadListStream            = 3,
651     ModuleListStream            = 4,
652     MemoryListStream            = 5,
653     ExceptionStream             = 6,
654     SystemInfoStream            = 7,
655     ThreadExListStream          = 8,
656     Memory64ListStream          = 9,
657     CommentStreamA              = 10,
658     CommentStreamW              = 11,
659     HandleDataStream            = 12,
660     FunctionTableStream         = 13,
661     UnloadedModuleListStream    = 14,
662     MiscInfoStream              = 15,
663     MemoryInfoListStream        = 16,
664     ThreadInfoListStream        = 17,
665
666     LastReservedStream          = 0xffff
667 } MINIDUMP_STREAM_TYPE;
668
669 BOOL WINAPI MiniDumpWriteDump(HANDLE, DWORD, HANDLE, MINIDUMP_TYPE,
670                               const PMINIDUMP_EXCEPTION_INFORMATION,
671                               const PMINIDUMP_USER_STREAM_INFORMATION,
672                               const PMINIDUMP_CALLBACK_INFORMATION);
673 BOOL WINAPI MiniDumpReadDumpStream(PVOID, ULONG, PMINIDUMP_DIRECTORY*, PVOID*,
674                                    ULONG*);
675
676
677 /*************************
678  *    MODULE handling    *
679  *************************/
680
681 /* flags for SymLoadModuleEx */
682 #define SLMFLAG_VIRTUAL         0x1
683 #define SLMFLAG_NO_SYMBOLS      0x4
684
685 typedef BOOL (CALLBACK *PENUMLOADED_MODULES_CALLBACK)(PSTR, DWORD, ULONG, PVOID);
686 BOOL   WINAPI EnumerateLoadedModules(HANDLE, PENUMLOADED_MODULES_CALLBACK, PVOID);
687 typedef BOOL (CALLBACK *PSYM_ENUMMODULES_CALLBACK)(PSTR, DWORD, PVOID);
688 BOOL    WINAPI SymEnumerateModules(HANDLE, PSYM_ENUMMODULES_CALLBACK, PVOID);
689 BOOL    WINAPI SymGetModuleInfo(HANDLE, DWORD, PIMAGEHLP_MODULE);
690 BOOL    WINAPI SymGetModuleInfoW(HANDLE, DWORD, PIMAGEHLP_MODULEW);
691 BOOL    WINAPI SymGetModuleInfo64(HANDLE, DWORD64, PIMAGEHLP_MODULE64);
692 BOOL    WINAPI SymGetModuleInfoW64(HANDLE, DWORD64, PIMAGEHLP_MODULEW64);
693 DWORD   WINAPI SymGetModuleBase(HANDLE, DWORD);
694 DWORD64 WINAPI SymGetModuleBase64(HANDLE, DWORD64);
695 DWORD   WINAPI SymLoadModule(HANDLE, HANDLE, PSTR, PSTR, DWORD, DWORD);
696 DWORD64 WINAPI SymLoadModule64(HANDLE, HANDLE, PSTR, PSTR, DWORD64, DWORD);
697 DWORD64 WINAPI SymLoadModuleEx(HANDLE, HANDLE, PCSTR, PCSTR, DWORD64, DWORD,
698                                PMODLOAD_DATA, DWORD);
699 BOOL    WINAPI SymUnloadModule(HANDLE, DWORD);
700 BOOL    WINAPI SymUnloadModule64(HANDLE, DWORD64);
701
702 /*************************
703  *    Symbol Handling    *
704  *************************/
705
706 #define IMAGEHLP_SYMBOL_INFO_VALUEPRESENT          1
707 #define IMAGEHLP_SYMBOL_INFO_REGISTER              SYMF_REGISTER        /*  0x08 */
708 #define IMAGEHLP_SYMBOL_INFO_REGRELATIVE           SYMF_REGREL          /*  0x10 */
709 #define IMAGEHLP_SYMBOL_INFO_FRAMERELATIVE         SYMF_FRAMEREL        /*  0x20 */
710 #define IMAGEHLP_SYMBOL_INFO_PARAMETER             SYMF_PARAMETER       /*  0x40 */
711 #define IMAGEHLP_SYMBOL_INFO_LOCAL                 SYMF_LOCAL           /*  0x80 */
712 #define IMAGEHLP_SYMBOL_INFO_CONSTANT              SYMF_CONSTANT        /* 0x100 */
713 #define IMAGEHLP_SYMBOL_FUNCTION                   SYMF_FUNCTION        /* 0x800 */
714
715 #define SYMFLAG_VALUEPRESENT     0x00000001
716 #define SYMFLAG_REGISTER         0x00000008
717 #define SYMFLAG_REGREL           0x00000010
718 #define SYMFLAG_FRAMEREL         0x00000020
719 #define SYMFLAG_PARAMETER        0x00000040
720 #define SYMFLAG_LOCAL            0x00000080
721 #define SYMFLAG_CONSTANT         0x00000100
722 #define SYMFLAG_EXPORT           0x00000200
723 #define SYMFLAG_FORWARDER        0x00000400
724 #define SYMFLAG_FUNCTION         0x00000800
725 #define SYMFLAG_VIRTUAL          0x00001000
726 #define SYMFLAG_THUNK            0x00002000
727 #define SYMFLAG_TLSREL           0x00004000
728
729 #define MAX_SYM_NAME    2000
730
731 typedef struct _SYMBOL_INFO
732 {
733     ULONG       SizeOfStruct;
734     ULONG       TypeIndex;
735     ULONG64     Reserved[2];
736     ULONG       info;   /* sdk states info, while MSDN says it's Index... */
737     ULONG       Size;
738     ULONG64     ModBase;
739     ULONG       Flags;
740     ULONG64     Value;
741     ULONG64     Address;
742     ULONG       Register;
743     ULONG       Scope;
744     ULONG       Tag;
745     ULONG       NameLen;
746     ULONG       MaxNameLen;
747     CHAR        Name[1];
748 } SYMBOL_INFO, *PSYMBOL_INFO;
749
750 typedef enum _IMAGEHLP_SYMBOL_TYPE_INFO 
751 {
752     TI_GET_SYMTAG,
753     TI_GET_SYMNAME,
754     TI_GET_LENGTH,
755     TI_GET_TYPE,
756     TI_GET_TYPEID,
757     TI_GET_BASETYPE,
758     TI_GET_ARRAYINDEXTYPEID,
759     TI_FINDCHILDREN,
760     TI_GET_DATAKIND,
761     TI_GET_ADDRESSOFFSET,
762     TI_GET_OFFSET,
763     TI_GET_VALUE,
764     TI_GET_COUNT,
765     TI_GET_CHILDRENCOUNT,
766     TI_GET_BITPOSITION,
767     TI_GET_VIRTUALBASECLASS,
768     TI_GET_VIRTUALTABLESHAPEID,
769     TI_GET_VIRTUALBASEPOINTEROFFSET,
770     TI_GET_CLASSPARENTID,
771     TI_GET_NESTED,
772     TI_GET_SYMINDEX,
773     TI_GET_LEXICALPARENT,
774     TI_GET_ADDRESS,
775     TI_GET_THISADJUST,
776     TI_GET_UDTKIND,
777     TI_IS_EQUIV_TO,
778     TI_GET_CALLING_CONVENTION,
779 } IMAGEHLP_SYMBOL_TYPE_INFO;
780
781 typedef struct _TI_FINDCHILDREN_PARAMS 
782 {
783     ULONG Count;
784     ULONG Start;
785     ULONG ChildId[1];
786 } TI_FINDCHILDREN_PARAMS;
787
788 #define UNDNAME_COMPLETE                 (0x0000)
789 #define UNDNAME_NO_LEADING_UNDERSCORES   (0x0001)
790 #define UNDNAME_NO_MS_KEYWORDS           (0x0002)
791 #define UNDNAME_NO_FUNCTION_RETURNS      (0x0004)
792 #define UNDNAME_NO_ALLOCATION_MODEL      (0x0008)
793 #define UNDNAME_NO_ALLOCATION_LANGUAGE   (0x0010)
794 #define UNDNAME_NO_MS_THISTYPE           (0x0020)
795 #define UNDNAME_NO_CV_THISTYPE           (0x0040)
796 #define UNDNAME_NO_THISTYPE              (0x0060)
797 #define UNDNAME_NO_ACCESS_SPECIFIERS     (0x0080)
798 #define UNDNAME_NO_THROW_SIGNATURES      (0x0100)
799 #define UNDNAME_NO_MEMBER_TYPE           (0x0200)
800 #define UNDNAME_NO_RETURN_UDT_MODEL      (0x0400)
801 #define UNDNAME_32_BIT_DECODE            (0x0800)
802 #define UNDNAME_NAME_ONLY                (0x1000)
803 #define UNDNAME_NO_ARGUMENTS             (0x2000)
804 #define UNDNAME_NO_SPECIAL_SYMS          (0x4000)
805
806 #define SYMSEARCH_MASKOBJS              0x01
807 #define SYMSEARCH_RECURSE               0x02
808 #define SYMSEARCH_GLOBALSONLY           0x04
809
810 BOOL WINAPI SymGetTypeInfo(HANDLE, DWORD64, ULONG, IMAGEHLP_SYMBOL_TYPE_INFO, PVOID);
811 typedef BOOL (CALLBACK *PSYM_ENUMERATESYMBOLS_CALLBACK)(PSYMBOL_INFO, ULONG, PVOID);
812 BOOL WINAPI SymEnumTypes(HANDLE, ULONG64, PSYM_ENUMERATESYMBOLS_CALLBACK, PVOID);
813 BOOL WINAPI SymFromAddr(HANDLE, DWORD64, DWORD64*, SYMBOL_INFO*);
814 BOOL WINAPI SymFromName(HANDLE, LPSTR, PSYMBOL_INFO);
815 BOOL WINAPI SymGetSymFromAddr(HANDLE, DWORD, PDWORD, PIMAGEHLP_SYMBOL);
816 BOOL WINAPI SymGetSymFromName(HANDLE, PSTR, PIMAGEHLP_SYMBOL);
817 BOOL WINAPI SymGetTypeFromName(HANDLE, ULONG64, LPSTR, PSYMBOL_INFO);
818 BOOL WINAPI SymGetSymNext(HANDLE, PIMAGEHLP_SYMBOL);
819 BOOL WINAPI SymGetSymPrev(HANDLE, PIMAGEHLP_SYMBOL);
820 BOOL WINAPI SymEnumSymbols(HANDLE, ULONG64, PCSTR, PSYM_ENUMERATESYMBOLS_CALLBACK,
821                            PVOID);
822 typedef BOOL (CALLBACK *PSYM_ENUMSYMBOLS_CALLBACK)(PSTR, DWORD, ULONG, PVOID);
823 BOOL WINAPI SymEnumerateSymbols(HANDLE, DWORD, PSYM_ENUMSYMBOLS_CALLBACK, PVOID);
824 typedef BOOL (CALLBACK *PSYMBOL_REGISTERED_CALLBACK)(HANDLE, ULONG, PVOID, PVOID);
825 BOOL WINAPI SymRegisterCallback(HANDLE, PSYMBOL_REGISTERED_CALLBACK, PVOID);
826 typedef BOOL (CALLBACK *PSYMBOL_REGISTERED_CALLBACK64)(HANDLE, ULONG, ULONG64, ULONG64);
827 BOOL WINAPI SymRegisterCallback64(HANDLE, PSYMBOL_REGISTERED_CALLBACK64, ULONG64);
828 BOOL WINAPI SymUnDName(PIMAGEHLP_SYMBOL, PSTR, DWORD);
829 DWORD WINAPI UnDecorateSymbolName(LPCSTR, LPSTR, DWORD, DWORD);
830 BOOL WINAPI SymMatchString(PCSTR string, PCSTR re, BOOL _case);
831 BOOL WINAPI SymMatchStringW(PCWSTR string, PCWSTR re, BOOL _case);
832 BOOL WINAPI SymSearch(HANDLE, ULONG64, DWORD, DWORD, PCSTR, DWORD64, PSYM_ENUMERATESYMBOLS_CALLBACK, PVOID, DWORD);
833
834 /*************************
835  *      Source Files     *
836  *************************/
837 typedef BOOL (CALLBACK *PSYM_ENUMSOURCEFILES_CALLBACK)(PSOURCEFILE, PVOID);
838
839 BOOL WINAPI SymEnumSourceFiles(HANDLE, ULONG64, LPSTR, PSYM_ENUMSOURCEFILES_CALLBACK,
840                                PVOID);
841 BOOL WINAPI SymGetLineFromAddr(HANDLE, DWORD, PDWORD, PIMAGEHLP_LINE);
842 BOOL WINAPI SymGetLineFromAddr64(HANDLE, DWORD64, PDWORD, PIMAGEHLP_LINE64);
843 BOOL WINAPI SymGetLinePrev(HANDLE, PIMAGEHLP_LINE);
844 BOOL WINAPI SymGetLinePrev64(HANDLE, PIMAGEHLP_LINE64);
845 BOOL WINAPI SymGetLineNext(HANDLE, PIMAGEHLP_LINE);
846 BOOL WINAPI SymGetLineNext64(HANDLE, PIMAGEHLP_LINE64);
847
848 typedef struct _SRCCODEINFO
849 {
850     DWORD       SizeOfStruct;
851     PVOID       Key;
852     DWORD64     ModBase;
853     char        Obj[MAX_PATH+1];
854     char        FileName[MAX_PATH+1];
855     DWORD       LineNumber;
856     DWORD64     Address;
857 } SRCCODEINFO, *PSRCCODEINFO;
858
859 typedef BOOL (CALLBACK* PSYM_ENUMLINES_CALLBACK)(PSRCCODEINFO, PVOID);
860 BOOL WINAPI SymEnumLines(HANDLE, ULONG64, PCSTR, PCSTR, PSYM_ENUMLINES_CALLBACK, PVOID);
861
862 /*************************
863  * File & image handling *
864  *************************/
865 BOOL WINAPI SymInitialize(HANDLE, PSTR, BOOL);
866 BOOL WINAPI SymCleanup(HANDLE);
867
868 HANDLE WINAPI FindDebugInfoFile(PSTR, PSTR, PSTR);
869 typedef BOOL (CALLBACK *PFIND_DEBUG_FILE_CALLBACK)(HANDLE, PSTR, PVOID);
870 HANDLE WINAPI FindDebugInfoFileEx(PSTR, PSTR, PSTR, PFIND_DEBUG_FILE_CALLBACK, PVOID);
871 typedef BOOL (CALLBACK *PFINDFILEINPATHCALLBACK)(PSTR, PVOID);
872 BOOL WINAPI SymFindFileInPath(HANDLE, LPSTR, LPSTR, PVOID, DWORD, DWORD, DWORD,
873                               LPSTR, PFINDFILEINPATHCALLBACK, PVOID);
874 HANDLE WINAPI FindExecutableImage(PSTR, PSTR, PSTR);
875 typedef BOOL (CALLBACK *PFIND_EXE_FILE_CALLBACK)(HANDLE, PSTR, PVOID);
876 HANDLE WINAPI FindExecutableImageEx(PSTR, PSTR, PSTR, PFIND_EXE_FILE_CALLBACK, PVOID);
877 PIMAGE_NT_HEADERS WINAPI ImageNtHeader(PVOID);
878 PVOID WINAPI ImageDirectoryEntryToDataEx(PVOID, BOOLEAN, USHORT, PULONG,
879                                          PIMAGE_SECTION_HEADER *);
880 PVOID WINAPI ImageDirectoryEntryToData(PVOID, BOOLEAN, USHORT, PULONG);
881 PIMAGE_SECTION_HEADER WINAPI ImageRvaToSection(PIMAGE_NT_HEADERS, PVOID, ULONG);
882 PVOID WINAPI ImageRvaToVa(PIMAGE_NT_HEADERS, PVOID, ULONG, PIMAGE_SECTION_HEADER*);
883 BOOL WINAPI SymGetSearchPath(HANDLE, PSTR, DWORD);
884 BOOL WINAPI SymSetSearchPath(HANDLE, PSTR);
885 DWORD WINAPI GetTimestampForLoadedLibrary(HMODULE);
886 BOOL WINAPI MakeSureDirectoryPathExists(PCSTR);
887 BOOL WINAPI SearchTreeForFile(PSTR, PSTR, PSTR);
888 typedef BOOL (CALLBACK *PENUMDIRTREE_CALLBACK)(LPCSTR, PVOID);
889 BOOL WINAPI EnumDirTree(HANDLE, PCSTR, PCSTR, LPSTR, PENUMDIRTREE_CALLBACK, void*);
890 BOOL WINAPI SymMatchFileName(LPSTR, LPSTR, LPSTR*, LPSTR*);
891
892 /*************************
893  *   Context management  *
894  *************************/
895 BOOL WINAPI SymSetContext(HANDLE, PIMAGEHLP_STACK_FRAME, PIMAGEHLP_CONTEXT);
896
897
898 /*************************
899  *    Stack management   *
900  *************************/
901
902 typedef struct _KDHELP
903 {
904     DWORD       Thread;
905     DWORD       ThCallbackStack;
906     DWORD       NextCallback;
907     DWORD       FramePointer;
908     DWORD       KiCallUserMode;
909     DWORD       KeUserCallbackDispatcher;
910     DWORD       SystemRangeStart;
911 } KDHELP, *PKDHELP;
912
913 typedef struct _KDHELP64
914 {
915     DWORD64     Thread;
916     DWORD       ThCallbackStack;
917     DWORD       ThCallbackBStore;
918     DWORD       NextCallback;
919     DWORD       FramePointer;
920     DWORD64     KiCallUserMode;
921     DWORD64     KeUserCallbackDispatcher;
922     DWORD64     SystemRangeStart;
923     DWORD64     Reserved[8];
924 } KDHELP64, *PKDHELP64;
925
926 typedef struct _STACKFRAME
927 {
928     ADDRESS     AddrPC;
929     ADDRESS     AddrReturn;
930     ADDRESS     AddrFrame;
931     ADDRESS     AddrStack;
932     PVOID       FuncTableEntry;
933     DWORD       Params[4];
934     BOOL        Far;
935     BOOL        Virtual;
936     DWORD       Reserved[3];
937     KDHELP      KdHelp;
938     ADDRESS     AddrBStore;
939 } STACKFRAME, *LPSTACKFRAME;
940
941 typedef struct _STACKFRAME64
942 {
943     ADDRESS64   AddrPC;
944     ADDRESS64   AddrReturn;
945     ADDRESS64   AddrFrame;
946     ADDRESS64   AddrStack;
947     ADDRESS64   AddrBStore;
948     PVOID       FuncTableEntry;
949     DWORD64     Params[4];
950     BOOL        Far;
951     BOOL        Virtual;
952     DWORD64     Reserved[3];
953     KDHELP64    KdHelp;
954 } STACKFRAME64, *LPSTACKFRAME64;
955
956 typedef BOOL (CALLBACK *PREAD_PROCESS_MEMORY_ROUTINE)
957     (HANDLE, DWORD, PVOID, DWORD, PDWORD);
958 typedef PVOID (CALLBACK *PFUNCTION_TABLE_ACCESS_ROUTINE)(HANDLE, DWORD);
959 typedef DWORD (CALLBACK *PGET_MODULE_BASE_ROUTINE)(HANDLE, DWORD);
960 typedef DWORD (CALLBACK *PTRANSLATE_ADDRESS_ROUTINE)(HANDLE, HANDLE, LPADDRESS);
961 BOOL WINAPI StackWalk(DWORD, HANDLE, HANDLE, LPSTACKFRAME, PVOID,
962                       PREAD_PROCESS_MEMORY_ROUTINE,
963                       PFUNCTION_TABLE_ACCESS_ROUTINE,
964                       PGET_MODULE_BASE_ROUTINE,
965                       PTRANSLATE_ADDRESS_ROUTINE);
966
967 typedef BOOL (CALLBACK *PREAD_PROCESS_MEMORY_ROUTINE64)
968     (HANDLE, DWORD64, PVOID, DWORD, PDWORD);
969 typedef PVOID (CALLBACK *PFUNCTION_TABLE_ACCESS_ROUTINE64)(HANDLE, DWORD64);
970 typedef DWORD64 (CALLBACK *PGET_MODULE_BASE_ROUTINE64)(HANDLE, DWORD64);
971 typedef DWORD64 (CALLBACK *PTRANSLATE_ADDRESS_ROUTINE64)(HANDLE, HANDLE, LPADDRESS64);
972 BOOL WINAPI StackWalk64(DWORD, HANDLE, HANDLE, LPSTACKFRAME64, PVOID,
973                         PREAD_PROCESS_MEMORY_ROUTINE64,
974                         PFUNCTION_TABLE_ACCESS_ROUTINE64,
975                         PGET_MODULE_BASE_ROUTINE64,
976                         PTRANSLATE_ADDRESS_ROUTINE64);
977
978 PVOID WINAPI SymFunctionTableAccess(HANDLE, DWORD);
979 PVOID WINAPI SymFunctionTableAccess64(HANDLE, DWORD64);
980
981 typedef PVOID (CALLBACK *PSYMBOL_FUNCENTRY_CALLBACK)(HANDLE, DWORD, PVOID);
982 typedef PVOID (CALLBACK *PSYMBOL_FUNCENTRY_CALLBACK64)(HANDLE, ULONG64, ULONG64);
983
984 BOOL WINAPI SymRegisterFunctionEntryCallback(HANDLE, PSYMBOL_FUNCENTRY_CALLBACK, PVOID);
985 BOOL WINAPI SymRegisterFunctionEntryCallback64(HANDLE, PSYMBOL_FUNCENTRY_CALLBACK64, ULONG64);
986
987 /*************************
988  * Version, global stuff *
989  *************************/
990
991 typedef struct API_VERSION
992 {
993     USHORT  MajorVersion;
994     USHORT  MinorVersion;
995     USHORT  Revision;
996     USHORT  Reserved;
997 } API_VERSION, *LPAPI_VERSION;
998
999 LPAPI_VERSION WINAPI ImagehlpApiVersion(void);
1000 LPAPI_VERSION WINAPI ImagehlpApiVersionEx(LPAPI_VERSION);
1001
1002 typedef struct _IMAGE_DEBUG_INFORMATION
1003 {
1004     LIST_ENTRY                  List;
1005     DWORD                       ReservedSize;
1006     PVOID                       ReservedMappedBase;
1007     USHORT                      ReservedMachine;
1008     USHORT                      ReservedCharacteristics;
1009     DWORD                       ReservedCheckSum;
1010     DWORD                       ImageBase;
1011     DWORD                       SizeOfImage;
1012     DWORD                       ReservedNumberOfSections;
1013     PIMAGE_SECTION_HEADER       ReservedSections;
1014     DWORD                       ReservedExportedNamesSize;
1015     PSTR                        ReservedExportedNames;
1016     DWORD                       ReservedNumberOfFunctionTableEntries;
1017     PIMAGE_FUNCTION_ENTRY       ReservedFunctionTableEntries;
1018     DWORD                       ReservedLowestFunctionStartingAddress;
1019     DWORD                       ReservedHighestFunctionEndingAddress;
1020     DWORD                       ReservedNumberOfFpoTableEntries;
1021     PFPO_DATA                   ReservedFpoTableEntries;
1022     DWORD                       SizeOfCoffSymbols;
1023     PIMAGE_COFF_SYMBOLS_HEADER  CoffSymbols;
1024     DWORD                       ReservedSizeOfCodeViewSymbols;
1025     PVOID                       ReservedCodeViewSymbols;
1026     PSTR                        ImageFilePath;
1027     PSTR                        ImageFileName;
1028     PSTR                        ReservedDebugFilePath;
1029     DWORD                       ReservedTimeDateStamp;
1030     BOOL                        ReservedRomImage;
1031     PIMAGE_DEBUG_DIRECTORY      ReservedDebugDirectory;
1032     DWORD                       ReservedNumberOfDebugDirectories;
1033     DWORD                       ReservedOriginalFunctionTableBaseAddress;
1034     DWORD                       Reserved[ 2 ];
1035 } IMAGE_DEBUG_INFORMATION, *PIMAGE_DEBUG_INFORMATION;
1036
1037
1038 PIMAGE_DEBUG_INFORMATION WINAPI MapDebugInformation(HANDLE, PSTR, PSTR, DWORD);
1039
1040 BOOL WINAPI UnmapDebugInformation(PIMAGE_DEBUG_INFORMATION);
1041
1042 DWORD   WINAPI  SymGetOptions(void);
1043 DWORD   WINAPI  SymSetOptions(DWORD);
1044
1045 BOOL WINAPI SymSetParentWindow(HWND hwnd);
1046
1047 /* Symbol server bits */
1048 typedef BOOL     (WINAPI* PSYMBOLSERVERPROC)(LPCSTR, LPCSTR, PVOID, DWORD, DWORD, LPSTR);
1049 typedef BOOL     (WINAPI* PSYMBOLSERVEROPENPROC)(void);
1050 typedef BOOL     (WINAPI* PSYMBOLSERVERCLOSEPROC)(void);
1051 typedef BOOL     (WINAPI* PSYMBOLSERVERSETOPTIONSPROC)(UINT_PTR, ULONG64);
1052 typedef BOOL     (CALLBACK* PSYMBOLSERVERCALLBACKPROC)(UINT_PTR, ULONG64, ULONG64);
1053 typedef UINT_PTR (WINAPI* PSYMBOLSERVERGETOPTIONSPROC)(void);
1054 typedef BOOL     (WINAPI* PSYMBOLSERVERPINGPROC)(LPCSTR);
1055
1056 #define SSRVOPT_CALLBACK            0x0001
1057 #define SSRVOPT_DWORD               0x0002
1058 #define SSRVOPT_DWORDPTR            0x0004
1059 #define SSRVOPT_GUIDPTR             0x0008
1060 #define SSRVOPT_OLDGUIDPTR          0x0010
1061 #define SSRVOPT_UNATTENDED          0x0020
1062 #define SSRVOPT_NOCOPY              0x0040
1063 #define SSRVOPT_PARENTWIN           0x0080
1064 #define SSRVOPT_PARAMTYPE           0x0100
1065 #define SSRVOPT_SECURE              0x0200
1066 #define SSRVOPT_TRACE               0x0400
1067 #define SSRVOPT_SETCONTEXT          0x0800
1068 #define SSRVOPT_PROXY               0x1000
1069 #define SSRVOPT_DOWNSTREAM_STORE    0x2000
1070 #define SSRVOPT_RESET               ((ULONG_PTR)-1)
1071
1072 #define SSRVACTION_TRACE        1
1073 #define SSRVACTION_QUERYCANCEL  2
1074 #define SSRVACTION_EVENT        3
1075
1076 #ifdef __cplusplus
1077 } /* extern "C" */
1078 #endif /* defined(__cplusplus) */
1079
1080 #endif  /* __WINE_DBGHELP_H */