comctl32/listview: Implemented LVM_SORTITEMSEX.
[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., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, 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 #ifdef _WIN64
29 #ifndef _IMAGEHLP64
30 #define _IMAGEHLP64
31 #endif
32 #endif
33
34 #define IMAGEAPI WINAPI
35 #define DBHLPAPI IMAGEAPI
36
37 typedef struct _LOADED_IMAGE
38 {
39     PSTR                        ModuleName;
40     HANDLE                      hFile;
41     PUCHAR                      MappedAddress;
42     PIMAGE_NT_HEADERS           FileHeader;
43     PIMAGE_SECTION_HEADER       LastRvaSection;
44     ULONG                       NumberOfSections;
45     PIMAGE_SECTION_HEADER       Sections;
46     ULONG                       Characteristics;
47     BOOLEAN                     fSystemImage;
48     BOOLEAN                     fDOSImage;
49     BOOLEAN                     fReadOnly;
50     UCHAR                       Version;
51     LIST_ENTRY                  Links;
52     ULONG                       SizeOfImage;
53 } LOADED_IMAGE, *PLOADED_IMAGE;
54
55 /*************************
56  *    IMAGEHLP equiv     *
57  *************************/
58
59 typedef enum
60 {
61     AddrMode1616,
62     AddrMode1632,
63     AddrModeReal,
64     AddrModeFlat
65 } ADDRESS_MODE;
66
67 #if !defined(_IMAGEHLP_SOURCE_) && defined(_IMAGEHLP64)
68 #define ADDRESS ADDRESS64
69 #define LPADDRESS LPADDRESS64
70 #else
71 typedef struct _tagADDRESS
72 {
73     DWORD                       Offset;
74     WORD                        Segment;
75     ADDRESS_MODE                Mode;
76 } ADDRESS, *LPADDRESS;
77 #endif
78
79 typedef struct _tagADDRESS64
80 {
81     DWORD64                     Offset;
82     WORD                        Segment;
83     ADDRESS_MODE                Mode;
84 } ADDRESS64, *LPADDRESS64;
85
86 #define SYMF_OMAP_GENERATED   0x00000001
87 #define SYMF_OMAP_MODIFIED    0x00000002
88 #define SYMF_USER_GENERATED   0x00000004
89 #define SYMF_REGISTER         0x00000008
90 #define SYMF_REGREL           0x00000010
91 #define SYMF_FRAMEREL         0x00000020
92 #define SYMF_PARAMETER        0x00000040
93 #define SYMF_LOCAL            0x00000080
94 #define SYMF_CONSTANT         0x00000100
95 #define SYMF_EXPORT           0x00000200
96 #define SYMF_FORWARDER        0x00000400
97 #define SYMF_FUNCTION         0x00000800
98 #define SYMF_VIRTUAL          0x00001000
99 #define SYMF_THUNK            0x00002000
100 #define SYMF_TLSREL           0x00004000
101
102 typedef enum 
103 {
104     SymNone = 0,
105     SymCoff,
106     SymCv,
107     SymPdb,
108     SymExport,
109     SymDeferred,
110     SymSym,
111     SymDia,
112     SymVirtual,
113     NumSymTypes
114 } SYM_TYPE;
115
116 #if !defined(_IMAGEHLP_SOURCE_) && defined(_IMAGEHLP64)
117 #define IMAGEHLP_SYMBOL IMAGEHLP_SYMBOL64
118 #define PIMAGEHLP_SYMBOL PIMAGEHLP_SYMBOL64
119 #else
120 typedef struct _IMAGEHLP_SYMBOL
121 {
122     DWORD                       SizeOfStruct;
123     DWORD                       Address;
124     DWORD                       Size;
125     DWORD                       Flags;
126     DWORD                       MaxNameLength;
127     CHAR                        Name[1];
128 } IMAGEHLP_SYMBOL, *PIMAGEHLP_SYMBOL;
129 #endif
130
131 typedef struct _IMAGEHLP_SYMBOL64
132 {
133     DWORD                       SizeOfStruct;
134     DWORD64                     Address;
135     DWORD                       Size;
136     DWORD                       Flags;
137     DWORD                       MaxNameLength;
138     CHAR                        Name[1];
139 } IMAGEHLP_SYMBOL64, *PIMAGEHLP_SYMBOL64;
140
141 typedef struct _IMAGEHLP_SYMBOLW64
142 {
143     DWORD                       SizeOfStruct;
144     DWORD64                     Address;
145     DWORD                       Size;
146     DWORD                       Flags;
147     DWORD                       MaxNameLength;
148     WCHAR                       Name[1];
149 } IMAGEHLP_SYMBOLW64, *PIMAGEHLP_SYMBOLW64;
150
151 #if !defined(_IMAGEHLP_SOURCE_) && defined(_IMAGEHLP64)
152 #define IMAGEHLP_MODULE IMAGEHLP_MODULE64
153 #define PIMAGEHLP_MODULE PIMAGEHLP_MODULE64
154 #define IMAGEHLP_MODULEW IMAGEHLP_MODULEW64
155 #define PIMAGEHLP_MODULEW PIMAGEHLP_MODULEW64
156 #else
157 typedef struct _IMAGEHLP_MODULE
158 {
159     DWORD                       SizeOfStruct;
160     DWORD                       BaseOfImage;
161     DWORD                       ImageSize;
162     DWORD                       TimeDateStamp;
163     DWORD                       CheckSum;
164     DWORD                       NumSyms;
165     SYM_TYPE                    SymType;
166     CHAR                        ModuleName[32];
167     CHAR                        ImageName[256];
168     CHAR                        LoadedImageName[256];
169 } IMAGEHLP_MODULE, *PIMAGEHLP_MODULE;
170
171 typedef struct _IMAGEHLP_MODULEW
172 {
173     DWORD                       SizeOfStruct;
174     DWORD                       BaseOfImage;
175     DWORD                       ImageSize;
176     DWORD                       TimeDateStamp;
177     DWORD                       CheckSum;
178     DWORD                       NumSyms;
179     SYM_TYPE                    SymType;
180     WCHAR                       ModuleName[32];
181     WCHAR                       ImageName[256];
182     WCHAR                       LoadedImageName[256];
183 } IMAGEHLP_MODULEW, *PIMAGEHLP_MODULEW;
184 #endif
185
186 typedef struct _IMAGEHLP_MODULE64
187 {
188     DWORD                       SizeOfStruct;
189     DWORD64                     BaseOfImage;
190     DWORD                       ImageSize;
191     DWORD                       TimeDateStamp;
192     DWORD                       CheckSum;
193     DWORD                       NumSyms;
194     SYM_TYPE                    SymType;
195     CHAR                        ModuleName[32];
196     CHAR                        ImageName[256];
197     CHAR                        LoadedImageName[256];
198     CHAR                        LoadedPdbName[256];
199     DWORD                       CVSig;
200     CHAR                        CVData[MAX_PATH*3];
201     DWORD                       PdbSig;
202     GUID                        PdbSig70;
203     DWORD                       PdbAge;
204     BOOL                        PdbUnmatched;
205     BOOL                        DbgUnmatched;
206     BOOL                        LineNumbers;
207     BOOL                        GlobalSymbols;
208     BOOL                        TypeInfo;
209     BOOL                        SourceIndexed;
210     BOOL                        Publics;
211 } IMAGEHLP_MODULE64, *PIMAGEHLP_MODULE64;
212
213 typedef struct _IMAGEHLP_MODULEW64
214 {
215     DWORD                       SizeOfStruct;
216     DWORD64                     BaseOfImage;
217     DWORD                       ImageSize;
218     DWORD                       TimeDateStamp;
219     DWORD                       CheckSum;
220     DWORD                       NumSyms;
221     SYM_TYPE                    SymType;
222     WCHAR                       ModuleName[32];
223     WCHAR                       ImageName[256];
224     WCHAR                       LoadedImageName[256];
225     WCHAR                       LoadedPdbName[256];
226     DWORD                       CVSig;
227     WCHAR                       CVData[MAX_PATH*3];
228     DWORD                       PdbSig;
229     GUID                        PdbSig70;
230     DWORD                       PdbAge;
231     BOOL                        PdbUnmatched;
232     BOOL                        DbgUnmatched;
233     BOOL                        LineNumbers;
234     BOOL                        GlobalSymbols;
235     BOOL                        TypeInfo;
236     BOOL                        SourceIndexed;
237     BOOL                        Publics;
238 } IMAGEHLP_MODULEW64, *PIMAGEHLP_MODULEW64;
239
240 #if !defined(_IMAGEHLP_SOURCE_) && defined(_IMAGEHLP64)
241 #define IMAGEHLP_LINE IMAGEHLP_LINE64
242 #define PIMAGEHLP_LINE PIMAGEHLP_LINE64
243 #define IMAGEHLP_LINEW IMAGEHLP_LINEW64
244 #define PIMAGEHLP_LINEW PIMAGEHLP_LINEW64
245 #else
246 typedef struct _IMAGEHLP_LINE
247 {
248     DWORD                       SizeOfStruct;
249     PVOID                       Key;
250     DWORD                       LineNumber;
251     PCHAR                       FileName;
252     DWORD                       Address;
253 } IMAGEHLP_LINE, *PIMAGEHLP_LINE;
254
255 typedef struct _IMAGEHLP_LINEW
256 {
257     DWORD                       SizeOfStruct;
258     PVOID                       Key;
259     DWORD                       LineNumber;
260     PWSTR                       FileName;
261     DWORD                       Address;
262 } IMAGEHLP_LINEW, *PIMAGEHLP_LINEW;
263 #endif
264
265 typedef struct _IMAGEHLP_LINE64
266 {
267     DWORD                       SizeOfStruct;
268     PVOID                       Key;
269     DWORD                       LineNumber;
270     PCHAR                       FileName;
271     DWORD64                     Address;
272 } IMAGEHLP_LINE64, *PIMAGEHLP_LINE64;
273
274 typedef struct _IMAGEHLP_LINEW64
275 {
276     DWORD                       SizeOfStruct;
277     PVOID                       Key;
278     DWORD                       LineNumber;
279     PWSTR                       FileName;
280     DWORD64                     Address;
281 } IMAGEHLP_LINEW64, *PIMAGEHLP_LINEW64;
282
283 typedef struct _SOURCEFILE
284 {
285     DWORD64                     ModBase;
286     PCHAR                       FileName;
287 } SOURCEFILE, *PSOURCEFILE;
288
289 typedef struct _SOURCEFILEW
290 {
291     DWORD64                     ModBase;
292     PWSTR                       FileName;
293 } SOURCEFILEW, *PSOURCEFILEW;
294
295 #define CBA_DEFERRED_SYMBOL_LOAD_START          0x00000001
296 #define CBA_DEFERRED_SYMBOL_LOAD_COMPLETE       0x00000002
297 #define CBA_DEFERRED_SYMBOL_LOAD_FAILURE        0x00000003
298 #define CBA_SYMBOLS_UNLOADED                    0x00000004
299 #define CBA_DUPLICATE_SYMBOL                    0x00000005
300 #define CBA_READ_MEMORY                         0x00000006
301 #define CBA_DEFERRED_SYMBOL_LOAD_CANCEL         0x00000007
302 #define CBA_SET_OPTIONS                         0x00000008
303 #define CBA_EVENT                               0x00000010
304 #define CBA_DEFERRED_SYMBOL_LOAD_PARTIAL        0x00000020
305 #define CBA_DEBUG_INFO                          0x10000000
306
307 typedef struct _IMAGEHLP_CBA_READ_MEMORY
308 {
309     DWORD64   addr;
310     PVOID     buf;
311     DWORD     bytes;
312     DWORD    *bytesread;
313 } IMAGEHLP_CBA_READ_MEMORY, *PIMAGEHLP_CBA_READ_MEMORY;
314
315 enum
316 {
317     sevInfo = 0,
318     sevProblem,
319     sevAttn,
320     sevFatal,
321     sevMax
322 };
323
324 #define EVENT_SRCSPEW_START 100
325 #define EVENT_SRCSPEW       100
326 #define EVENT_SRCSPEW_END   199
327
328 typedef struct _IMAGEHLP_CBA_EVENT
329 {
330     DWORD       severity;
331     DWORD       code;
332     PCHAR       desc;
333     PVOID       object;
334 } IMAGEHLP_CBA_EVENT, *PIMAGEHLP_CBA_EVENT;
335
336 typedef struct _IMAGEHLP_CBA_EVENTW
337 {
338     DWORD       severity;
339     DWORD       code;
340     PCWSTR      desc;
341     PVOID       object;
342 } IMAGEHLP_CBA_EVENTW, *PIMAGEHLP_CBA_EVENTW;
343
344 #if !defined(_IMAGEHLP_SOURCE_) && defined(_IMAGEHLP64)
345 #define IMAGEHLP_DEFERRED_SYMBOL_LOAD IMAGEHLP_DEFERRED_SYMBOL_LOAD64
346 #define PIMAGEHLP_DEFERRED_SYMBOL_LOAD PIMAGEHLP_DEFERRED_SYMBOL_LOAD64
347 #else
348 typedef struct _IMAGEHLP_DEFERRED_SYMBOL_LOAD
349 {
350     DWORD                       SizeOfStruct;
351     DWORD                       BaseOfImage;
352     DWORD                       CheckSum;
353     DWORD                       TimeDateStamp;
354     CHAR                        FileName[MAX_PATH];
355     BOOLEAN                     Reparse;
356     HANDLE                      hFile;
357 } IMAGEHLP_DEFERRED_SYMBOL_LOAD, *PIMAGEHLP_DEFERRED_SYMBOL_LOAD;
358 #endif
359
360 typedef struct _IMAGEHLP_DEFERRED_SYMBOL_LOAD64
361 {
362     DWORD                       SizeOfStruct;
363     DWORD64                     BaseOfImage;
364     DWORD                       CheckSum;
365     DWORD                       TimeDateStamp;
366     CHAR                        FileName[MAX_PATH];
367     BOOLEAN                     Reparse;
368     HANDLE                      hFile;
369     DWORD                       Flags;
370 } IMAGEHLP_DEFERRED_SYMBOL_LOAD64, *PIMAGEHLP_DEFERRED_SYMBOL_LOAD64;
371
372 typedef struct _IMAGEHLP_DEFERRED_SYMBOL_LOADW64
373 {
374     DWORD                       SizeOfStruct;
375     DWORD64                     BaseOfImage;
376     DWORD                       CheckSum;
377     DWORD                       TimeDateStamp;
378     WCHAR                       FileName[MAX_PATH + 1];
379     BOOLEAN                     Reparse;
380     HANDLE                      hFile;
381     DWORD                       Flags;
382 } IMAGEHLP_DEFERRED_SYMBOL_LOADW64, *PIMAGEHLP_DEFERRED_SYMBOL_LOADW64;
383
384 #if !defined(_IMAGEHLP_SOURCE_) && defined(_IMAGEHLP64)
385 #define IMAGEHLP_DUPLICATE_SYMBOL IMAGEHLP_DUPLICATE_SYMBOL64
386 #define PIMAGEHLP_DUPLICATE_SYMBOL PIMAGEHLP_DUPLICATE_SYMBOL64
387 #else
388 typedef struct _IMAGEHLP_DUPLICATE_SYMBOL
389 {
390     DWORD                       SizeOfStruct;
391     DWORD                       NumberOfDups;
392     PIMAGEHLP_SYMBOL            Symbol;
393     DWORD                       SelectedSymbol;
394 } IMAGEHLP_DUPLICATE_SYMBOL, *PIMAGEHLP_DUPLICATE_SYMBOL;
395 #endif
396
397 typedef struct _IMAGEHLP_DUPLICATE_SYMBOL64
398 {
399     DWORD                       SizeOfStruct;
400     DWORD                       NumberOfDups;
401     PIMAGEHLP_SYMBOL64          Symbol;
402     DWORD                       SelectedSymbol;
403 } IMAGEHLP_DUPLICATE_SYMBOL64, *PIMAGEHLP_DUPLICATE_SYMBOL64;
404
405 #define SYMOPT_CASE_INSENSITIVE         0x00000001
406 #define SYMOPT_UNDNAME                  0x00000002
407 #define SYMOPT_DEFERRED_LOADS           0x00000004
408 #define SYMOPT_NO_CPP                   0x00000008
409 #define SYMOPT_LOAD_LINES               0x00000010
410 #define SYMOPT_OMAP_FIND_NEAREST        0x00000020
411 #define SYMOPT_LOAD_ANYTHING            0x00000040
412 #define SYMOPT_IGNORE_CVREC             0x00000080
413 #define SYMOPT_NO_UNQUALIFIED_LOADS     0x00000100
414 #define SYMOPT_FAIL_CRITICAL_ERRORS     0x00000200
415 #define SYMOPT_EXACT_SYMBOLS            0x00000400
416 #define SYMOPT_WILD_UNDERSCORE          0x00000800
417 #define SYMOPT_USE_DEFAULTS             0x00001000
418 /* latest SDK defines:
419 #define SYMOPT_ALLOW_ABSOLUTE_SYMBOLS   0x00000800
420 #define SYMOPT_IGNORE_NT_SYMPATH        0x00001000
421 */
422 #define SYMOPT_INCLUDE_32BIT_MODULES    0x00002000
423 #define SYMOPT_PUBLICS_ONLY             0x00004000
424 #define SYMOPT_NO_PUBLICS               0x00008000
425 #define SYMOPT_AUTO_PUBLICS             0x00010000
426 #define SYMOPT_NO_IMAGE_SEARCH          0x00020000
427 #define SYMOPT_SECURE                   0x00040000
428 #define SYMOPT_NO_PROMPTS               0x00080000
429 #define SYMOPT_OVERWRITE                0x00100000
430 #define SYMOPT_IGNORE_IMAGEDIR          0x00200000
431
432 #define SYMOPT_DEBUG                    0x80000000
433
434 typedef struct _IMAGEHLP_STACK_FRAME
435 {
436     ULONG64     InstructionOffset;
437     ULONG64     ReturnOffset;
438     ULONG64     FrameOffset;
439     ULONG64     StackOffset;
440     ULONG64     BackingStoreOffset;
441     ULONG64     FuncTableEntry;
442     ULONG64     Params[4];
443     ULONG64     Reserved[5];
444     BOOL        Virtual;
445     ULONG       Reserved2;
446 } IMAGEHLP_STACK_FRAME, *PIMAGEHLP_STACK_FRAME;
447
448 typedef VOID IMAGEHLP_CONTEXT, *PIMAGEHLP_CONTEXT;
449
450 #define DBHHEADER_DEBUGDIRS     0x1
451 typedef struct _DBGHELP_MODLOAD_DATA
452 {
453     DWORD               ssize;
454     DWORD               ssig;
455     PVOID               data;
456     DWORD               size;
457     DWORD               flags;
458 } MODLOAD_DATA, *PMODLOAD_DATA;
459
460 /*************************
461  *       MiniDUMP        *
462  *************************/
463
464 #include <pshpack4.h>
465 /* DebugHelp */
466
467 #define MINIDUMP_SIGNATURE 0x504D444D /* 'MDMP' */
468 #define MINIDUMP_VERSION   (42899)
469
470 typedef DWORD   RVA;
471 typedef ULONG64 RVA64;
472
473 typedef enum _MINIDUMP_TYPE 
474 {
475     MiniDumpNormal                              = 0x0000,
476     MiniDumpWithDataSegs                        = 0x0001,
477     MiniDumpWithFullMemory                      = 0x0002,
478     MiniDumpWithHandleData                      = 0x0004,
479     MiniDumpFilterMemory                        = 0x0008,
480     MiniDumpScanMemory                          = 0x0010,
481     MiniDumpWithUnloadedModules                 = 0x0020,
482     MiniDumpWithIndirectlyReferencedMemory      = 0x0040,
483     MiniDumpFilterModulePaths                   = 0x0080,
484     MiniDumpWithProcessThreadData               = 0x0100,
485     MiniDumpWithPrivateReadWriteMemory          = 0x0200,
486     MiniDumpWithoutOptionalData                 = 0x0400,
487     MiniDumpWithFullMemoryInfo                  = 0x0800,
488     MiniDumpWithThreadInfo                      = 0x1000,
489     MiniDumpWithCodeSegs                        = 0x2000
490 } MINIDUMP_TYPE;
491
492 typedef enum _MINIDUMP_CALLBACK_TYPE
493 {
494     ModuleCallback,
495     ThreadCallback,
496     ThreadExCallback,
497     IncludeThreadCallback,
498     IncludeModuleCallback,
499     MemoryCallback,
500 } MINIDUMP_CALLBACK_TYPE;
501
502 typedef struct _MINIDUMP_THREAD_CALLBACK
503 {
504     ULONG                       ThreadId;
505     HANDLE                      ThreadHandle;
506     CONTEXT                     Context;
507     ULONG                       SizeOfContext;
508     ULONG64                     StackBase;
509     ULONG64                     StackEnd;
510 } MINIDUMP_THREAD_CALLBACK, *PMINIDUMP_THREAD_CALLBACK;
511
512 typedef struct _MINIDUMP_THREAD_EX_CALLBACK 
513 {
514     ULONG                       ThreadId;
515     HANDLE                      ThreadHandle;
516     CONTEXT                     Context;
517     ULONG                       SizeOfContext;
518     ULONG64                     StackBase;
519     ULONG64                     StackEnd;
520     ULONG64                     BackingStoreBase;
521     ULONG64                     BackingStoreEnd;
522 } MINIDUMP_THREAD_EX_CALLBACK, *PMINIDUMP_THREAD_EX_CALLBACK;
523
524 typedef struct _MINIDUMP_INCLUDE_THREAD_CALLBACK
525 {
526     ULONG ThreadId;
527 } MINIDUMP_INCLUDE_THREAD_CALLBACK, *PMINIDUMP_INCLUDE_THREAD_CALLBACK;
528
529 typedef enum _THREAD_WRITE_FLAGS 
530 {
531     ThreadWriteThread            = 0x0001,
532     ThreadWriteStack             = 0x0002,
533     ThreadWriteContext           = 0x0004,
534     ThreadWriteBackingStore      = 0x0008,
535     ThreadWriteInstructionWindow = 0x0010,
536     ThreadWriteThreadData        = 0x0020,
537     ThreadWriteThreadInfo        = 0x0040
538 } THREAD_WRITE_FLAGS;
539
540 typedef struct _MINIDUMP_MODULE_CALLBACK 
541 {
542     PWCHAR                      FullPath;
543     ULONG64                     BaseOfImage;
544     ULONG                       SizeOfImage;
545     ULONG                       CheckSum;
546     ULONG                       TimeDateStamp;
547     VS_FIXEDFILEINFO            VersionInfo;
548     PVOID                       CvRecord;
549     ULONG                       SizeOfCvRecord;
550     PVOID                       MiscRecord;
551     ULONG                       SizeOfMiscRecord;
552 } MINIDUMP_MODULE_CALLBACK, *PMINIDUMP_MODULE_CALLBACK;
553
554 typedef struct _MINIDUMP_INCLUDE_MODULE_CALLBACK 
555 {
556     ULONG64 BaseOfImage;
557 } MINIDUMP_INCLUDE_MODULE_CALLBACK, *PMINIDUMP_INCLUDE_MODULE_CALLBACK;
558
559 typedef enum _MODULE_WRITE_FLAGS 
560 {
561     ModuleWriteModule        = 0x0001,
562     ModuleWriteDataSeg       = 0x0002,
563     ModuleWriteMiscRecord    = 0x0004,
564     ModuleWriteCvRecord      = 0x0008,
565     ModuleReferencedByMemory = 0x0010,
566     ModuleWriteTlsData       = 0x0020,
567     ModuleWriteCodeSegs      = 0x0040,
568 } MODULE_WRITE_FLAGS;
569
570 typedef struct _MINIDUMP_CALLBACK_INPUT 
571 {
572     ULONG                       ProcessId;
573     HANDLE                      ProcessHandle;
574     ULONG                       CallbackType;
575     union 
576     {
577         MINIDUMP_THREAD_CALLBACK        Thread;
578         MINIDUMP_THREAD_EX_CALLBACK     ThreadEx;
579         MINIDUMP_MODULE_CALLBACK        Module;
580         MINIDUMP_INCLUDE_THREAD_CALLBACK IncludeThread;
581         MINIDUMP_INCLUDE_MODULE_CALLBACK IncludeModule;
582     } DUMMYUNIONNAME;
583 } MINIDUMP_CALLBACK_INPUT, *PMINIDUMP_CALLBACK_INPUT;
584
585 typedef struct _MINIDUMP_CALLBACK_OUTPUT
586 {
587     union 
588     {
589         ULONG                           ModuleWriteFlags;
590         ULONG                           ThreadWriteFlags;
591         struct
592         {
593             ULONG64                     MemoryBase;
594             ULONG                       MemorySize;
595         } DUMMYSTRUCTNAME;
596     } DUMMYUNIONNAME;
597 } MINIDUMP_CALLBACK_OUTPUT, *PMINIDUMP_CALLBACK_OUTPUT;
598
599 typedef BOOL (WINAPI* MINIDUMP_CALLBACK_ROUTINE)(PVOID, const PMINIDUMP_CALLBACK_INPUT, PMINIDUMP_CALLBACK_OUTPUT);
600
601 typedef struct _MINIDUMP_CALLBACK_INFORMATION 
602 {
603     MINIDUMP_CALLBACK_ROUTINE   CallbackRoutine;
604     void*                       CallbackParam;
605 } MINIDUMP_CALLBACK_INFORMATION, *PMINIDUMP_CALLBACK_INFORMATION;
606
607 typedef struct _MINIDUMP_LOCATION_DESCRIPTOR 
608 {
609     ULONG                       DataSize;
610     RVA                         Rva;
611 } MINIDUMP_LOCATION_DESCRIPTOR;
612
613 typedef struct _MINIDUMP_LOCATION_DESCRIPTOR64 
614 {
615     ULONG64                     DataSize;
616     RVA64                       Rva;
617 } MINIDUMP_LOCATION_DESCRIPTOR64;
618
619 typedef struct _MINIDUMP_DIRECTORY 
620 {
621     ULONG                       StreamType;
622     MINIDUMP_LOCATION_DESCRIPTOR Location;
623 } MINIDUMP_DIRECTORY, *PMINIDUMP_DIRECTORY;
624
625 typedef struct _MINIDUMP_EXCEPTION
626 {
627     ULONG                       ExceptionCode;
628     ULONG                       ExceptionFlags;
629     ULONG64                     ExceptionRecord;
630     ULONG64                     ExceptionAddress;
631     ULONG                       NumberParameters;
632     ULONG                        __unusedAlignment;
633     ULONG64                     ExceptionInformation[EXCEPTION_MAXIMUM_PARAMETERS];
634 } MINIDUMP_EXCEPTION, *PMINIDUMP_EXCEPTION;
635
636 typedef struct _MINIDUMP_EXCEPTION_INFORMATION
637 {
638     DWORD                       ThreadId;
639     PEXCEPTION_POINTERS         ExceptionPointers;
640     BOOL                        ClientPointers;
641 } MINIDUMP_EXCEPTION_INFORMATION, *PMINIDUMP_EXCEPTION_INFORMATION;
642
643 typedef struct MINIDUMP_EXCEPTION_STREAM 
644 {
645     ULONG                       ThreadId;
646     ULONG                       __alignment;
647     MINIDUMP_EXCEPTION          ExceptionRecord;
648     MINIDUMP_LOCATION_DESCRIPTOR ThreadContext;
649 } MINIDUMP_EXCEPTION_STREAM, *PMINIDUMP_EXCEPTION_STREAM;
650
651 typedef struct _MINIDUMP_HEADER 
652 {
653     DWORD                       Signature;
654     DWORD                       Version;
655     DWORD                       NumberOfStreams;
656     RVA                         StreamDirectoryRva;
657     DWORD                       CheckSum;
658     union 
659     {
660         DWORD                           Reserved;
661         DWORD                           TimeDateStamp;
662     } DUMMYUNIONNAME;
663     ULONG64                     Flags;
664 } MINIDUMP_HEADER, *PMINIDUMP_HEADER;
665
666 typedef struct _MINIDUMP_MEMORY_DESCRIPTOR 
667 {
668     ULONG64                     StartOfMemoryRange;
669     MINIDUMP_LOCATION_DESCRIPTOR Memory;
670 } MINIDUMP_MEMORY_DESCRIPTOR, *PMINIDUMP_MEMORY_DESCRIPTOR;
671
672 typedef struct _MINIDUMP_MEMORY_LIST
673 {
674     ULONG                       NumberOfMemoryRanges;
675     MINIDUMP_MEMORY_DESCRIPTOR  MemoryRanges[1]; /* FIXME: 0-sized array not supported */
676 } MINIDUMP_MEMORY_LIST, *PMINIDUMP_MEMORY_LIST;
677
678 #define MINIDUMP_MISC1_PROCESS_ID       0x00000001
679 #define MINIDUMP_MISC1_PROCESS_TIMES    0x00000002
680
681 typedef struct _MINIDUMP_MISC_INFO
682 {
683     ULONG                       SizeOfInfo;
684     ULONG                       Flags1;
685     ULONG                       ProcessId;
686     ULONG                       ProcessCreateTime;
687     ULONG                       ProcessUserTime;
688     ULONG                       ProcessKernelTime;
689 } MINIDUMP_MISC_INFO, *PMINIDUMP_MISC_INFO;
690
691 typedef struct _MINIDUMP_MODULE
692 {
693     ULONG64                     BaseOfImage;
694     ULONG                       SizeOfImage;
695     ULONG                       CheckSum;
696     ULONG                       TimeDateStamp;
697     RVA                         ModuleNameRva;
698     VS_FIXEDFILEINFO            VersionInfo;
699     MINIDUMP_LOCATION_DESCRIPTOR CvRecord;
700     MINIDUMP_LOCATION_DESCRIPTOR MiscRecord;
701     ULONG64                     Reserved0;
702     ULONG64                     Reserved1;
703 } MINIDUMP_MODULE, *PMINIDUMP_MODULE;
704
705 typedef struct _MINIDUMP_MODULE_LIST 
706 {
707     ULONG                       NumberOfModules;
708     MINIDUMP_MODULE             Modules[1]; /* FIXME: 0-sized array not supported */
709 } MINIDUMP_MODULE_LIST, *PMINIDUMP_MODULE_LIST;
710
711 typedef struct _MINIDUMP_STRING
712 {
713     ULONG                       Length;
714     WCHAR                       Buffer[1]; /* FIXME: O-sized array not supported */
715 } MINIDUMP_STRING, *PMINIDUMP_STRING;
716
717 typedef struct _MINIDUMP_SYSTEM_INFO
718 {
719     USHORT                      ProcessorArchitecture;
720     USHORT                      ProcessorLevel;
721     USHORT                      ProcessorRevision;
722     union
723     {
724         USHORT                          Reserved0;
725         struct
726         {
727             UCHAR                       NumberOfProcessors;
728             UCHAR                       ProductType;
729         } DUMMYSTRUCTNAME;
730     } DUMMYUNIONNAME;
731
732     ULONG                       MajorVersion;
733     ULONG                       MinorVersion;
734     ULONG                       BuildNumber;
735     ULONG                       PlatformId;
736
737     RVA                         CSDVersionRva;
738     union
739     {
740         ULONG                           Reserved1;
741         struct
742         {
743             USHORT                      SuiteMask;
744             USHORT                      Reserved2;
745         } DUMMYSTRUCTNAME;
746     } DUMMYUNIONNAME1;
747     union _CPU_INFORMATION 
748     {
749         struct 
750         {
751             ULONG                       VendorId[3];
752             ULONG                       VersionInformation;
753             ULONG                       FeatureInformation;
754             ULONG                       AMDExtendedCpuFeatures;
755         } X86CpuInfo;
756         struct 
757         {
758             ULONG64                     ProcessorFeatures[2];
759         } OtherCpuInfo;
760     } Cpu;
761
762 } MINIDUMP_SYSTEM_INFO, *PMINIDUMP_SYSTEM_INFO;
763
764 typedef struct _MINIDUMP_THREAD
765 {
766     ULONG                       ThreadId;
767     ULONG                       SuspendCount;
768     ULONG                       PriorityClass;
769     ULONG                       Priority;
770     ULONG64                     Teb;
771     MINIDUMP_MEMORY_DESCRIPTOR  Stack;
772     MINIDUMP_LOCATION_DESCRIPTOR ThreadContext;
773 } MINIDUMP_THREAD, *PMINIDUMP_THREAD;
774
775 typedef struct _MINIDUMP_THREAD_LIST
776 {
777     ULONG                       NumberOfThreads;
778     MINIDUMP_THREAD             Threads[1]; /* FIXME: no support of 0 sized array */
779 } MINIDUMP_THREAD_LIST, *PMINIDUMP_THREAD_LIST;
780
781 typedef struct _MINIDUMP_USER_STREAM
782 {
783     ULONG                       Type;
784     ULONG                       BufferSize;
785     void*                       Buffer;
786 } MINIDUMP_USER_STREAM, *PMINIDUMP_USER_STREAM;
787
788 typedef struct _MINIDUMP_USER_STREAM_INFORMATION
789 {
790     ULONG                       UserStreamCount;
791     PMINIDUMP_USER_STREAM       UserStreamArray;
792 } MINIDUMP_USER_STREAM_INFORMATION, *PMINIDUMP_USER_STREAM_INFORMATION;
793
794 typedef enum _MINIDUMP_STREAM_TYPE
795 {
796     UnusedStream                = 0,
797     ReservedStream0             = 1,
798     ReservedStream1             = 2,
799     ThreadListStream            = 3,
800     ModuleListStream            = 4,
801     MemoryListStream            = 5,
802     ExceptionStream             = 6,
803     SystemInfoStream            = 7,
804     ThreadExListStream          = 8,
805     Memory64ListStream          = 9,
806     CommentStreamA              = 10,
807     CommentStreamW              = 11,
808     HandleDataStream            = 12,
809     FunctionTableStream         = 13,
810     UnloadedModuleListStream    = 14,
811     MiscInfoStream              = 15,
812     MemoryInfoListStream        = 16,
813     ThreadInfoListStream        = 17,
814
815     LastReservedStream          = 0xffff
816 } MINIDUMP_STREAM_TYPE;
817
818 BOOL WINAPI MiniDumpWriteDump(HANDLE, DWORD, HANDLE, MINIDUMP_TYPE,
819                               const PMINIDUMP_EXCEPTION_INFORMATION,
820                               const PMINIDUMP_USER_STREAM_INFORMATION,
821                               const PMINIDUMP_CALLBACK_INFORMATION);
822 BOOL WINAPI MiniDumpReadDumpStream(PVOID, ULONG, PMINIDUMP_DIRECTORY*, PVOID*,
823                                    ULONG*);
824
825 #include <poppack.h>
826
827 /*************************
828  *    MODULE handling    *
829  *************************/
830
831 /* flags for SymLoadModuleEx */
832 #define SLMFLAG_VIRTUAL         0x1
833 #define SLMFLAG_NO_SYMBOLS      0x4
834
835 typedef BOOL (CALLBACK *PENUMLOADED_MODULES_CALLBACK)(PCSTR, ULONG, ULONG, PVOID);
836 BOOL   WINAPI EnumerateLoadedModules(HANDLE, PENUMLOADED_MODULES_CALLBACK, PVOID);
837 typedef BOOL (CALLBACK *PENUMLOADED_MODULES_CALLBACK64)(PCSTR, DWORD64, ULONG, PVOID);
838 BOOL   WINAPI EnumerateLoadedModules64(HANDLE, PENUMLOADED_MODULES_CALLBACK64, PVOID);
839 typedef BOOL (CALLBACK *PENUMLOADED_MODULES_CALLBACKW64)(PCWSTR, DWORD64, ULONG, PVOID);
840 BOOL   WINAPI EnumerateLoadedModulesW64(HANDLE, PENUMLOADED_MODULES_CALLBACKW64, PVOID);
841 typedef BOOL (CALLBACK *PSYM_ENUMMODULES_CALLBACK)(PCSTR, ULONG, PVOID);
842 BOOL    WINAPI SymEnumerateModules(HANDLE, PSYM_ENUMMODULES_CALLBACK, PVOID);
843 typedef BOOL (CALLBACK *PSYM_ENUMMODULES_CALLBACK64)(PCSTR, DWORD64, PVOID);
844 BOOL    WINAPI SymEnumerateModules64(HANDLE, PSYM_ENUMMODULES_CALLBACK64, PVOID);
845 typedef BOOL (CALLBACK *PSYM_ENUMMODULES_CALLBACKW64)(PCWSTR, DWORD64, PVOID);
846 BOOL    WINAPI SymEnumerateModulesW64(HANDLE, PSYM_ENUMMODULES_CALLBACKW64, PVOID);
847 BOOL    WINAPI SymGetModuleInfo(HANDLE, DWORD, PIMAGEHLP_MODULE);
848 BOOL    WINAPI SymGetModuleInfoW(HANDLE, DWORD, PIMAGEHLP_MODULEW);
849 BOOL    WINAPI SymGetModuleInfo64(HANDLE, DWORD64, PIMAGEHLP_MODULE64);
850 BOOL    WINAPI SymGetModuleInfoW64(HANDLE, DWORD64, PIMAGEHLP_MODULEW64);
851 DWORD   WINAPI SymGetModuleBase(HANDLE, DWORD);
852 DWORD64 WINAPI SymGetModuleBase64(HANDLE, DWORD64);
853 DWORD   WINAPI SymLoadModule(HANDLE, HANDLE, PCSTR, PCSTR, DWORD, DWORD);
854 DWORD64 WINAPI SymLoadModule64(HANDLE, HANDLE, PCSTR, PCSTR, DWORD64, DWORD);
855 DWORD64 WINAPI SymLoadModuleEx(HANDLE, HANDLE, PCSTR, PCSTR, DWORD64, DWORD,
856                                PMODLOAD_DATA, DWORD);
857 DWORD64 WINAPI SymLoadModuleExW(HANDLE, HANDLE, PCWSTR, PCWSTR, DWORD64, DWORD,
858                                 PMODLOAD_DATA, DWORD);
859 BOOL    WINAPI SymUnloadModule(HANDLE, DWORD);
860 BOOL    WINAPI SymUnloadModule64(HANDLE, DWORD64);
861
862 /*************************
863  *    Symbol Handling    *
864  *************************/
865
866 #define IMAGEHLP_SYMBOL_INFO_VALUEPRESENT          1
867 #define IMAGEHLP_SYMBOL_INFO_REGISTER              SYMF_REGISTER        /*  0x08 */
868 #define IMAGEHLP_SYMBOL_INFO_REGRELATIVE           SYMF_REGREL          /*  0x10 */
869 #define IMAGEHLP_SYMBOL_INFO_FRAMERELATIVE         SYMF_FRAMEREL        /*  0x20 */
870 #define IMAGEHLP_SYMBOL_INFO_PARAMETER             SYMF_PARAMETER       /*  0x40 */
871 #define IMAGEHLP_SYMBOL_INFO_LOCAL                 SYMF_LOCAL           /*  0x80 */
872 #define IMAGEHLP_SYMBOL_INFO_CONSTANT              SYMF_CONSTANT        /* 0x100 */
873 #define IMAGEHLP_SYMBOL_FUNCTION                   SYMF_FUNCTION        /* 0x800 */
874
875 #define SYMFLAG_VALUEPRESENT     0x00000001
876 #define SYMFLAG_REGISTER         0x00000008
877 #define SYMFLAG_REGREL           0x00000010
878 #define SYMFLAG_FRAMEREL         0x00000020
879 #define SYMFLAG_PARAMETER        0x00000040
880 #define SYMFLAG_LOCAL            0x00000080
881 #define SYMFLAG_CONSTANT         0x00000100
882 #define SYMFLAG_EXPORT           0x00000200
883 #define SYMFLAG_FORWARDER        0x00000400
884 #define SYMFLAG_FUNCTION         0x00000800
885 #define SYMFLAG_VIRTUAL          0x00001000
886 #define SYMFLAG_THUNK            0x00002000
887 #define SYMFLAG_TLSREL           0x00004000
888 #define SYMFLAG_SLOT             0x00008000
889
890 #define MAX_SYM_NAME    2000
891
892 typedef struct _SYMBOL_INFO
893 {
894     ULONG       SizeOfStruct;
895     ULONG       TypeIndex;
896     ULONG64     Reserved[2];
897     ULONG       info;   /* sdk states info, while MSDN says it's Index... */
898     ULONG       Size;
899     ULONG64     ModBase;
900     ULONG       Flags;
901     ULONG64     Value;
902     ULONG64     Address;
903     ULONG       Register;
904     ULONG       Scope;
905     ULONG       Tag;
906     ULONG       NameLen;
907     ULONG       MaxNameLen;
908     CHAR        Name[1];
909 } SYMBOL_INFO, *PSYMBOL_INFO;
910
911 typedef struct _SYMBOL_INFOW
912 {
913     ULONG       SizeOfStruct;
914     ULONG       TypeIndex;
915     ULONG64     Reserved[2];
916     ULONG       Index;
917     ULONG       Size;
918     ULONG64     ModBase;
919     ULONG       Flags;
920     ULONG64     Value;
921     ULONG64     Address;
922     ULONG       Register;
923     ULONG       Scope;
924     ULONG       Tag;
925     ULONG       NameLen;
926     ULONG       MaxNameLen;
927     WCHAR       Name[1];
928 } SYMBOL_INFOW, *PSYMBOL_INFOW;
929
930 typedef struct _SYMBOL_INFO_PACKAGE
931 {
932     SYMBOL_INFO si;
933     CHAR        name[MAX_SYM_NAME+1];
934 } SYMBOL_INFO_PACKAGE, *PSYMBOL_INFO_PACKAGE;
935
936 typedef struct _SYMBOL_INFO_PACKAGEW
937 {
938     SYMBOL_INFOW si;
939     WCHAR        name[MAX_SYM_NAME+1];
940 } SYMBOL_INFO_PACKAGEW, *PSYMBOL_INFO_PACKAGEW;
941
942 typedef enum _IMAGEHLP_SYMBOL_TYPE_INFO 
943 {
944     TI_GET_SYMTAG,
945     TI_GET_SYMNAME,
946     TI_GET_LENGTH,
947     TI_GET_TYPE,
948     TI_GET_TYPEID,
949     TI_GET_BASETYPE,
950     TI_GET_ARRAYINDEXTYPEID,
951     TI_FINDCHILDREN,
952     TI_GET_DATAKIND,
953     TI_GET_ADDRESSOFFSET,
954     TI_GET_OFFSET,
955     TI_GET_VALUE,
956     TI_GET_COUNT,
957     TI_GET_CHILDRENCOUNT,
958     TI_GET_BITPOSITION,
959     TI_GET_VIRTUALBASECLASS,
960     TI_GET_VIRTUALTABLESHAPEID,
961     TI_GET_VIRTUALBASEPOINTEROFFSET,
962     TI_GET_CLASSPARENTID,
963     TI_GET_NESTED,
964     TI_GET_SYMINDEX,
965     TI_GET_LEXICALPARENT,
966     TI_GET_ADDRESS,
967     TI_GET_THISADJUST,
968     TI_GET_UDTKIND,
969     TI_IS_EQUIV_TO,
970     TI_GET_CALLING_CONVENTION,
971 } IMAGEHLP_SYMBOL_TYPE_INFO;
972
973 #define IMAGEHLP_GET_TYPE_INFO_UNCACHED            0x00000001
974 #define IMAGEHLP_GET_TYPE_INFO_CHILDREN            0x00000002
975 typedef struct _IMAGEHLP_GET_TYPE_INFO_PARAMS
976 {
977     ULONG       SizeOfStruct;
978     ULONG       Flags;
979     ULONG       NumIds;
980     PULONG      TypeIds;
981     ULONG64     TagFilter;
982     ULONG       NumReqs;
983     IMAGEHLP_SYMBOL_TYPE_INFO* ReqKinds;
984     PULONG_PTR  ReqOffsets;
985     PULONG      ReqSizes;
986     ULONG_PTR   ReqStride;
987     ULONG_PTR   BufferSize;
988     PVOID       Buffer;
989     ULONG       EntriesMatched;
990     ULONG       EntriesFilled;
991     ULONG64     TagsFound;
992     ULONG64     AllReqsValid;
993     ULONG       NumReqsValid;
994     PULONG64    ReqsValid;
995 } IMAGEHLP_GET_TYPE_INFO_PARAMS, *PIMAGEHLP_GET_TYPE_INFO_PARAMS;
996
997 typedef struct _TI_FINDCHILDREN_PARAMS 
998 {
999     ULONG Count;
1000     ULONG Start;
1001     ULONG ChildId[1];
1002 } TI_FINDCHILDREN_PARAMS;
1003
1004 #define UNDNAME_COMPLETE                 (0x0000)
1005 #define UNDNAME_NO_LEADING_UNDERSCORES   (0x0001)
1006 #define UNDNAME_NO_MS_KEYWORDS           (0x0002)
1007 #define UNDNAME_NO_FUNCTION_RETURNS      (0x0004)
1008 #define UNDNAME_NO_ALLOCATION_MODEL      (0x0008)
1009 #define UNDNAME_NO_ALLOCATION_LANGUAGE   (0x0010)
1010 #define UNDNAME_NO_MS_THISTYPE           (0x0020)
1011 #define UNDNAME_NO_CV_THISTYPE           (0x0040)
1012 #define UNDNAME_NO_THISTYPE              (0x0060)
1013 #define UNDNAME_NO_ACCESS_SPECIFIERS     (0x0080)
1014 #define UNDNAME_NO_THROW_SIGNATURES      (0x0100)
1015 #define UNDNAME_NO_MEMBER_TYPE           (0x0200)
1016 #define UNDNAME_NO_RETURN_UDT_MODEL      (0x0400)
1017 #define UNDNAME_32_BIT_DECODE            (0x0800)
1018 #define UNDNAME_NAME_ONLY                (0x1000)
1019 #define UNDNAME_NO_ARGUMENTS             (0x2000)
1020 #define UNDNAME_NO_SPECIAL_SYMS          (0x4000)
1021
1022 #define SYMSEARCH_MASKOBJS              0x01
1023 #define SYMSEARCH_RECURSE               0x02
1024 #define SYMSEARCH_GLOBALSONLY           0x04
1025
1026 BOOL WINAPI SymGetTypeInfo(HANDLE, DWORD64, ULONG, IMAGEHLP_SYMBOL_TYPE_INFO, PVOID);
1027 BOOL WINAPI SymGetTypeInfoEx(HANDLE, DWORD64, PIMAGEHLP_GET_TYPE_INFO_PARAMS);
1028 typedef BOOL (CALLBACK *PSYM_ENUMERATESYMBOLS_CALLBACK)(PSYMBOL_INFO, ULONG, PVOID);
1029 typedef BOOL (CALLBACK *PSYM_ENUMERATESYMBOLS_CALLBACKW)(PSYMBOL_INFOW, ULONG, PVOID);
1030 BOOL WINAPI SymEnumTypes(HANDLE, ULONG64, PSYM_ENUMERATESYMBOLS_CALLBACK, PVOID);
1031 BOOL WINAPI SymEnumTypesW(HANDLE, ULONG64, PSYM_ENUMERATESYMBOLS_CALLBACKW, PVOID);
1032 BOOL WINAPI SymFromAddr(HANDLE, DWORD64, DWORD64*, SYMBOL_INFO*);
1033 BOOL WINAPI SymFromAddrW(HANDLE, DWORD64, DWORD64*, SYMBOL_INFOW*);
1034 BOOL WINAPI SymFromToken(HANDLE, DWORD64, DWORD, PSYMBOL_INFO);
1035 BOOL WINAPI SymFromTokenW(HANDLE, DWORD64, DWORD, PSYMBOL_INFOW);
1036 BOOL WINAPI SymFromName(HANDLE, PCSTR, PSYMBOL_INFO);
1037 BOOL WINAPI SymFromNameW(HANDLE, PCWSTR, PSYMBOL_INFOW);
1038 BOOL WINAPI SymGetSymFromAddr(HANDLE, DWORD, PDWORD, PIMAGEHLP_SYMBOL);
1039 BOOL WINAPI SymGetSymFromAddr64(HANDLE, DWORD64, PDWORD64, PIMAGEHLP_SYMBOL64);
1040 BOOL WINAPI SymGetSymFromName(HANDLE, PCSTR, PIMAGEHLP_SYMBOL);
1041 BOOL WINAPI SymGetSymFromName64(HANDLE, PCSTR, PIMAGEHLP_SYMBOL64);
1042 BOOL WINAPI SymGetTypeFromName(HANDLE, ULONG64, PCSTR, PSYMBOL_INFO);
1043 BOOL WINAPI SymGetTypeFromNameW(HANDLE, ULONG64, PCWSTR, PSYMBOL_INFOW);
1044 BOOL WINAPI SymGetSymNext(HANDLE, PIMAGEHLP_SYMBOL);
1045 BOOL WINAPI SymGetSymNext64(HANDLE, PIMAGEHLP_SYMBOL64);
1046 BOOL WINAPI SymGetSymNextW64(HANDLE, PIMAGEHLP_SYMBOLW64);
1047 BOOL WINAPI SymGetSymPrev(HANDLE, PIMAGEHLP_SYMBOL);
1048 BOOL WINAPI SymGetSymPrev64(HANDLE, PIMAGEHLP_SYMBOL64);
1049 BOOL WINAPI SymGetSymPrevW64(HANDLE, PIMAGEHLP_SYMBOLW64);
1050 BOOL WINAPI SymEnumSym(HANDLE,ULONG64,PSYM_ENUMERATESYMBOLS_CALLBACK,PVOID);
1051 BOOL WINAPI SymEnumSymbols(HANDLE, ULONG64, PCSTR, PSYM_ENUMERATESYMBOLS_CALLBACK,
1052                            PVOID);
1053 BOOL WINAPI SymEnumSymbolsW(HANDLE, ULONG64, PCWSTR, PSYM_ENUMERATESYMBOLS_CALLBACKW,
1054                             PVOID);
1055 typedef BOOL (CALLBACK *PSYM_ENUMSYMBOLS_CALLBACK)(PCSTR, ULONG, ULONG, PVOID);
1056 typedef BOOL (CALLBACK *PSYM_ENUMSYMBOLS_CALLBACKW)(PCWSTR, ULONG, ULONG, PVOID);
1057 BOOL WINAPI SymEnumerateSymbols(HANDLE, ULONG, PSYM_ENUMSYMBOLS_CALLBACK, PVOID);
1058 BOOL WINAPI SymEnumerateSymbolsW(HANDLE, ULONG, PSYM_ENUMSYMBOLS_CALLBACKW, PVOID);
1059 typedef BOOL (CALLBACK *PSYM_ENUMSYMBOLS_CALLBACK64)(PCSTR, DWORD64, ULONG, PVOID);
1060 typedef BOOL (CALLBACK *PSYM_ENUMSYMBOLS_CALLBACK64W)(PCWSTR, DWORD64, ULONG, PVOID);
1061 BOOL WINAPI SymEnumerateSymbols64(HANDLE, ULONG64, PSYM_ENUMSYMBOLS_CALLBACK64, PVOID);
1062 BOOL WINAPI SymEnumerateSymbolsW64(HANDLE, ULONG64, PSYM_ENUMSYMBOLS_CALLBACK64W, PVOID);
1063 BOOL WINAPI SymEnumSymbolsForAddr(HANDLE, DWORD64, PSYM_ENUMERATESYMBOLS_CALLBACK, PVOID);
1064 BOOL WINAPI SymEnumSymbolsForAddrW(HANDLE, DWORD64, PSYM_ENUMERATESYMBOLS_CALLBACKW, PVOID);
1065 typedef BOOL (CALLBACK *PSYMBOL_REGISTERED_CALLBACK)(HANDLE, ULONG, PVOID, PVOID);
1066 BOOL WINAPI SymRegisterCallback(HANDLE, PSYMBOL_REGISTERED_CALLBACK, PVOID);
1067 typedef BOOL (CALLBACK *PSYMBOL_REGISTERED_CALLBACK64)(HANDLE, ULONG, ULONG64, ULONG64);
1068 BOOL WINAPI SymRegisterCallback64(HANDLE, PSYMBOL_REGISTERED_CALLBACK64, ULONG64);
1069 BOOL WINAPI SymRegisterCallbackW64(HANDLE, PSYMBOL_REGISTERED_CALLBACK64, ULONG64);
1070 BOOL WINAPI SymUnDName(PIMAGEHLP_SYMBOL, PSTR, DWORD);
1071 BOOL WINAPI SymUnDName64(PIMAGEHLP_SYMBOL64, PSTR, DWORD);
1072 BOOL WINAPI SymMatchString(PCSTR, PCSTR, BOOL);
1073 BOOL WINAPI SymMatchStringA(PCSTR, PCSTR, BOOL);
1074 BOOL WINAPI SymMatchStringW(PCWSTR, PCWSTR, BOOL);
1075 BOOL WINAPI SymSearch(HANDLE, ULONG64, DWORD, DWORD, PCSTR, DWORD64, PSYM_ENUMERATESYMBOLS_CALLBACK, PVOID, DWORD);
1076 BOOL WINAPI SymSearchW(HANDLE, ULONG64, DWORD, DWORD, PCWSTR, DWORD64, PSYM_ENUMERATESYMBOLS_CALLBACKW, PVOID, DWORD);
1077 DWORD WINAPI UnDecorateSymbolName(PCSTR, PSTR, DWORD, DWORD);
1078 DWORD WINAPI UnDecorateSymbolNameW(PCWSTR, PWSTR, DWORD, DWORD);
1079 BOOL WINAPI SymGetScope(HANDLE, ULONG64, DWORD, PSYMBOL_INFO);
1080 BOOL WINAPI SymGetScopeW(HANDLE, ULONG64, DWORD, PSYMBOL_INFOW);
1081 BOOL WINAPI SymFromIndex(HANDLE, ULONG64, DWORD, PSYMBOL_INFO);
1082 BOOL WINAPI SymFromIndexW(HANDLE, ULONG64, DWORD, PSYMBOL_INFOW);
1083 BOOL WINAPI SymAddSymbol(HANDLE, ULONG64, PCSTR, DWORD64, DWORD, DWORD);
1084 BOOL WINAPI SymAddSymbolW(HANDLE, ULONG64, PCWSTR, DWORD64, DWORD, DWORD);
1085 BOOL WINAPI SymDeleteSymbol(HANDLE, ULONG64, PCSTR, DWORD64, DWORD);
1086 BOOL WINAPI SymDeleteSymbolW(HANDLE, ULONG64, PCWSTR, DWORD64, DWORD);
1087
1088 /*************************
1089  *      Source Files     *
1090  *************************/
1091 typedef BOOL (CALLBACK *PSYM_ENUMSOURCEFILES_CALLBACK)(PSOURCEFILE, PVOID);
1092 typedef BOOL (CALLBACK *PSYM_ENUMSOURCEFILES_CALLBACKW)(PSOURCEFILEW, PVOID);
1093
1094 BOOL WINAPI SymEnumSourceFiles(HANDLE, ULONG64, PCSTR, PSYM_ENUMSOURCEFILES_CALLBACK,
1095                                PVOID);
1096 BOOL WINAPI SymEnumSourceFilesW(HANDLE, ULONG64, PCWSTR, PSYM_ENUMSOURCEFILES_CALLBACKW, PVOID);
1097 BOOL WINAPI SymGetLineFromAddr(HANDLE, DWORD, PDWORD, PIMAGEHLP_LINE);
1098 BOOL WINAPI SymGetLineFromAddrW(HANDLE, DWORD, PDWORD, PIMAGEHLP_LINEW);
1099 BOOL WINAPI SymGetLineFromAddr64(HANDLE, DWORD64, PDWORD, PIMAGEHLP_LINE64);
1100 BOOL WINAPI SymGetLineFromAddrW64(HANDLE, DWORD64, PDWORD, PIMAGEHLP_LINEW64);
1101 BOOL WINAPI SymGetLinePrev(HANDLE, PIMAGEHLP_LINE);
1102 BOOL WINAPI SymGetLinePrevW(HANDLE, PIMAGEHLP_LINEW);
1103 BOOL WINAPI SymGetLinePrev64(HANDLE, PIMAGEHLP_LINE64);
1104 BOOL WINAPI SymGetLinePrevW64(HANDLE, PIMAGEHLP_LINEW64);
1105 BOOL WINAPI SymGetLineNext(HANDLE, PIMAGEHLP_LINE);
1106 BOOL WINAPI SymGetLineNextW(HANDLE, PIMAGEHLP_LINEW);
1107 BOOL WINAPI SymGetLineNext64(HANDLE, PIMAGEHLP_LINE64);
1108 BOOL WINAPI SymGetLineNextW64(HANDLE, PIMAGEHLP_LINEW64);
1109 BOOL WINAPI SymGetLineFromName(HANDLE, PCSTR, PCSTR, DWORD, PLONG, PIMAGEHLP_LINE);
1110 BOOL WINAPI SymGetLineFromName64(HANDLE, PCSTR, PCSTR, DWORD, PLONG, PIMAGEHLP_LINE64);
1111 BOOL WINAPI SymGetLineFromNameW64(HANDLE, PCWSTR, PCWSTR, DWORD, PLONG, PIMAGEHLP_LINEW64);
1112 ULONG WINAPI SymGetFileLineOffsets64(HANDLE, PCSTR, PCSTR, PDWORD64, ULONG);
1113 BOOL WINAPI SymGetSourceFile(HANDLE, ULONG64, PCSTR, PCSTR, PSTR, DWORD);
1114 BOOL WINAPI SymGetSourceFileW(HANDLE, ULONG64, PCWSTR, PCWSTR, PWSTR, DWORD);
1115 BOOL WINAPI SymGetSourceFileToken(HANDLE, ULONG64, PCSTR, PVOID*, DWORD*);
1116 BOOL WINAPI SymGetSourceFileTokenW(HANDLE, ULONG64, PCWSTR, PVOID*, DWORD*);
1117 BOOL WINAPI SymGetSourceFileFromToken(HANDLE, PVOID, PCSTR, PSTR, DWORD);
1118 BOOL WINAPI SymGetSourceFileFromTokenW(HANDLE, PVOID, PCWSTR, PWSTR, DWORD);
1119 BOOL WINAPI SymGetSourceVarFromToken(HANDLE, PVOID, PCSTR, PCSTR, PSTR, DWORD);
1120 BOOL WINAPI SymGetSourceVarFromTokenW(HANDLE, PVOID, PCWSTR, PCWSTR, PWSTR, DWORD);
1121
1122 typedef struct _SRCCODEINFO
1123 {
1124     DWORD       SizeOfStruct;
1125     PVOID       Key;
1126     DWORD64     ModBase;
1127     CHAR        Obj[MAX_PATH+1];
1128     CHAR        FileName[MAX_PATH+1];
1129     DWORD       LineNumber;
1130     DWORD64     Address;
1131 } SRCCODEINFO, *PSRCCODEINFO;
1132
1133 typedef struct _SRCCODEINFOW
1134 {
1135     DWORD       SizeOfStruct;
1136     PVOID       Key;
1137     DWORD64     ModBase;
1138     WCHAR       Obj[MAX_PATH+1];
1139     WCHAR       FileName[MAX_PATH+1];
1140     DWORD       LineNumber;
1141     DWORD64     Address;
1142 } SRCCODEINFOW, *PSRCCODEINFOW;
1143
1144 typedef BOOL (CALLBACK* PSYM_ENUMLINES_CALLBACK)(PSRCCODEINFO, PVOID);
1145 typedef BOOL (CALLBACK* PSYM_ENUMLINES_CALLBACKW)(PSRCCODEINFOW, PVOID);
1146 BOOL WINAPI SymEnumLines(HANDLE, ULONG64, PCSTR, PCSTR, PSYM_ENUMLINES_CALLBACK, PVOID);
1147 BOOL WINAPI SymEnumLinesW(HANDLE, ULONG64, PCWSTR, PCWSTR, PSYM_ENUMLINES_CALLBACKW, PVOID);
1148 BOOL WINAPI SymEnumSourceLines(HANDLE, ULONG64, PCSTR, PCSTR, DWORD, DWORD, PSYM_ENUMLINES_CALLBACK, PVOID);
1149 BOOL WINAPI SymEnumSourceLinesW(HANDLE, ULONG64, PCWSTR, PCWSTR, DWORD, DWORD, PSYM_ENUMLINES_CALLBACKW, PVOID);
1150
1151 /*************************
1152  * File & image handling *
1153  *************************/
1154 BOOL WINAPI SymInitialize(HANDLE, PCSTR, BOOL);
1155 BOOL WINAPI SymInitializeW(HANDLE, PCWSTR, BOOL);
1156 BOOL WINAPI SymCleanup(HANDLE);
1157
1158 HANDLE WINAPI FindDebugInfoFile(PCSTR, PCSTR, PSTR);
1159 typedef BOOL (CALLBACK *PFIND_DEBUG_FILE_CALLBACK)(HANDLE, PCSTR, PVOID);
1160 typedef BOOL (CALLBACK *PFIND_DEBUG_FILE_CALLBACKW)(HANDLE, PCWSTR, PVOID);
1161 HANDLE WINAPI FindDebugInfoFileEx(PCSTR, PCSTR, PSTR, PFIND_DEBUG_FILE_CALLBACK, PVOID);
1162 HANDLE WINAPI FindDebugInfoFileExW(PCWSTR, PCWSTR, PWSTR, PFIND_DEBUG_FILE_CALLBACKW, PVOID);
1163 HANDLE WINAPI SymFindDebugInfoFile(HANDLE, PCSTR, PSTR, PFIND_DEBUG_FILE_CALLBACK, PVOID);
1164 HANDLE WINAPI SymFindDebugInfoFileW(HANDLE, PCWSTR, PWSTR, PFIND_DEBUG_FILE_CALLBACKW, PVOID);
1165 typedef BOOL (CALLBACK *PFINDFILEINPATHCALLBACK)(PCSTR, PVOID);
1166 typedef BOOL (CALLBACK *PFINDFILEINPATHCALLBACKW)(PCWSTR, PVOID);
1167 BOOL WINAPI FindFileInPath(HANDLE, PCSTR, PCSTR, PVOID, DWORD, DWORD, DWORD,
1168                            PSTR, PFINDFILEINPATHCALLBACK, PVOID);
1169 BOOL WINAPI SymFindFileInPath(HANDLE, PCSTR, PCSTR, PVOID, DWORD, DWORD, DWORD,
1170                               PSTR, PFINDFILEINPATHCALLBACK, PVOID);
1171 BOOL WINAPI SymFindFileInPathW(HANDLE, PCWSTR, PCWSTR, PVOID, DWORD, DWORD, DWORD,
1172                               PWSTR, PFINDFILEINPATHCALLBACKW, PVOID);
1173 HANDLE WINAPI FindExecutableImage(PCSTR, PCSTR, PSTR);
1174 typedef BOOL (CALLBACK *PFIND_EXE_FILE_CALLBACK)(HANDLE, PCSTR, PVOID);
1175 typedef BOOL (CALLBACK *PFIND_EXE_FILE_CALLBACKW)(HANDLE, PCWSTR, PVOID);
1176 HANDLE WINAPI FindExecutableImageEx(PCSTR, PCSTR, PSTR, PFIND_EXE_FILE_CALLBACK, PVOID);
1177 HANDLE WINAPI FindExecutableImageExW(PCWSTR, PCWSTR, PWSTR, PFIND_EXE_FILE_CALLBACKW, PVOID);
1178 HANDLE WINAPI SymFindExecutableImage(HANDLE, PCSTR, PSTR, PFIND_EXE_FILE_CALLBACK, PVOID);
1179 HANDLE WINAPI SymFindExecutableImageW(HANDLE, PCWSTR, PWSTR, PFIND_EXE_FILE_CALLBACKW, PVOID);
1180 PIMAGE_NT_HEADERS WINAPI ImageNtHeader(PVOID);
1181 PVOID WINAPI ImageDirectoryEntryToDataEx(PVOID, BOOLEAN, USHORT, PULONG,
1182                                          PIMAGE_SECTION_HEADER *);
1183 PVOID WINAPI ImageDirectoryEntryToData(PVOID, BOOLEAN, USHORT, PULONG);
1184 PIMAGE_SECTION_HEADER WINAPI ImageRvaToSection(PIMAGE_NT_HEADERS, PVOID, ULONG);
1185 PVOID WINAPI ImageRvaToVa(PIMAGE_NT_HEADERS, PVOID, ULONG, PIMAGE_SECTION_HEADER*);
1186 BOOL WINAPI SymGetSearchPath(HANDLE, PSTR, DWORD);
1187 BOOL WINAPI SymGetSearchPathW(HANDLE, PWSTR, DWORD);
1188 BOOL WINAPI SymSetSearchPath(HANDLE, PCSTR);
1189 BOOL WINAPI SymSetSearchPathW(HANDLE, PCWSTR);
1190 DWORD WINAPI GetTimestampForLoadedLibrary(HMODULE);
1191 BOOL WINAPI MakeSureDirectoryPathExists(PCSTR);
1192 BOOL WINAPI SearchTreeForFile(PCSTR, PCSTR, PSTR);
1193 BOOL WINAPI SearchTreeForFileW(PCWSTR, PCWSTR, PWSTR);
1194 typedef BOOL (CALLBACK *PENUMDIRTREE_CALLBACK)(PCSTR, PVOID);
1195 typedef BOOL (CALLBACK *PENUMDIRTREE_CALLBACKW)(PCWSTR, PVOID);
1196 BOOL WINAPI EnumDirTree(HANDLE, PCSTR, PCSTR, PSTR, PENUMDIRTREE_CALLBACK, PVOID);
1197 BOOL WINAPI EnumDirTreeW(HANDLE, PCWSTR, PCWSTR, PWSTR, PENUMDIRTREE_CALLBACKW, PVOID);
1198 BOOL WINAPI SymMatchFileName(PCSTR, PCSTR, PSTR*, PSTR*);
1199 BOOL WINAPI SymMatchFileNameW(PCWSTR, PCWSTR, PWSTR*, PWSTR*);
1200 PCHAR WINAPI SymSetHomeDirectory(HANDLE, PCSTR);
1201 PWSTR WINAPI SymSetHomeDirectoryW(HANDLE, PCWSTR);
1202 PCHAR WINAPI SymGetHomeDirectory(DWORD, PSTR, size_t);
1203 PWSTR WINAPI SymGetHomeDirectoryW(DWORD, PWSTR, size_t);
1204 #define hdBase  0
1205 #define hdSym   1
1206 #define hdSrc   2
1207 #define hdMax   3
1208
1209 /*************************
1210  *   Context management  *
1211  *************************/
1212 BOOL WINAPI SymSetContext(HANDLE, PIMAGEHLP_STACK_FRAME, PIMAGEHLP_CONTEXT);
1213
1214
1215 /*************************
1216  *    Stack management   *
1217  *************************/
1218
1219 #if !defined(_IMAGEHLP_SOURCE_) && defined(_IMAGEHLP64)
1220 #define KDHELP KDHELP64
1221 #define PKDHELP PKDHELP64
1222 #else
1223 typedef struct _KDHELP
1224 {
1225     DWORD       Thread;
1226     DWORD       ThCallbackStack;
1227     DWORD       NextCallback;
1228     DWORD       FramePointer;
1229     DWORD       KiCallUserMode;
1230     DWORD       KeUserCallbackDispatcher;
1231     DWORD       SystemRangeStart;
1232 } KDHELP, *PKDHELP;
1233 #endif
1234
1235 typedef struct _KDHELP64
1236 {
1237     DWORD64     Thread;
1238     DWORD       ThCallbackStack;
1239     DWORD       ThCallbackBStore;
1240     DWORD       NextCallback;
1241     DWORD       FramePointer;
1242     DWORD64     KiCallUserMode;
1243     DWORD64     KeUserCallbackDispatcher;
1244     DWORD64     SystemRangeStart;
1245     DWORD64     Reserved[8];
1246 } KDHELP64, *PKDHELP64;
1247
1248 #if !defined(_IMAGEHLP_SOURCE_) && defined(_IMAGEHLP64)
1249 #define STACKFRAME STACKFRAME64
1250 #define LPSTACKFRAME LPSTACKFRAME64
1251 #else
1252 typedef struct _STACKFRAME
1253 {
1254     ADDRESS     AddrPC;
1255     ADDRESS     AddrReturn;
1256     ADDRESS     AddrFrame;
1257     ADDRESS     AddrStack;
1258     PVOID       FuncTableEntry;
1259     DWORD       Params[4];
1260     BOOL        Far;
1261     BOOL        Virtual;
1262     DWORD       Reserved[3];
1263     KDHELP      KdHelp;
1264     ADDRESS     AddrBStore;
1265 } STACKFRAME, *LPSTACKFRAME;
1266 #endif
1267
1268 typedef struct _STACKFRAME64
1269 {
1270     ADDRESS64   AddrPC;
1271     ADDRESS64   AddrReturn;
1272     ADDRESS64   AddrFrame;
1273     ADDRESS64   AddrStack;
1274     ADDRESS64   AddrBStore;
1275     PVOID       FuncTableEntry;
1276     DWORD64     Params[4];
1277     BOOL        Far;
1278     BOOL        Virtual;
1279     DWORD64     Reserved[3];
1280     KDHELP64    KdHelp;
1281 } STACKFRAME64, *LPSTACKFRAME64;
1282
1283 typedef BOOL (CALLBACK *PREAD_PROCESS_MEMORY_ROUTINE)
1284     (HANDLE, DWORD, PVOID, DWORD, PDWORD);
1285 typedef PVOID (CALLBACK *PFUNCTION_TABLE_ACCESS_ROUTINE)(HANDLE, DWORD);
1286 typedef DWORD (CALLBACK *PGET_MODULE_BASE_ROUTINE)(HANDLE, DWORD);
1287 typedef DWORD (CALLBACK *PTRANSLATE_ADDRESS_ROUTINE)(HANDLE, HANDLE, LPADDRESS);
1288 BOOL WINAPI StackWalk(DWORD, HANDLE, HANDLE, LPSTACKFRAME, PVOID,
1289                       PREAD_PROCESS_MEMORY_ROUTINE,
1290                       PFUNCTION_TABLE_ACCESS_ROUTINE,
1291                       PGET_MODULE_BASE_ROUTINE,
1292                       PTRANSLATE_ADDRESS_ROUTINE);
1293
1294 typedef BOOL (CALLBACK *PREAD_PROCESS_MEMORY_ROUTINE64)
1295     (HANDLE, DWORD64, PVOID, DWORD, PDWORD);
1296 typedef PVOID (CALLBACK *PFUNCTION_TABLE_ACCESS_ROUTINE64)(HANDLE, DWORD64);
1297 typedef DWORD64 (CALLBACK *PGET_MODULE_BASE_ROUTINE64)(HANDLE, DWORD64);
1298 typedef DWORD64 (CALLBACK *PTRANSLATE_ADDRESS_ROUTINE64)(HANDLE, HANDLE, LPADDRESS64);
1299 BOOL WINAPI StackWalk64(DWORD, HANDLE, HANDLE, LPSTACKFRAME64, PVOID,
1300                         PREAD_PROCESS_MEMORY_ROUTINE64,
1301                         PFUNCTION_TABLE_ACCESS_ROUTINE64,
1302                         PGET_MODULE_BASE_ROUTINE64,
1303                         PTRANSLATE_ADDRESS_ROUTINE64);
1304
1305 PVOID WINAPI SymFunctionTableAccess(HANDLE, DWORD);
1306 PVOID WINAPI SymFunctionTableAccess64(HANDLE, DWORD64);
1307
1308 typedef PVOID (CALLBACK *PSYMBOL_FUNCENTRY_CALLBACK)(HANDLE, DWORD, PVOID);
1309 typedef PVOID (CALLBACK *PSYMBOL_FUNCENTRY_CALLBACK64)(HANDLE, ULONG64, ULONG64);
1310
1311 BOOL WINAPI SymRegisterFunctionEntryCallback(HANDLE, PSYMBOL_FUNCENTRY_CALLBACK, PVOID);
1312 BOOL WINAPI SymRegisterFunctionEntryCallback64(HANDLE, PSYMBOL_FUNCENTRY_CALLBACK64, ULONG64);
1313
1314 /*************************
1315  * Version, global stuff *
1316  *************************/
1317
1318 #define API_VERSION_NUMBER 9
1319
1320 typedef struct API_VERSION
1321 {
1322     USHORT  MajorVersion;
1323     USHORT  MinorVersion;
1324     USHORT  Revision;
1325     USHORT  Reserved;
1326 } API_VERSION, *LPAPI_VERSION;
1327
1328 LPAPI_VERSION WINAPI ImagehlpApiVersion(void);
1329 LPAPI_VERSION WINAPI ImagehlpApiVersionEx(LPAPI_VERSION);
1330
1331 typedef struct _IMAGE_DEBUG_INFORMATION
1332 {
1333     LIST_ENTRY                  List;
1334     DWORD                       ReservedSize;
1335     PVOID                       ReservedMappedBase;
1336     USHORT                      ReservedMachine;
1337     USHORT                      ReservedCharacteristics;
1338     DWORD                       ReservedCheckSum;
1339     DWORD                       ImageBase;
1340     DWORD                       SizeOfImage;
1341     DWORD                       ReservedNumberOfSections;
1342     PIMAGE_SECTION_HEADER       ReservedSections;
1343     DWORD                       ReservedExportedNamesSize;
1344     PSTR                        ReservedExportedNames;
1345     DWORD                       ReservedNumberOfFunctionTableEntries;
1346     PIMAGE_FUNCTION_ENTRY       ReservedFunctionTableEntries;
1347     DWORD                       ReservedLowestFunctionStartingAddress;
1348     DWORD                       ReservedHighestFunctionEndingAddress;
1349     DWORD                       ReservedNumberOfFpoTableEntries;
1350     PFPO_DATA                   ReservedFpoTableEntries;
1351     DWORD                       SizeOfCoffSymbols;
1352     PIMAGE_COFF_SYMBOLS_HEADER  CoffSymbols;
1353     DWORD                       ReservedSizeOfCodeViewSymbols;
1354     PVOID                       ReservedCodeViewSymbols;
1355     PSTR                        ImageFilePath;
1356     PSTR                        ImageFileName;
1357     PSTR                        ReservedDebugFilePath;
1358     DWORD                       ReservedTimeDateStamp;
1359     BOOL                        ReservedRomImage;
1360     PIMAGE_DEBUG_DIRECTORY      ReservedDebugDirectory;
1361     DWORD                       ReservedNumberOfDebugDirectories;
1362     DWORD                       ReservedOriginalFunctionTableBaseAddress;
1363     DWORD                       Reserved[ 2 ];
1364 } IMAGE_DEBUG_INFORMATION, *PIMAGE_DEBUG_INFORMATION;
1365
1366
1367 PIMAGE_DEBUG_INFORMATION WINAPI MapDebugInformation(HANDLE, PCSTR, PCSTR, ULONG);
1368
1369 BOOL WINAPI UnmapDebugInformation(PIMAGE_DEBUG_INFORMATION);
1370
1371 DWORD   WINAPI  SymGetOptions(void);
1372 DWORD   WINAPI  SymSetOptions(DWORD);
1373
1374 BOOL WINAPI SymSetParentWindow(HWND);
1375
1376 /*************************
1377  * Version, global stuff *
1378  *************************/
1379
1380 typedef BOOL     (WINAPI* PSYMBOLSERVERPROC)(PCSTR, PCSTR, PVOID, DWORD, DWORD, PSTR);
1381 typedef BOOL     (WINAPI* PSYMBOLSERVERPROCA)(PCSTR, PCSTR, PVOID, DWORD, DWORD, PSTR);
1382 typedef BOOL     (WINAPI* PSYMBOLSERVERPROCW)(PCWSTR, PCWSTR, PVOID, DWORD, DWORD, PWSTR);
1383 typedef BOOL     (WINAPI* PSYMBOLSERVEROPENPROC)(void);
1384 typedef BOOL     (WINAPI* PSYMBOLSERVERCLOSEPROC)(void);
1385 typedef BOOL     (WINAPI* PSYMBOLSERVERSETOPTIONSPROC)(UINT_PTR, ULONG64);
1386 typedef BOOL     (CALLBACK* PSYMBOLSERVERCALLBACKPROC)(UINT_PTR, ULONG64, ULONG64);
1387 typedef UINT_PTR (WINAPI* PSYMBOLSERVERGETOPTIONSPROC)(void);
1388 typedef BOOL     (WINAPI* PSYMBOLSERVERPINGPROC)(PCSTR);
1389 typedef BOOL     (WINAPI* PSYMBOLSERVERPINGPROCA)(PCSTR);
1390 typedef BOOL     (WINAPI* PSYMBOLSERVERPINGPROCW)(PCWSTR);
1391
1392 #define SSRVOPT_CALLBACK            0x0001
1393 #define SSRVOPT_DWORD               0x0002
1394 #define SSRVOPT_DWORDPTR            0x0004
1395 #define SSRVOPT_GUIDPTR             0x0008
1396 #define SSRVOPT_OLDGUIDPTR          0x0010
1397 #define SSRVOPT_UNATTENDED          0x0020
1398 #define SSRVOPT_NOCOPY              0x0040
1399 #define SSRVOPT_PARENTWIN           0x0080
1400 #define SSRVOPT_PARAMTYPE           0x0100
1401 #define SSRVOPT_SECURE              0x0200
1402 #define SSRVOPT_TRACE               0x0400
1403 #define SSRVOPT_SETCONTEXT          0x0800
1404 #define SSRVOPT_PROXY               0x1000
1405 #define SSRVOPT_DOWNSTREAM_STORE    0x2000
1406 #define SSRVOPT_RESET               ((ULONG_PTR)-1)
1407
1408 #define SSRVACTION_TRACE        1
1409 #define SSRVACTION_QUERYCANCEL  2
1410 #define SSRVACTION_EVENT        3
1411
1412 #ifdef __cplusplus
1413 } /* extern "C" */
1414 #endif /* defined(__cplusplus) */
1415
1416 #endif  /* __WINE_DBGHELP_H */