Convert CreateDC to unicode in the driver interface.
[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 #include "windef.h"
25 #include "winbase.h"
26 #include "ver.h"
27
28 #ifdef __cplusplus
29 extern "C" {
30 #endif /* defined(__cplusplus) */
31
32 typedef struct _LOADED_IMAGE
33 {
34     LPSTR                       ModuleName;
35     HANDLE                      hFile;
36     PUCHAR                      MappedAddress;
37     PIMAGE_NT_HEADERS           FileHeader;
38     PIMAGE_SECTION_HEADER       LastRvaSection;
39     ULONG                       NumberOfSections;
40     PIMAGE_SECTION_HEADER       Sections;
41     ULONG                       Characteristics;
42     BOOLEAN                     fSystemImage;
43     BOOLEAN                     fDOSImage;
44     LIST_ENTRY                  Links;
45     ULONG                       SizeOfImage;
46 } LOADED_IMAGE, *PLOADED_IMAGE;
47
48 /*************************
49  *    IMAGEHLP equiv     *
50  *************************/
51
52 typedef enum
53 {
54     AddrMode1616,
55     AddrMode1632,
56     AddrModeReal,
57     AddrModeFlat
58 } ADDRESS_MODE;
59
60 typedef struct _tagADDRESS
61 {
62     DWORD                       Offset;
63     WORD                        Segment;
64     ADDRESS_MODE                Mode;
65 } ADDRESS, *LPADDRESS;
66
67 #define SYMF_OMAP_GENERATED   0x00000001
68 #define SYMF_OMAP_MODIFIED    0x00000002
69 #define SYMF_USER_GENERATED   0x00000004
70 #define SYMF_REGISTER         0x00000008
71 #define SYMF_REGREL           0x00000010
72 #define SYMF_FRAMEREL         0x00000020
73 #define SYMF_PARAMETER        0x00000040
74 #define SYMF_LOCAL            0x00000080
75 #define SYMF_CONSTANT         0x00000100
76 #define SYMF_EXPORT           0x00000200
77 #define SYMF_FORWARDER        0x00000400
78 #define SYMF_FUNCTION         0x00000800
79
80 typedef enum 
81 {
82     SymNone = 0,
83     SymCoff,
84     SymCv,
85     SymPdb,
86     SymExport,
87     SymDeferred,
88     SymSym,
89     SymDia,
90     NumSymTypes
91 } SYM_TYPE;
92
93 typedef struct _IMAGEHLP_SYMBOL
94 {
95     DWORD                       SizeOfStruct;
96     DWORD                       Address;
97     DWORD                       Size;
98     DWORD                       Flags;
99     DWORD                       MaxNameLength;
100     CHAR                        Name[1];
101 } IMAGEHLP_SYMBOL, *PIMAGEHLP_SYMBOL;
102
103 typedef struct _IMAGEHLP_MODULE
104 {
105     DWORD                       SizeOfStruct;
106     DWORD                       BaseOfImage;
107     DWORD                       ImageSize;
108     DWORD                       TimeDateStamp;
109     DWORD                       CheckSum;
110     DWORD                       NumSyms;
111     SYM_TYPE                    SymType;
112     CHAR                        ModuleName[32];
113     CHAR                        ImageName[256];
114     CHAR                        LoadedImageName[256];
115 } IMAGEHLP_MODULE, *PIMAGEHLP_MODULE;
116
117 typedef struct _IMAGEHLP_MODULEW {
118     DWORD                       SizeOfStruct;
119     DWORD                       BaseOfImage;
120     DWORD                       ImageSize;
121     DWORD                       TimeDateStamp;
122     DWORD                       CheckSum;
123     DWORD                       NumSyms;
124     SYM_TYPE                    SymType;
125     WCHAR                       ModuleName[32];
126     WCHAR                       ImageName[256];
127     WCHAR                       LoadedImageName[256];
128 } IMAGEHLP_MODULEW, *PIMAGEHLP_MODULEW;
129
130 typedef struct _IMAGEHLP_LINE
131 {
132     DWORD                       SizeOfStruct;
133     PVOID                       Key;
134     DWORD                       LineNumber;
135     PCHAR                       FileName;
136     DWORD                       Address;
137 } IMAGEHLP_LINE, *PIMAGEHLP_LINE;
138
139 typedef struct _SOURCEFILE
140 {
141     DWORD                       ModBase;
142     PCHAR                       FileName;
143 } SOURCEFILE, *PSOURCEFILE;
144
145 #define CBA_DEFERRED_SYMBOL_LOAD_START          0x00000001
146 #define CBA_DEFERRED_SYMBOL_LOAD_COMPLETE       0x00000002
147 #define CBA_DEFERRED_SYMBOL_LOAD_FAILURE        0x00000003
148 #define CBA_SYMBOLS_UNLOADED                    0x00000004
149 #define CBA_DUPLICATE_SYMBOL                    0x00000005
150 #define CBA_READ_MEMORY                         0x00000006
151 #define CBA_DEFERRED_SYMBOL_LOAD_CANCEL         0x00000007
152 #define CBA_SET_OPTIONS                         0x00000008
153 #define CBA_EVENT                               0x00000010
154 #define CBA_DEBUG_INFO                          0x10000000
155
156 typedef struct _IMAGEHLP_CBA_READ_MEMORY
157 {
158     DWORD     addr;
159     PVOID     buf;
160     DWORD     bytes;
161     DWORD    *bytesread;
162 } IMAGEHLP_CBA_READ_MEMORY, *PIMAGEHLP_CBA_READ_MEMORY;
163
164 enum {
165     sevInfo = 0,
166     sevProblem,
167     sevAttn,
168     sevFatal,
169     sevMax
170 };
171
172 typedef struct _IMAGEHLP_CBA_EVENT
173 {
174     DWORD severity;
175     DWORD code;
176     PCHAR desc;
177     PVOID object;
178 } IMAGEHLP_CBA_EVENT, *PIMAGEHLP_CBA_EVENT;
179
180 typedef struct _IMAGEHLP_DEFERRED_SYMBOL_LOAD
181 {
182     DWORD                       SizeOfStruct;
183     DWORD64                     BaseOfImage;
184     DWORD                       CheckSum;
185     DWORD                       TimeDateStamp;
186     CHAR                        FileName[MAX_PATH];
187     BOOLEAN                     Reparse;
188 } IMAGEHLP_DEFERRED_SYMBOL_LOAD, *PIMAGEHLP_DEFERRED_SYMBOL_LOAD;
189
190 typedef struct _IMAGEHLP_DUPLICATE_SYMBOL
191 {
192     DWORD                       SizeOfStruct;
193     DWORD                       NumberOfDups;
194     PIMAGEHLP_SYMBOL            Symbol;
195     DWORD                       SelectedSymbol;
196 } IMAGEHLP_DUPLICATE_SYMBOL, *PIMAGEHLP_DUPLICATE_SYMBOL;
197
198 #define SYMOPT_CASE_INSENSITIVE         0x00000001
199 #define SYMOPT_UNDNAME                  0x00000002
200 #define SYMOPT_DEFERRED_LOADS           0x00000004
201 #define SYMOPT_NO_CPP                   0x00000008
202 #define SYMOPT_LOAD_LINES               0x00000010
203 #define SYMOPT_OMAP_FIND_NEAREST        0x00000020
204 #define SYMOPT_LOAD_ANYTHING            0x00000040
205 #define SYMOPT_IGNORE_CVREC             0x00000080
206 #define SYMOPT_NO_UNQUALIFIED_LOADS     0x00000100
207 #define SYMOPT_FAIL_CRITICAL_ERRORS     0x00000200
208 #define SYMOPT_EXACT_SYMBOLS            0x00000400
209 #define SYMOPT_WILD_UNDERSCORE          0x00000800
210 #define SYMOPT_USE_DEFAULTS             0x00001000
211 #define SYMOPT_INCLUDE_32BIT_MODULES    0x00002000
212
213 #define SYMOPT_DEBUG                    0x80000000
214
215 typedef struct _IMAGEHLP_STACK_FRAME
216 {
217     ULONG       InstructionOffset;
218     ULONG       ReturnOffset;
219     ULONG       FrameOffset;
220     ULONG       StackOffset;
221     ULONG       BackingStoreOffset;
222     ULONG       FuncTableEntry;
223     ULONG       Params[4];
224     ULONG       Reserved[5];
225     BOOL        Virtual;
226     ULONG       Reserved2;
227 } IMAGEHLP_STACK_FRAME, *PIMAGEHLP_STACK_FRAME;
228
229 typedef VOID IMAGEHLP_CONTEXT, *PIMAGEHLP_CONTEXT;
230
231 #define DBHHEADER_DEBUGDIRS     0x1
232 typedef struct _DBGHELP_MODLOAD_DATA
233 {
234     DWORD               ssize;
235     DWORD               ssig;
236     PVOID               data;
237     DWORD               size;
238     DWORD               flags;
239 } MODLOAD_DATA, *PMODLOAD_DATA;
240
241 /*************************
242  *     now DBGHELP       *
243  *************************/
244
245 /* DebugHelp */
246
247 #define MINIDUMP_SIGNATURE 0x4D444D50 /* 'PMDM' */
248 #define MINIDUMP_VERSION   (42899)
249
250 typedef DWORD   RVA;
251 typedef ULONG64 RVA64;
252
253 typedef enum _MINIDUMP_TYPE 
254 {
255     MiniDumpNormal         = 0x0000,
256     MiniDumpWithDataSegs   = 0x0001,
257     MiniDumpWithFullMemory = 0x0002,
258     MiniDumpWithHandleData = 0x0004,
259     MiniDumpFilterMemory   = 0x0008,
260     MiniDumpScanMemory     = 0x0010
261 } MINIDUMP_TYPE;
262
263 typedef enum _MINIDUMP_CALLBACK_TYPE
264 {
265     ModuleCallback,
266     ThreadCallback,
267     ThreadExCallback,
268     IncludeThreadCallback,
269     IncludeModuleCallback,
270 } MINIDUMP_CALLBACK_TYPE;
271
272 typedef struct _MINIDUMP_THREAD_CALLBACK
273 {
274     ULONG                       ThreadId;
275     HANDLE                      ThreadHandle;
276     CONTEXT                     Context;
277     ULONG                       SizeOfContext;
278     ULONGLONG                   StackBase;
279     ULONG64                     StackEnd;
280 } MINIDUMP_THREAD_CALLBACK, *PMINIDUMP_THREAD_CALLBACK;
281
282 typedef struct _MINIDUMP_THREAD_EX_CALLBACK 
283 {
284     ULONG                       ThreadId;
285     HANDLE                      ThreadHandle;
286     CONTEXT                     Context;
287     ULONG                       SizeOfContext;
288     ULONGLONG                   StackBase;
289     ULONGLONG                   StackEnd;
290     ULONGLONG                   BackingStoreBase;
291     ULONGLONG                   BackingStoreEnd;
292 } MINIDUMP_THREAD_EX_CALLBACK, *PMINIDUMP_THREAD_EX_CALLBACK;
293
294 typedef struct _MINIDUMP_INCLUDE_THREAD_CALLBACK
295 {
296     ULONG ThreadId;
297 } MINIDUMP_INCLUDE_THREAD_CALLBACK, *PMINIDUMP_INCLUDE_THREAD_CALLBACK;
298
299 typedef enum _THREAD_WRITE_FLAGS 
300 {
301     ThreadWriteThread            = 0x0001,
302     ThreadWriteStack             = 0x0002,
303     ThreadWriteContext           = 0x0004,
304     ThreadWriteBackingStore      = 0x0008,
305     ThreadWriteInstructionWindow = 0x0010
306 } THREAD_WRITE_FLAGS;
307
308 typedef struct _MINIDUMP_MODULE_CALLBACK 
309 {
310     PWCHAR                      FullPath;
311     ULONGLONG                   BaseOfImage;
312     ULONG                       SizeOfImage;
313     ULONG                       CheckSum;
314     ULONG                       TimeDateStamp;
315     VS_FIXEDFILEINFO            VersionInfo;
316     PVOID                       CvRecord;
317     ULONG                       SizeOfCvRecord;
318     PVOID                       MiscRecord;
319     ULONG                       SizeOfMiscRecord;
320 } MINIDUMP_MODULE_CALLBACK, *PMINIDUMP_MODULE_CALLBACK;
321
322 typedef struct _MINIDUMP_INCLUDE_MODULE_CALLBACK 
323 {
324     ULONG64 BaseOfImage;
325 } MINIDUMP_INCLUDE_MODULE_CALLBACK, *PMINIDUMP_INCLUDE_MODULE_CALLBACK;
326
327 typedef enum _MODULE_WRITE_FLAGS 
328 {
329     ModuleWriteModule        = 0x0001,
330     ModuleWriteDataSeg       = 0x0002,
331     ModuleWriteMiscRecord    = 0x0004,
332     ModuleWriteCvRecord      = 0x0008,
333     ModuleReferencedByMemory = 0x0010
334 } MODULE_WRITE_FLAGS;
335
336 typedef struct _MINIDUMP_CALLBACK_INPUT 
337 {
338     ULONG                       ProcessId;
339     HANDLE                      ProcessHandle;
340     ULONG                       CallbackType;
341     union 
342     {
343         MINIDUMP_THREAD_CALLBACK        Thread;
344         MINIDUMP_THREAD_EX_CALLBACK     ThreadEx;
345         MINIDUMP_MODULE_CALLBACK        Module;
346         MINIDUMP_INCLUDE_THREAD_CALLBACK IncludeThread;
347         MINIDUMP_INCLUDE_MODULE_CALLBACK IncludeModule;
348     } u;
349 } MINIDUMP_CALLBACK_INPUT, *PMINIDUMP_CALLBACK_INPUT;
350
351 typedef struct _MINIDUMP_CALLBACK_OUTPUT
352 {
353     union 
354     {
355         ULONG                           ModuleWriteFlags;
356         ULONG                           ThreadWriteFlags;
357     } u;
358 } MINIDUMP_CALLBACK_OUTPUT, *PMINIDUMP_CALLBACK_OUTPUT;
359
360 typedef BOOL (WINAPI* MINIDUMP_CALLBACK_ROUTINE)(PVOID CallbackParam,
361                                                  const PMINIDUMP_CALLBACK_INPUT CallbackInput,
362                                                  PMINIDUMP_CALLBACK_OUTPUT CallbackOutput);
363
364 typedef struct _MINIDUMP_CALLBACK_INFORMATION 
365 {
366     MINIDUMP_CALLBACK_ROUTINE   CallbackRoutine;
367     void*                       CallbackParam;
368 } MINIDUMP_CALLBACK_INFORMATION, *PMINIDUMP_CALLBACK_INFORMATION;
369
370 typedef struct _MINIDUMP_LOCATION_DESCRIPTOR 
371 {
372     ULONG                       DataSize;
373     RVA                         Rva;
374 } MINIDUMP_LOCATION_DESCRIPTOR;
375
376 typedef struct _MINIDUMP_DIRECTORY 
377 {
378     ULONG                       StreamType;
379     MINIDUMP_LOCATION_DESCRIPTOR Location;
380 } MINIDUMP_DIRECTORY, *PMINIDUMP_DIRECTORY;
381
382 typedef struct _MINIDUMP_EXCEPTION
383 {
384     ULONG                       ExceptionCode;
385     ULONG                       ExceptionFlags;
386     ULONGLONG                   ExceptionRecord;
387     ULONGLONG                   ExceptionAddress;
388     ULONG                       NumberParameters;
389     ULONG                        __unusedAlignment;
390     ULONGLONG                   ExceptionInformation[EXCEPTION_MAXIMUM_PARAMETERS];
391 } MINIDUMP_EXCEPTION, *PMINIDUMP_EXCEPTION;
392
393 typedef struct _MINIDUMP_EXCEPTION_INFORMATION
394 {
395     DWORD                       ThreadId;
396     PEXCEPTION_POINTERS         ExceptionPointers;
397     BOOL                        ClientPointers;
398 } MINIDUMP_EXCEPTION_INFORMATION, *PMINIDUMP_EXCEPTION_INFORMATION;
399
400 typedef struct MINIDUMP_EXCEPTION_STREAM 
401 {
402     ULONG                       ThreadId;
403     ULONG                       __alignment;
404     MINIDUMP_EXCEPTION          ExceptionRecord;
405     MINIDUMP_LOCATION_DESCRIPTOR ThreadContext;
406 } MINIDUMP_EXCEPTION_STREAM, *PMINIDUMP_EXCEPTION_STREAM;
407
408 typedef struct _MINIDUMP_HEADER 
409 {
410     DWORD                       Signature;
411     DWORD                       Version;
412     DWORD                       NumberOfStreams;
413     RVA                         StreamDirectoryRva;
414     DWORD                       CheckSum;
415     union 
416     {
417         DWORD                           Reserved;
418         DWORD                           TimeDateStamp;
419     } u;
420     ULONGLONG                   Flags;
421 } MINIDUMP_HEADER, *PMINIDUMP_HEADER;
422
423 typedef struct _MINIDUMP_MEMORY_DESCRIPTOR 
424 {
425     ULONGLONG                   StartOfMemoryRange;
426     MINIDUMP_LOCATION_DESCRIPTOR Memory;
427 } MINIDUMP_MEMORY_DESCRIPTOR, *PMINIDUMP_MEMORY_DESCRIPTOR;
428
429 typedef struct _MINIDUMP_MODULE
430 {
431     ULONGLONG                   BaseOfImage;
432     ULONG                       SizeOfImage;
433     ULONG                       CheckSum;
434     ULONG                       TimeDateStamp;
435     RVA                         ModuleNameRva;
436     VS_FIXEDFILEINFO            VersionInfo;
437     MINIDUMP_LOCATION_DESCRIPTOR CvRecord;
438     MINIDUMP_LOCATION_DESCRIPTOR MiscRecord;
439     ULONGLONG                   Reserved0;
440     ULONGLONG                   Reserved1;
441 } MINIDUMP_MODULE, *PMINIDUMP_MODULE;
442
443 typedef struct _MINIDUMP_MODULE_LIST 
444 {
445     ULONG                       NumberOfModules;
446     MINIDUMP_MODULE             Modules[1]; /* FIXME: 0-sized array not supported */
447 } MINIDUMP_MODULE_LIST, *PMINIDUMP_MODULE_LIST;
448
449 typedef struct _MINIDUMP_USER_STREAM
450 {
451     ULONG                       Type;
452     ULONG                       BufferSize;
453     void*                       Buffer;
454 } MINIDUMP_USER_STREAM, *PMINIDUMP_USER_STREAM;
455
456 typedef struct _MINIDUMP_USER_STREAM_INFORMATION
457 {
458     ULONG                       UserStreamCount;
459     PMINIDUMP_USER_STREAM       UserStreamArray;
460 } MINIDUMP_USER_STREAM_INFORMATION, *PMINIDUMP_USER_STREAM_INFORMATION;
461
462 typedef enum _MINIDUMP_STREAM_TYPE
463 {
464     UnusedStream                = 0,
465     ReservedStream0             = 1,
466     ReservedStream1             = 2,
467     ThreadListStream            = 3,
468     ModuleListStream            = 4,
469     MemoryListStream            = 5,
470     ExceptionStream             = 6,
471     SystemInfoStream            = 7,
472     ThreadExListStream          = 8,
473     Memory64ListStream          = 9,
474     CommentStreamA              = 10,
475     CommentStreamW              = 11,
476     HandleDataStream            = 12,
477     FunctionTableStream         = 13,
478
479     LastReservedStream          = 0xffff
480 } MINIDUMP_STREAM_TYPE;
481
482 typedef struct _MINIDUMP_SYSTEM_INFO
483 {
484     USHORT                      ProcessorArchitecture;
485     USHORT                      ProcessorLevel;
486     USHORT                      ProcessorRevision;
487     USHORT                      Reserved0;
488
489     ULONG                       MajorVersion;
490     ULONG                       MinorVersion;
491     ULONG                       BuildNumber;
492     ULONG                       PlatformId;
493
494     RVA                         CSDVersionRva;
495     ULONG                       Reserved1;
496     union _CPU_INFORMATION 
497     {
498         struct 
499         {
500             ULONG                       VendorId[3];
501             ULONG                       VersionInformation;
502             ULONG                       FeatureInformation;
503             ULONG                       AMDExtendedCpuFeatures;
504         } X86CpuInfo;
505         struct 
506         {
507             ULONGLONG                   ProcessorFeatures[2];
508         } OtherCpuInfo;
509     } Cpu;
510
511 } MINIDUMP_SYSTEM_INFO, *PMINIDUMP_SYSTEM_INFO;
512
513 typedef struct _MINIDUMP_THREAD
514 {
515     ULONG                       ThreadId;
516     ULONG                       SuspendCount;
517     ULONG                       PriorityClass;
518     ULONG                       Priority;
519     ULONGLONG                   Teb;
520     MINIDUMP_MEMORY_DESCRIPTOR  Stack;
521     MINIDUMP_LOCATION_DESCRIPTOR ThreadContext;
522 } MINIDUMP_THREAD, *PMINIDUMP_THREAD;
523
524 typedef struct _MINIDUMP_THREAD_LIST
525 {
526     ULONG                       NumberOfThreads;
527     MINIDUMP_THREAD             Threads[1]; /* FIXME: no support of 0 sized array */
528 } MINIDUMP_THREAD_LIST, *PMINIDUMP_THREAD_LIST;
529
530 /*************************
531  *    MODULE handling    *
532  *************************/
533 typedef BOOL (CALLBACK *PENUMLOADED_MODULES_CALLBACK)(PSTR ModuleName, DWORD ModuleBase,
534                                                       ULONG ModuleSize, PVOID UserContext);
535 extern BOOL  WINAPI EnumerateLoadedModules(HANDLE hProcess,
536                                            PENUMLOADED_MODULES_CALLBACK EnumLoadedModulesCallback,
537                                            PVOID UserContext);
538 typedef BOOL (CALLBACK *PSYM_ENUMMODULES_CALLBACK)(PSTR ModuleName, DWORD BaseOfDll,
539                                                    PVOID UserContext);
540 extern BOOL  WINAPI SymEnumerateModules(HANDLE hProcess,
541                                         PSYM_ENUMMODULES_CALLBACK EnumModulesCallback,  
542                                         PVOID UserContext);
543 extern BOOL  WINAPI SymGetModuleInfo(HANDLE hProcess, DWORD dwAddr, 
544                                      PIMAGEHLP_MODULE ModuleInfo);
545 extern BOOL  WINAPI SymGetModuleInfoW(HANDLE hProcess, DWORD dwAddr,
546                                       PIMAGEHLP_MODULEW ModuleInfo);
547 extern DWORD WINAPI SymGetModuleBase(HANDLE hProcess, DWORD dwAddr);
548 extern DWORD WINAPI SymLoadModule(HANDLE hProcess, HANDLE hFile, PSTR ImageName,
549                                   PSTR ModuleName, DWORD BaseOfDll, DWORD SizeOfDll);
550 extern DWORD WINAPI SymLoadModuleEx(HANDLE hProcess, HANDLE hFile, PSTR ImageName,
551                                     PSTR ModuleName, DWORD BaseOfDll, DWORD DllSize,
552                                     PMODLOAD_DATA Data, DWORD Flags);
553 extern BOOL  WINAPI SymUnloadModule(HANDLE hProcess, DWORD BaseOfDll);
554
555 /*************************
556  *    Symbol Handling    *
557  *************************/
558
559 #define IMAGEHLP_SYMBOL_INFO_VALUEPRESENT          1
560 #define IMAGEHLP_SYMBOL_INFO_REGISTER              SYMF_REGISTER        /*  0x08 */
561 #define IMAGEHLP_SYMBOL_INFO_REGRELATIVE           SYMF_REGREL          /*  0x10 */
562 #define IMAGEHLP_SYMBOL_INFO_FRAMERELATIVE         SYMF_FRAMEREL        /*  0x20 */
563 #define IMAGEHLP_SYMBOL_INFO_PARAMETER             SYMF_PARAMETER       /*  0x40 */
564 #define IMAGEHLP_SYMBOL_INFO_LOCAL                 SYMF_LOCAL           /*  0x80 */
565 #define IMAGEHLP_SYMBOL_INFO_CONSTANT              SYMF_CONSTANT        /* 0x100 */
566 #define IMAGEHLP_SYMBOL_FUNCTION                   SYMF_FUNCTION        /* 0x800 */
567
568 typedef struct _SYMBOL_INFO
569 {
570     ULONG       SizeOfStruct;
571     ULONG       TypeIndex;
572     ULONG       Reserved[2];
573     ULONG       Reserved2;
574     ULONG       Size;
575     ULONG       ModBase;
576     ULONG       Flags;
577     ULONG       Value;
578     ULONG       Address;
579     ULONG       Register;
580     ULONG       Scope;
581     ULONG       Tag;
582     ULONG       NameLen;
583     ULONG       MaxNameLen;
584     CHAR        Name[1];
585 } SYMBOL_INFO, *PSYMBOL_INFO;
586
587 typedef enum _IMAGEHLP_SYMBOL_TYPE_INFO 
588 {
589     TI_GET_SYMTAG,
590     TI_GET_SYMNAME,
591     TI_GET_LENGTH,
592     TI_GET_TYPE,
593     TI_GET_TYPEID,
594     TI_GET_BASETYPE,
595     TI_GET_ARRAYINDEXTYPEID,
596     TI_FINDCHILDREN,
597     TI_GET_DATAKIND,
598     TI_GET_ADDRESSOFFSET,
599     TI_GET_OFFSET,
600     TI_GET_VALUE,
601     TI_GET_COUNT,
602     TI_GET_CHILDRENCOUNT,
603     TI_GET_BITPOSITION,
604     TI_GET_VIRTUALBASECLASS,
605     TI_GET_VIRTUALTABLESHAPEID,
606     TI_GET_VIRTUALBASEPOINTEROFFSET,
607     TI_GET_CLASSPARENTID,
608     TI_GET_NESTED,
609     TI_GET_SYMINDEX,
610     TI_GET_LEXICALPARENT,
611     TI_GET_ADDRESS,
612     TI_GET_THISADJUST,
613 } IMAGEHLP_SYMBOL_TYPE_INFO;
614
615 typedef struct _TI_FINDCHILDREN_PARAMS 
616 {
617     ULONG Count;
618     ULONG Start;
619     ULONG ChildId[1];
620 } TI_FINDCHILDREN_PARAMS;
621
622 BOOL WINAPI SymGetTypeInfo(HANDLE hProcess, DWORD ModBase, ULONG TypeId,
623                            IMAGEHLP_SYMBOL_TYPE_INFO GetType, PVOID);
624 typedef BOOL (CALLBACK *PSYM_ENUMERATESYMBOLS_CALLBACK)(PSYMBOL_INFO pSymInfo,
625                                                         ULONG SymbolSize, PVOID UserContext);
626 BOOL WINAPI SymEnumTypes(HANDLE hProcess, DWORD BaseOfDll,
627                          PSYM_ENUMERATESYMBOLS_CALLBACK EnumSymbolsCallback,
628                          PVOID UserContext);
629 BOOL WINAPI SymGetTypeFromName(HANDLE hProcess, DWORD BaseOfDll, LPSTR Name,
630                                PSYMBOL_INFO Symbol);
631
632 /*************************
633  *      Source Files     *
634  *************************/
635 typedef BOOL (CALLBACK *PSYM_ENUMSOURCFILES_CALLBACK)(PSOURCEFILE pSourceFile,
636                                                       PVOID UserContext);
637
638 BOOL WINAPI SymEnumSourceFiles(HANDLE hProcess, ULONG ModBase, LPSTR Mask,
639                                PSYM_ENUMSOURCFILES_CALLBACK cbSrcFiles,
640                                PVOID UserContext);
641
642 /*************************
643  * File & image handling *
644  *************************/
645 HANDLE WINAPI FindDebugInfoFile(PSTR FileName, PSTR SymbolPath, PSTR DebugFilePath);
646 typedef BOOL (CALLBACK *PFIND_DEBUG_FILE_CALLBACK)(HANDLE FileHandle, PSTR FileName,
647                                                    PVOID CallerData);
648 HANDLE WINAPI FindDebugInfoFileEx(PSTR FileName, PSTR SymbolPath, PSTR DebugFilePath,
649                                   PFIND_DEBUG_FILE_CALLBACK Callback, PVOID CallerData);
650 typedef BOOL (CALLBACK *PFINDFILEINPATHCALLBACK)(PSTR filename, PVOID context);
651
652 BOOL WINAPI SymFindFileInPath(HANDLE hProcess, LPSTR searchPath, LPSTR FileName,
653                               PVOID id, DWORD two, DWORD three, DWORD flags,
654                               LPSTR FilePath, PFINDFILEINPATHCALLBACK callback,
655                               PVOID context);
656 HANDLE WINAPI FindExecutableImage(PSTR FileName, PSTR SymbolPath, PSTR ImageFilePath);
657 typedef BOOL (CALLBACK *PFIND_EXE_FILE_CALLBACK)(HANDLE FileHandle, PSTR FileName,
658                                                  PVOID CallerData);
659 HANDLE WINAPI FindExecutableImageEx(PSTR FileName, PSTR SymbolPath, PSTR ImageFilePath,
660                                     PFIND_EXE_FILE_CALLBACK Callback, PVOID CallerData);
661 PIMAGE_NT_HEADERS WINAPI ImageNtHeader(PVOID Base);
662
663 PVOID WINAPI ImageDirectoryEntryToDataEx(PVOID Base, BOOLEAN MappedAsImage,
664                                          USHORT DirectoryEntry, PULONG Size,
665                                          PIMAGE_SECTION_HEADER *FoundHeader);
666 PVOID WINAPI ImageDirectoryEntryToData(PVOID Base, BOOLEAN MappedAsImage,
667                                        USHORT DirectoryEntry, PULONG Size);
668 PIMAGE_SECTION_HEADER WINAPI ImageRvaToSection(PIMAGE_NT_HEADERS NtHeaders,
669                                                PVOID Base, ULONG Rva);
670 PVOID WINAPI ImageRvaToVa(PIMAGE_NT_HEADERS NtHeaders, PVOID Base,
671                           ULONG Rva, OUT PIMAGE_SECTION_HEADER *LastRvaSection);
672
673 #ifdef __cplusplus
674 } /* extern "C" */
675 #endif /* defined(__cplusplus) */
676
677 #endif  /* __WINE_DBGHELP_H */