Subversion Repositories Kolibri OS

Rev

Go to most recent revision | Details | Last modification | View Log | RSS feed

Rev Author Line No. Line
4358 Serge 1
/**
2
 * This file has no copyright assigned and is placed in the Public Domain.
3
 * This file is part of the w64 mingw-runtime package.
4
 * No warranty is given; refer to the file DISCLAIMER.PD within this package.
5
 */
6
#ifndef _DBGHELP_
7
#define _DBGHELP_
8
 
9
#ifdef _WIN64
10
#ifndef _IMAGEHLP64
11
#define _IMAGEHLP64
12
#endif
13
#endif
14
 
15
#ifdef __cplusplus
16
extern "C" {
17
#endif
18
 
19
#define IMAGEAPI DECLSPEC_IMPORT WINAPI
20
#define DBHLP_DEPRECIATED __declspec(deprecated)
21
 
22
#define DBHLPAPI IMAGEAPI
23
 
24
#define IMAGE_SEPARATION (64*1024)
25
 
26
  typedef struct _LOADED_IMAGE {
27
    PSTR ModuleName;
28
    HANDLE hFile;
29
    PUCHAR MappedAddress;
30
#ifdef _IMAGEHLP64
31
    PIMAGE_NT_HEADERS64 FileHeader;
32
#else
33
    PIMAGE_NT_HEADERS32 FileHeader;
34
#endif
35
    PIMAGE_SECTION_HEADER LastRvaSection;
36
    ULONG NumberOfSections;
37
    PIMAGE_SECTION_HEADER Sections;
38
    ULONG Characteristics;
39
    BOOLEAN fSystemImage;
40
    BOOLEAN fDOSImage;
41
    LIST_ENTRY Links;
42
    ULONG SizeOfImage;
43
  } LOADED_IMAGE,*PLOADED_IMAGE;
44
 
45
#define MAX_SYM_NAME 2000
46
 
47
  typedef BOOL (CALLBACK *PFIND_DEBUG_FILE_CALLBACK)(HANDLE FileHandle,PSTR FileName,PVOID CallerData);
48
  typedef BOOL (CALLBACK *PFINDFILEINPATHCALLBACK)(PSTR filename,PVOID context);
49
  typedef BOOL (CALLBACK *PFIND_EXE_FILE_CALLBACK)(HANDLE FileHandle,PSTR FileName,PVOID CallerData);
50
 
51
  typedef BOOL (WINAPI *PSYMBOLSERVERPROC)(LPCSTR,LPCSTR,PVOID,DWORD,DWORD,LPSTR);
52
  typedef BOOL (WINAPI *PSYMBOLSERVEROPENPROC)(VOID);
53
  typedef BOOL (WINAPI *PSYMBOLSERVERCLOSEPROC)(VOID);
54
  typedef BOOL (WINAPI *PSYMBOLSERVERSETOPTIONSPROC)(UINT_PTR,ULONG64);
55
  typedef BOOL (CALLBACK WINAPI *PSYMBOLSERVERCALLBACKPROC)(UINT_PTR action,ULONG64 data,ULONG64 context);
56
  typedef UINT_PTR (WINAPI *PSYMBOLSERVERGETOPTIONSPROC)();
57
  typedef BOOL (WINAPI *PSYMBOLSERVERPINGPROC)(LPCSTR);
58
 
59
  HANDLE IMAGEAPI FindDebugInfoFile(PSTR FileName,PSTR SymbolPath,PSTR DebugFilePath);
60
  HANDLE IMAGEAPI FindDebugInfoFileEx(PSTR FileName,PSTR SymbolPath,PSTR DebugFilePath,PFIND_DEBUG_FILE_CALLBACK Callback,PVOID CallerData);
61
  BOOL IMAGEAPI SymFindFileInPath(HANDLE hprocess,LPSTR SearchPath,LPSTR FileName,PVOID id,DWORD two,DWORD three,DWORD flags,LPSTR FoundFile,PFINDFILEINPATHCALLBACK callback,PVOID context);
62
  HANDLE IMAGEAPI FindExecutableImage(PSTR FileName,PSTR SymbolPath,PSTR ImageFilePath);
63
  HANDLE IMAGEAPI FindExecutableImageEx(PSTR FileName,PSTR SymbolPath,PSTR ImageFilePath,PFIND_EXE_FILE_CALLBACK Callback,PVOID CallerData);
64
  PIMAGE_NT_HEADERS IMAGEAPI ImageNtHeader(PVOID Base);
65
  PVOID IMAGEAPI ImageDirectoryEntryToDataEx(PVOID Base,BOOLEAN MappedAsImage,USHORT DirectoryEntry,PULONG Size,PIMAGE_SECTION_HEADER *FoundHeader);
66
  PVOID IMAGEAPI ImageDirectoryEntryToData(PVOID Base,BOOLEAN MappedAsImage,USHORT DirectoryEntry,PULONG Size);
67
  PIMAGE_SECTION_HEADER IMAGEAPI ImageRvaToSection(PIMAGE_NT_HEADERS NtHeaders,PVOID Base,ULONG Rva);
68
  PVOID IMAGEAPI ImageRvaToVa(PIMAGE_NT_HEADERS NtHeaders,PVOID Base,ULONG Rva,PIMAGE_SECTION_HEADER *LastRvaSection);
69
 
70
#define SSRVOPT_CALLBACK 0x0001
71
#define SSRVOPT_DWORD 0x0002
72
#define SSRVOPT_DWORDPTR 0x0004
73
#define SSRVOPT_GUIDPTR 0x0008
74
#define SSRVOPT_OLDGUIDPTR 0x0010
75
#define SSRVOPT_UNATTENDED 0x0020
76
#define SSRVOPT_NOCOPY 0x0040
77
#define SSRVOPT_PARENTWIN 0x0080
78
#define SSRVOPT_PARAMTYPE 0x0100
79
#define SSRVOPT_SECURE 0x0200
80
#define SSRVOPT_TRACE 0x0400
81
#define SSRVOPT_SETCONTEXT 0x0800
82
#define SSRVOPT_PROXY 0x1000
83
#define SSRVOPT_DOWNSTREAM_STORE 0x2000
84
#define SSRVOPT_RESET ((ULONG_PTR)-1)
85
 
86
#define SSRVACTION_TRACE 1
87
#define SSRVACTION_QUERYCANCEL 2
88
#define SSRVACTION_EVENT 3
89
 
90
#ifndef _WIN64
91
 
92
  typedef struct _IMAGE_DEBUG_INFORMATION {
93
    LIST_ENTRY List;
94
    DWORD ReservedSize;
95
    PVOID ReservedMappedBase;
96
    USHORT ReservedMachine;
97
    USHORT ReservedCharacteristics;
98
    DWORD ReservedCheckSum;
99
    DWORD ImageBase;
100
    DWORD SizeOfImage;
101
    DWORD ReservedNumberOfSections;
102
    PIMAGE_SECTION_HEADER ReservedSections;
103
    DWORD ReservedExportedNamesSize;
104
    PSTR ReservedExportedNames;
105
    DWORD ReservedNumberOfFunctionTableEntries;
106
    PIMAGE_FUNCTION_ENTRY ReservedFunctionTableEntries;
107
    DWORD ReservedLowestFunctionStartingAddress;
108
    DWORD ReservedHighestFunctionEndingAddress;
109
    DWORD ReservedNumberOfFpoTableEntries;
110
    PFPO_DATA ReservedFpoTableEntries;
111
    DWORD SizeOfCoffSymbols;
112
    PIMAGE_COFF_SYMBOLS_HEADER CoffSymbols;
113
    DWORD ReservedSizeOfCodeViewSymbols;
114
    PVOID ReservedCodeViewSymbols;
115
    PSTR ImageFilePath;
116
    PSTR ImageFileName;
117
    PSTR ReservedDebugFilePath;
118
    DWORD ReservedTimeDateStamp;
119
    BOOL ReservedRomImage;
120
    PIMAGE_DEBUG_DIRECTORY ReservedDebugDirectory;
121
    DWORD ReservedNumberOfDebugDirectories;
122
    DWORD ReservedOriginalFunctionTableBaseAddress;
123
    DWORD Reserved[2 ];
124
  } IMAGE_DEBUG_INFORMATION,*PIMAGE_DEBUG_INFORMATION;
125
 
126
  PIMAGE_DEBUG_INFORMATION IMAGEAPI MapDebugInformation(HANDLE FileHandle,PSTR FileName,PSTR SymbolPath,DWORD ImageBase);
127
  BOOL IMAGEAPI UnmapDebugInformation(PIMAGE_DEBUG_INFORMATION DebugInfo);
128
#endif
129
 
130
  typedef BOOL (CALLBACK *PENUMDIRTREE_CALLBACK)(LPCSTR FilePath,PVOID CallerData);
131
 
132
  BOOL IMAGEAPI SearchTreeForFile(PSTR RootPath,PSTR InputPathName,PSTR OutputPathBuffer);
133
  BOOL IMAGEAPI EnumDirTree(HANDLE hProcess,PSTR RootPath,PSTR InputPathName,PSTR OutputPathBuffer,PENUMDIRTREE_CALLBACK Callback,PVOID CallbackData);
134
  BOOL IMAGEAPI MakeSureDirectoryPathExists(PCSTR DirPath);
135
 
136
#define UNDNAME_COMPLETE (0x0000)
137
#define UNDNAME_NO_LEADING_UNDERSCORES (0x0001)
138
#define UNDNAME_NO_MS_KEYWORDS (0x0002)
139
#define UNDNAME_NO_FUNCTION_RETURNS (0x0004)
140
#define UNDNAME_NO_ALLOCATION_MODEL (0x0008)
141
#define UNDNAME_NO_ALLOCATION_LANGUAGE (0x0010)
142
#define UNDNAME_NO_MS_THISTYPE (0x0020)
143
#define UNDNAME_NO_CV_THISTYPE (0x0040)
144
#define UNDNAME_NO_THISTYPE (0x0060)
145
#define UNDNAME_NO_ACCESS_SPECIFIERS (0x0080)
146
#define UNDNAME_NO_THROW_SIGNATURES (0x0100)
147
#define UNDNAME_NO_MEMBER_TYPE (0x0200)
148
#define UNDNAME_NO_RETURN_UDT_MODEL (0x0400)
149
#define UNDNAME_32_BIT_DECODE (0x0800)
150
#define UNDNAME_NAME_ONLY (0x1000)
151
#define UNDNAME_NO_ARGUMENTS (0x2000)
152
#define UNDNAME_NO_SPECIAL_SYMS (0x4000)
153
 
154
  DWORD IMAGEAPI WINAPI UnDecorateSymbolName(PCSTR DecoratedName,PSTR UnDecoratedName,DWORD UndecoratedLength,DWORD Flags);
155
 
156
#define DBHHEADER_DEBUGDIRS 0x1
157
 
158
  typedef struct _MODLOAD_DATA {
159
    DWORD ssize;
160
    DWORD ssig;
161
    PVOID data;
162
    DWORD size;
163
    DWORD flags;
164
  } MODLOAD_DATA,*PMODLOAD_DATA;
165
 
166
  typedef enum {
167
    AddrMode1616,AddrMode1632,AddrModeReal,AddrModeFlat
168
  } ADDRESS_MODE;
169
 
170
  typedef struct _tagADDRESS64 {
171
    DWORD64 Offset;
172
    WORD Segment;
173
    ADDRESS_MODE Mode;
174
  } ADDRESS64,*LPADDRESS64;
175
 
176
#ifdef _IMAGEHLP64
177
#define ADDRESS ADDRESS64
178
#define LPADDRESS LPADDRESS64
179
#else
180
  typedef struct _tagADDRESS {
181
    DWORD Offset;
182
    WORD Segment;
183
    ADDRESS_MODE Mode;
184
  } ADDRESS,*LPADDRESS;
185
 
186
  static __inline void Address32To64(LPADDRESS a32,LPADDRESS64 a64) {
187
    a64->Offset = (ULONG64)(LONG64)(LONG)a32->Offset;
188
    a64->Segment = a32->Segment;
189
    a64->Mode = a32->Mode;
190
  }
191
 
192
  static __inline void Address64To32(LPADDRESS64 a64,LPADDRESS a32) {
193
    a32->Offset = (ULONG)a64->Offset;
194
    a32->Segment = a64->Segment;
195
    a32->Mode = a64->Mode;
196
  }
197
#endif
198
 
199
  typedef struct _KDHELP64 {
200
    DWORD64 Thread;
201
    DWORD ThCallbackStack;
202
    DWORD ThCallbackBStore;
203
    DWORD NextCallback;
204
    DWORD FramePointer;
205
    DWORD64 KiCallUserMode;
206
    DWORD64 KeUserCallbackDispatcher;
207
    DWORD64 SystemRangeStart;
208
    DWORD64 Reserved[8];
209
  } KDHELP64,*PKDHELP64;
210
 
211
#ifdef _IMAGEHLP64
212
#define KDHELP KDHELP64
213
#define PKDHELP PKDHELP64
214
#else
215
  typedef struct _KDHELP {
216
    DWORD Thread;
217
    DWORD ThCallbackStack;
218
    DWORD NextCallback;
219
    DWORD FramePointer;
220
    DWORD KiCallUserMode;
221
    DWORD KeUserCallbackDispatcher;
222
    DWORD SystemRangeStart;
223
    DWORD ThCallbackBStore;
224
    DWORD Reserved[8];
225
  } KDHELP,*PKDHELP;
226
 
227
  static __inline void KdHelp32To64(PKDHELP p32,PKDHELP64 p64) {
228
    p64->Thread = p32->Thread;
229
    p64->ThCallbackStack = p32->ThCallbackStack;
230
    p64->NextCallback = p32->NextCallback;
231
    p64->FramePointer = p32->FramePointer;
232
    p64->KiCallUserMode = p32->KiCallUserMode;
233
    p64->KeUserCallbackDispatcher = p32->KeUserCallbackDispatcher;
234
    p64->SystemRangeStart = p32->SystemRangeStart;
235
  }
236
#endif
237
 
238
  typedef struct _tagSTACKFRAME64 {
239
    ADDRESS64 AddrPC;
240
    ADDRESS64 AddrReturn;
241
    ADDRESS64 AddrFrame;
242
    ADDRESS64 AddrStack;
243
    ADDRESS64 AddrBStore;
244
    PVOID FuncTableEntry;
245
    DWORD64 Params[4];
246
    BOOL Far;
247
    BOOL Virtual;
248
    DWORD64 Reserved[3];
249
    KDHELP64 KdHelp;
250
  } STACKFRAME64,*LPSTACKFRAME64;
251
 
252
#ifdef _IMAGEHLP64
253
#define STACKFRAME STACKFRAME64
254
#define LPSTACKFRAME LPSTACKFRAME64
255
#else
256
  typedef struct _tagSTACKFRAME {
257
    ADDRESS AddrPC;
258
    ADDRESS AddrReturn;
259
    ADDRESS AddrFrame;
260
    ADDRESS AddrStack;
261
    PVOID FuncTableEntry;
262
    DWORD Params[4];
263
    BOOL Far;
264
    BOOL Virtual;
265
    DWORD Reserved[3];
266
    KDHELP KdHelp;
267
    ADDRESS AddrBStore;
268
  } STACKFRAME,*LPSTACKFRAME;
269
#endif
270
 
271
  typedef BOOL (WINAPI *PREAD_PROCESS_MEMORY_ROUTINE64)(HANDLE hProcess,DWORD64 qwBaseAddress,PVOID lpBuffer,DWORD nSize,LPDWORD lpNumberOfBytesRead);
272
  typedef PVOID (WINAPI *PFUNCTION_TABLE_ACCESS_ROUTINE64)(HANDLE hProcess,DWORD64 AddrBase);
273
  typedef DWORD64 (WINAPI *PGET_MODULE_BASE_ROUTINE64)(HANDLE hProcess,DWORD64 Address);
274
  typedef DWORD64 (WINAPI *PTRANSLATE_ADDRESS_ROUTINE64)(HANDLE hProcess,HANDLE hThread,LPADDRESS64 lpaddr);
275
 
276
  BOOL IMAGEAPI StackWalk64(DWORD MachineType,HANDLE hProcess,HANDLE hThread,LPSTACKFRAME64 StackFrame,PVOID ContextRecord,PREAD_PROCESS_MEMORY_ROUTINE64 ReadMemoryRoutine,PFUNCTION_TABLE_ACCESS_ROUTINE64 FunctionTableAccessRoutine,PGET_MODULE_BASE_ROUTINE64 GetModuleBaseRoutine,PTRANSLATE_ADDRESS_ROUTINE64 TranslateAddress);
277
 
278
#ifdef _IMAGEHLP64
279
#define PREAD_PROCESS_MEMORY_ROUTINE PREAD_PROCESS_MEMORY_ROUTINE64
280
#define PFUNCTION_TABLE_ACCESS_ROUTINE PFUNCTION_TABLE_ACCESS_ROUTINE64
281
#define PGET_MODULE_BASE_ROUTINE PGET_MODULE_BASE_ROUTINE64
282
#define PTRANSLATE_ADDRESS_ROUTINE PTRANSLATE_ADDRESS_ROUTINE64
283
#define StackWalk StackWalk64
284
#else
285
  typedef BOOL (WINAPI *PREAD_PROCESS_MEMORY_ROUTINE)(HANDLE hProcess,DWORD lpBaseAddress,PVOID lpBuffer,DWORD nSize,PDWORD lpNumberOfBytesRead);
286
  typedef PVOID (WINAPI *PFUNCTION_TABLE_ACCESS_ROUTINE)(HANDLE hProcess,DWORD AddrBase);
287
  typedef DWORD (WINAPI *PGET_MODULE_BASE_ROUTINE)(HANDLE hProcess,DWORD Address);
288
  typedef DWORD (WINAPI *PTRANSLATE_ADDRESS_ROUTINE)(HANDLE hProcess,HANDLE hThread,LPADDRESS lpaddr);
289
 
290
  BOOL IMAGEAPI StackWalk(DWORD MachineType,HANDLE hProcess,HANDLE hThread,LPSTACKFRAME StackFrame,PVOID ContextRecord,PREAD_PROCESS_MEMORY_ROUTINE ReadMemoryRoutine,PFUNCTION_TABLE_ACCESS_ROUTINE FunctionTableAccessRoutine,PGET_MODULE_BASE_ROUTINE GetModuleBaseRoutine,PTRANSLATE_ADDRESS_ROUTINE TranslateAddress);
291
#endif
292
 
293
#define API_VERSION_NUMBER 9
294
 
295
  typedef struct API_VERSION {
296
    USHORT MajorVersion;
297
    USHORT MinorVersion;
298
    USHORT Revision;
299
    USHORT Reserved;
300
  } API_VERSION,*LPAPI_VERSION;
301
 
302
  LPAPI_VERSION IMAGEAPI ImagehlpApiVersion(VOID);
303
  LPAPI_VERSION IMAGEAPI ImagehlpApiVersionEx(LPAPI_VERSION AppVersion);
304
  DWORD IMAGEAPI GetTimestampForLoadedLibrary(HMODULE Module);
305
 
306
  typedef BOOL (CALLBACK *PSYM_ENUMMODULES_CALLBACK64)(PSTR ModuleName,DWORD64 BaseOfDll,PVOID UserContext);
307
  typedef BOOL (CALLBACK *PSYM_ENUMSYMBOLS_CALLBACK64)(PSTR SymbolName,DWORD64 SymbolAddress,ULONG SymbolSize,PVOID UserContext);
308
  typedef BOOL (CALLBACK *PSYM_ENUMSYMBOLS_CALLBACK64W)(PWSTR SymbolName,DWORD64 SymbolAddress,ULONG SymbolSize,PVOID UserContext);
309
  typedef BOOL (CALLBACK *PENUMLOADED_MODULES_CALLBACK64)(PSTR ModuleName,DWORD64 ModuleBase,ULONG ModuleSize,PVOID UserContext);
310
  typedef BOOL (CALLBACK *PSYMBOL_REGISTERED_CALLBACK64)(HANDLE hProcess,ULONG ActionCode,ULONG64 CallbackData,ULONG64 UserContext);
311
  typedef PVOID (CALLBACK *PSYMBOL_FUNCENTRY_CALLBACK)(HANDLE hProcess,DWORD AddrBase,PVOID UserContext);
312
  typedef PVOID (CALLBACK *PSYMBOL_FUNCENTRY_CALLBACK64)(HANDLE hProcess,ULONG64 AddrBase,ULONG64 UserContext);
313
 
314
#ifdef _IMAGEHLP64
315
#define PSYM_ENUMMODULES_CALLBACK PSYM_ENUMMODULES_CALLBACK64
316
#define PSYM_ENUMSYMBOLS_CALLBACK PSYM_ENUMSYMBOLS_CALLBACK64
317
#define PSYM_ENUMSYMBOLS_CALLBACKW PSYM_ENUMSYMBOLS_CALLBACK64W
318
#define PENUMLOADED_MODULES_CALLBACK PENUMLOADED_MODULES_CALLBACK64
319
#define PSYMBOL_REGISTERED_CALLBACK PSYMBOL_REGISTERED_CALLBACK64
320
#define PSYMBOL_FUNCENTRY_CALLBACK PSYMBOL_FUNCENTRY_CALLBACK64
321
#else
322
  typedef BOOL (CALLBACK *PSYM_ENUMMODULES_CALLBACK)(PSTR ModuleName,ULONG BaseOfDll,PVOID UserContext);
323
  typedef BOOL (CALLBACK *PSYM_ENUMSYMBOLS_CALLBACK)(PSTR SymbolName,ULONG SymbolAddress,ULONG SymbolSize,PVOID UserContext);
324
  typedef BOOL (CALLBACK *PSYM_ENUMSYMBOLS_CALLBACKW)(PWSTR SymbolName,ULONG SymbolAddress,ULONG SymbolSize,PVOID UserContext);
325
  typedef BOOL (CALLBACK *PENUMLOADED_MODULES_CALLBACK)(PSTR ModuleName,ULONG ModuleBase,ULONG ModuleSize,PVOID UserContext);
326
  typedef BOOL (CALLBACK *PSYMBOL_REGISTERED_CALLBACK)(HANDLE hProcess,ULONG ActionCode,PVOID CallbackData,PVOID UserContext);
327
#endif
328
 
329
#define SYMFLAG_VALUEPRESENT 0x00000001
330
#define SYMFLAG_REGISTER 0x00000008
331
#define SYMFLAG_REGREL 0x00000010
332
#define SYMFLAG_FRAMEREL 0x00000020
333
#define SYMFLAG_PARAMETER 0x00000040
334
#define SYMFLAG_LOCAL 0x00000080
335
#define SYMFLAG_CONSTANT 0x00000100
336
#define SYMFLAG_EXPORT 0x00000200
337
#define SYMFLAG_FORWARDER 0x00000400
338
#define SYMFLAG_FUNCTION 0x00000800
339
#define SYMFLAG_VIRTUAL 0x00001000
340
#define SYMFLAG_THUNK 0x00002000
341
#define SYMFLAG_TLSREL 0x00004000
342
 
343
  typedef enum {
344
    SymNone = 0,SymCoff,SymCv,SymPdb,SymExport,SymDeferred,SymSym,SymDia,SymVirtual,NumSymTypes
345
  } SYM_TYPE;
346
 
347
  typedef struct _IMAGEHLP_SYMBOL64 {
348
    DWORD SizeOfStruct;
349
    DWORD64 Address;
350
    DWORD Size;
351
    DWORD Flags;
352
    DWORD MaxNameLength;
353
    CHAR Name[1];
354
  } IMAGEHLP_SYMBOL64,*PIMAGEHLP_SYMBOL64;
355
 
356
  typedef struct _IMAGEHLP_SYMBOL64_PACKAGE {
357
    IMAGEHLP_SYMBOL64 sym;
358
    CHAR name[MAX_SYM_NAME + 1];
359
  } IMAGEHLP_SYMBOL64_PACKAGE,*PIMAGEHLP_SYMBOL64_PACKAGE;
360
 
361
#ifdef _IMAGEHLP64
362
 
363
#define IMAGEHLP_SYMBOL IMAGEHLP_SYMBOL64
364
#define PIMAGEHLP_SYMBOL PIMAGEHLP_SYMBOL64
365
#define IMAGEHLP_SYMBOL_PACKAGE IMAGEHLP_SYMBOL64_PACKAGE
366
#define PIMAGEHLP_SYMBOL_PACKAGE PIMAGEHLP_SYMBOL64_PACKAGE
367
#else
368
 
369
  typedef struct _IMAGEHLP_SYMBOL {
370
    DWORD SizeOfStruct;
371
    DWORD Address;
372
    DWORD Size;
373
    DWORD Flags;
374
    DWORD MaxNameLength;
375
    CHAR Name[1];
376
  } IMAGEHLP_SYMBOL,*PIMAGEHLP_SYMBOL;
377
 
378
  typedef struct _IMAGEHLP_SYMBOL_PACKAGE {
379
    IMAGEHLP_SYMBOL sym;
380
    CHAR name[MAX_SYM_NAME + 1];
381
  } IMAGEHLP_SYMBOL_PACKAGE,*PIMAGEHLP_SYMBOL_PACKAGE;
382
#endif
383
 
384
  typedef struct _IMAGEHLP_MODULE64 {
385
    DWORD SizeOfStruct;
386
    DWORD64 BaseOfImage;
387
    DWORD ImageSize;
388
    DWORD TimeDateStamp;
389
    DWORD CheckSum;
390
    DWORD NumSyms;
391
    SYM_TYPE SymType;
392
    CHAR ModuleName[32];
393
    CHAR ImageName[256];
394
    CHAR LoadedImageName[256];
395
    CHAR LoadedPdbName[256];
396
    DWORD CVSig;
397
    CHAR CVData[MAX_PATH*3];
398
    DWORD PdbSig;
399
    GUID PdbSig70;
400
    DWORD PdbAge;
401
    BOOL PdbUnmatched;
402
    BOOL DbgUnmatched;
403
    BOOL LineNumbers;
404
    BOOL GlobalSymbols;
405
    BOOL TypeInfo;
406
  } IMAGEHLP_MODULE64,*PIMAGEHLP_MODULE64;
407
 
408
  typedef struct _IMAGEHLP_MODULE64W {
409
    DWORD SizeOfStruct;
410
    DWORD64 BaseOfImage;
411
    DWORD ImageSize;
412
    DWORD TimeDateStamp;
413
    DWORD CheckSum;
414
    DWORD NumSyms;
415
    SYM_TYPE SymType;
416
    WCHAR ModuleName[32];
417
    WCHAR ImageName[256];
418
    WCHAR LoadedImageName[256];
419
    WCHAR LoadedPdbName[256];
420
    DWORD CVSig;
421
    WCHAR CVData[MAX_PATH*3];
422
    DWORD PdbSig;
423
    GUID PdbSig70;
424
    DWORD PdbAge;
425
    BOOL PdbUnmatched;
426
    BOOL DbgUnmatched;
427
    BOOL LineNumbers;
428
    BOOL GlobalSymbols;
429
    BOOL TypeInfo;
430
  } IMAGEHLP_MODULEW64,*PIMAGEHLP_MODULEW64;
431
 
432
#ifdef _IMAGEHLP64
433
#define IMAGEHLP_MODULE IMAGEHLP_MODULE64
434
#define PIMAGEHLP_MODULE PIMAGEHLP_MODULE64
435
#define IMAGEHLP_MODULEW IMAGEHLP_MODULEW64
436
#define PIMAGEHLP_MODULEW PIMAGEHLP_MODULEW64
437
#else
438
  typedef struct _IMAGEHLP_MODULE {
439
    DWORD SizeOfStruct;
440
    DWORD BaseOfImage;
441
    DWORD ImageSize;
442
    DWORD TimeDateStamp;
443
    DWORD CheckSum;
444
    DWORD NumSyms;
445
    SYM_TYPE SymType;
446
    CHAR ModuleName[32];
447
    CHAR ImageName[256];
448
    CHAR LoadedImageName[256];
449
  } IMAGEHLP_MODULE,*PIMAGEHLP_MODULE;
450
 
451
  typedef struct _IMAGEHLP_MODULEW {
452
    DWORD SizeOfStruct;
453
    DWORD BaseOfImage;
454
    DWORD ImageSize;
455
    DWORD TimeDateStamp;
456
    DWORD CheckSum;
457
    DWORD NumSyms;
458
    SYM_TYPE SymType;
459
    WCHAR ModuleName[32];
460
    WCHAR ImageName[256];
461
    WCHAR LoadedImageName[256];
462
  } IMAGEHLP_MODULEW,*PIMAGEHLP_MODULEW;
463
#endif
464
 
465
  typedef struct _IMAGEHLP_LINE64 {
466
    DWORD SizeOfStruct;
467
    PVOID Key;
468
    DWORD LineNumber;
469
    PCHAR FileName;
470
    DWORD64 Address;
471
  } IMAGEHLP_LINE64,*PIMAGEHLP_LINE64;
472
 
473
#ifdef _IMAGEHLP64
474
#define IMAGEHLP_LINE IMAGEHLP_LINE64
475
#define PIMAGEHLP_LINE PIMAGEHLP_LINE64
476
#else
477
  typedef struct _IMAGEHLP_LINE {
478
    DWORD SizeOfStruct;
479
    PVOID Key;
480
    DWORD LineNumber;
481
    PCHAR FileName;
482
    DWORD Address;
483
  } IMAGEHLP_LINE,*PIMAGEHLP_LINE;
484
#endif
485
 
486
  typedef struct _SOURCEFILE {
487
    DWORD64 ModBase;
488
    PCHAR FileName;
489
  } SOURCEFILE,*PSOURCEFILE;
490
 
491
#define CBA_DEFERRED_SYMBOL_LOAD_START 0x00000001
492
#define CBA_DEFERRED_SYMBOL_LOAD_COMPLETE 0x00000002
493
#define CBA_DEFERRED_SYMBOL_LOAD_FAILURE 0x00000003
494
#define CBA_SYMBOLS_UNLOADED 0x00000004
495
#define CBA_DUPLICATE_SYMBOL 0x00000005
496
#define CBA_READ_MEMORY 0x00000006
497
#define CBA_DEFERRED_SYMBOL_LOAD_CANCEL 0x00000007
498
#define CBA_SET_OPTIONS 0x00000008
499
#define CBA_EVENT 0x00000010
500
#define CBA_DEFERRED_SYMBOL_LOAD_PARTIAL 0x00000020
501
#define CBA_DEBUG_INFO 0x10000000
502
 
503
  typedef struct _IMAGEHLP_CBA_READ_MEMORY {
504
    DWORD64 addr;
505
    PVOID buf;
506
    DWORD bytes;
507
    DWORD *bytesread;
508
  } IMAGEHLP_CBA_READ_MEMORY,*PIMAGEHLP_CBA_READ_MEMORY;
509
 
510
  enum {
511
    sevInfo = 0,sevProblem,sevAttn,sevFatal,sevMax
512
  };
513
 
514
  typedef struct _IMAGEHLP_CBA_EVENT {
515
    DWORD severity;
516
    DWORD code;
517
    PCHAR desc;
518
    PVOID object;
519
  } IMAGEHLP_CBA_EVENT,*PIMAGEHLP_CBA_EVENT;
520
 
521
  typedef struct _IMAGEHLP_DEFERRED_SYMBOL_LOAD64 {
522
    DWORD SizeOfStruct;
523
    DWORD64 BaseOfImage;
524
    DWORD CheckSum;
525
    DWORD TimeDateStamp;
526
    CHAR FileName[MAX_PATH];
527
    BOOLEAN Reparse;
528
    HANDLE hFile;
529
    DWORD Flags;
530
  } IMAGEHLP_DEFERRED_SYMBOL_LOAD64,*PIMAGEHLP_DEFERRED_SYMBOL_LOAD64;
531
 
532
#define DSLFLAG_MISMATCHED_PDB 0x1
533
#define DSLFLAG_MISMATCHED_DBG 0x2
534
 
535
#ifdef _IMAGEHLP64
536
#define IMAGEHLP_DEFERRED_SYMBOL_LOAD IMAGEHLP_DEFERRED_SYMBOL_LOAD64
537
#define PIMAGEHLP_DEFERRED_SYMBOL_LOAD PIMAGEHLP_DEFERRED_SYMBOL_LOAD64
538
#else
539
  typedef struct _IMAGEHLP_DEFERRED_SYMBOL_LOAD {
540
    DWORD SizeOfStruct;
541
    DWORD BaseOfImage;
542
    DWORD CheckSum;
543
    DWORD TimeDateStamp;
544
    CHAR FileName[MAX_PATH];
545
    BOOLEAN Reparse;
546
    HANDLE hFile;
547
  } IMAGEHLP_DEFERRED_SYMBOL_LOAD,*PIMAGEHLP_DEFERRED_SYMBOL_LOAD;
548
#endif
549
 
550
  typedef struct _IMAGEHLP_DUPLICATE_SYMBOL64 {
551
    DWORD SizeOfStruct;
552
    DWORD NumberOfDups;
553
    PIMAGEHLP_SYMBOL64 Symbol;
554
    DWORD SelectedSymbol;
555
  } IMAGEHLP_DUPLICATE_SYMBOL64,*PIMAGEHLP_DUPLICATE_SYMBOL64;
556
 
557
#ifdef _IMAGEHLP64
558
#define IMAGEHLP_DUPLICATE_SYMBOL IMAGEHLP_DUPLICATE_SYMBOL64
559
#define PIMAGEHLP_DUPLICATE_SYMBOL PIMAGEHLP_DUPLICATE_SYMBOL64
560
#else
561
  typedef struct _IMAGEHLP_DUPLICATE_SYMBOL {
562
    DWORD SizeOfStruct;
563
    DWORD NumberOfDups;
564
    PIMAGEHLP_SYMBOL Symbol;
565
    DWORD SelectedSymbol;
566
  } IMAGEHLP_DUPLICATE_SYMBOL,*PIMAGEHLP_DUPLICATE_SYMBOL;
567
#endif
568
 
569
  BOOL IMAGEAPI SymSetParentWindow(HWND hwnd);
570
  PCHAR IMAGEAPI SymSetHomeDirectory(PCSTR dir);
571
  PCHAR IMAGEAPI SymGetHomeDirectory(DWORD type,PSTR dir,size_t size);
572
 
573
  enum {
574
    hdBase = 0,hdSym,hdSrc,hdMax
575
  };
576
 
577
#define SYMOPT_CASE_INSENSITIVE 0x00000001
578
#define SYMOPT_UNDNAME 0x00000002
579
#define SYMOPT_DEFERRED_LOADS 0x00000004
580
#define SYMOPT_NO_CPP 0x00000008
581
#define SYMOPT_LOAD_LINES 0x00000010
582
#define SYMOPT_OMAP_FIND_NEAREST 0x00000020
583
#define SYMOPT_LOAD_ANYTHING 0x00000040
584
#define SYMOPT_IGNORE_CVREC 0x00000080
585
#define SYMOPT_NO_UNQUALIFIED_LOADS 0x00000100
586
#define SYMOPT_FAIL_CRITICAL_ERRORS 0x00000200
587
#define SYMOPT_EXACT_SYMBOLS 0x00000400
588
#define SYMOPT_ALLOW_ABSOLUTE_SYMBOLS 0x00000800
589
#define SYMOPT_IGNORE_NT_SYMPATH 0x00001000
590
#define SYMOPT_INCLUDE_32BIT_MODULES 0x00002000
591
#define SYMOPT_PUBLICS_ONLY 0x00004000
592
#define SYMOPT_NO_PUBLICS 0x00008000
593
#define SYMOPT_AUTO_PUBLICS 0x00010000
594
#define SYMOPT_NO_IMAGE_SEARCH 0x00020000
595
#define SYMOPT_SECURE 0x00040000
596
#define SYMOPT_NO_PROMPTS 0x00080000
597
 
598
#define SYMOPT_DEBUG 0x80000000
599
 
600
  DWORD IMAGEAPI SymSetOptions(DWORD SymOptions);
601
  DWORD IMAGEAPI SymGetOptions(VOID);
602
  BOOL IMAGEAPI SymCleanup(HANDLE hProcess);
603
  BOOL IMAGEAPI SymMatchString(LPSTR string,LPSTR expression,BOOL fCase);
604
 
605
  typedef BOOL (CALLBACK *PSYM_ENUMSOURCFILES_CALLBACK)(PSOURCEFILE pSourceFile,PVOID UserContext);
606
 
607
  BOOL IMAGEAPI SymEnumSourceFiles(HANDLE hProcess,ULONG64 ModBase,LPSTR Mask,PSYM_ENUMSOURCFILES_CALLBACK cbSrcFiles,PVOID UserContext);
608
  BOOL IMAGEAPI SymEnumerateModules64(HANDLE hProcess,PSYM_ENUMMODULES_CALLBACK64 EnumModulesCallback,PVOID UserContext);
609
 
610
#ifdef _IMAGEHLP64
611
#define SymEnumerateModules SymEnumerateModules64
612
#else
613
  BOOL IMAGEAPI SymEnumerateModules(HANDLE hProcess,PSYM_ENUMMODULES_CALLBACK EnumModulesCallback,PVOID UserContext);
614
#endif
615
 
616
  BOOL IMAGEAPI SymEnumerateSymbols64(HANDLE hProcess,DWORD64 BaseOfDll,PSYM_ENUMSYMBOLS_CALLBACK64 EnumSymbolsCallback,PVOID UserContext);
617
  BOOL IMAGEAPI SymEnumerateSymbolsW64(HANDLE hProcess,DWORD64 BaseOfDll,PSYM_ENUMSYMBOLS_CALLBACK64W EnumSymbolsCallback,PVOID UserContext);
618
 
619
#ifdef _IMAGEHLP64
620
#define SymEnumerateSymbols SymEnumerateSymbols64
621
#define SymEnumerateSymbolsW SymEnumerateSymbolsW64
622
#else
623
  BOOL IMAGEAPI SymEnumerateSymbols(HANDLE hProcess,DWORD BaseOfDll,PSYM_ENUMSYMBOLS_CALLBACK EnumSymbolsCallback,PVOID UserContext);
624
  BOOL IMAGEAPI SymEnumerateSymbolsW(HANDLE hProcess,DWORD BaseOfDll,PSYM_ENUMSYMBOLS_CALLBACKW EnumSymbolsCallback,PVOID UserContext);
625
#endif
626
 
627
  BOOL IMAGEAPI EnumerateLoadedModules64(HANDLE hProcess,PENUMLOADED_MODULES_CALLBACK64 EnumLoadedModulesCallback,PVOID UserContext);
628
#ifdef _IMAGEHLP64
629
#define EnumerateLoadedModules EnumerateLoadedModules64
630
#else
631
  BOOL IMAGEAPI EnumerateLoadedModules(HANDLE hProcess,PENUMLOADED_MODULES_CALLBACK EnumLoadedModulesCallback,PVOID UserContext);
632
#endif
633
 
634
  PVOID IMAGEAPI SymFunctionTableAccess64(HANDLE hProcess,DWORD64 AddrBase);
635
 
636
#ifdef _IMAGEHLP64
637
#define SymFunctionTableAccess SymFunctionTableAccess64
638
#else
639
  PVOID IMAGEAPI SymFunctionTableAccess(HANDLE hProcess,DWORD AddrBase);
640
#endif
641
 
642
  BOOL IMAGEAPI SymGetModuleInfo64(HANDLE hProcess,DWORD64 qwAddr,PIMAGEHLP_MODULE64 ModuleInfo);
643
  BOOL IMAGEAPI SymGetModuleInfoW64(HANDLE hProcess,DWORD64 qwAddr,PIMAGEHLP_MODULEW64 ModuleInfo);
644
 
645
#ifdef _IMAGEHLP64
646
#define SymGetModuleInfo SymGetModuleInfo64
647
#define SymGetModuleInfoW SymGetModuleInfoW64
648
#else
649
  BOOL IMAGEAPI SymGetModuleInfo(HANDLE hProcess,DWORD dwAddr,PIMAGEHLP_MODULE ModuleInfo);
650
  BOOL IMAGEAPI SymGetModuleInfoW(HANDLE hProcess,DWORD dwAddr,PIMAGEHLP_MODULEW ModuleInfo);
651
#endif
652
 
653
  DWORD64 IMAGEAPI SymGetModuleBase64(HANDLE hProcess,DWORD64 qwAddr);
654
 
655
#ifdef _IMAGEHLP64
656
#define SymGetModuleBase SymGetModuleBase64
657
#else
658
  DWORD IMAGEAPI SymGetModuleBase(HANDLE hProcess,DWORD dwAddr);
659
#endif
660
 
661
  BOOL IMAGEAPI SymGetSymNext64(HANDLE hProcess,PIMAGEHLP_SYMBOL64 Symbol);
662
 
663
#ifdef _IMAGEHLP64
664
#define SymGetSymNext SymGetSymNext64
665
#else
666
  BOOL IMAGEAPI SymGetSymNext(HANDLE hProcess,PIMAGEHLP_SYMBOL Symbol);
667
#endif
668
 
669
  BOOL IMAGEAPI SymGetSymPrev64(HANDLE hProcess,PIMAGEHLP_SYMBOL64 Symbol);
670
 
671
#ifdef _IMAGEHLP64
672
#define SymGetSymPrev SymGetSymPrev64
673
#else
674
  BOOL IMAGEAPI SymGetSymPrev(HANDLE hProcess,PIMAGEHLP_SYMBOL Symbol);
675
#endif
676
 
677
  typedef struct _SRCCODEINFO {
678
    DWORD SizeOfStruct;
679
    PVOID Key;
680
    DWORD64 ModBase;
681
    CHAR Obj[MAX_PATH + 1];
682
    CHAR FileName[MAX_PATH + 1];
683
    DWORD LineNumber;
684
    DWORD64 Address;
685
  } SRCCODEINFO,*PSRCCODEINFO;
686
 
687
  typedef BOOL (CALLBACK *PSYM_ENUMLINES_CALLBACK)(PSRCCODEINFO LineInfo,PVOID UserContext);
688
 
689
  BOOL IMAGEAPI SymEnumLines(HANDLE hProcess,ULONG64 Base,PCSTR Obj,PCSTR File,PSYM_ENUMLINES_CALLBACK EnumLinesCallback,PVOID UserContext);
690
  BOOL IMAGEAPI SymGetLineFromAddr64(HANDLE hProcess,DWORD64 qwAddr,PDWORD pdwDisplacement,PIMAGEHLP_LINE64 Line64);
691
 
692
#ifdef _IMAGEHLP64
693
#define SymGetLineFromAddr SymGetLineFromAddr64
694
#else
695
  BOOL IMAGEAPI SymGetLineFromAddr(HANDLE hProcess,DWORD dwAddr,PDWORD pdwDisplacement,PIMAGEHLP_LINE Line);
696
#endif
697
 
698
  BOOL IMAGEAPI SymGetLineFromName64(HANDLE hProcess,PSTR ModuleName,PSTR FileName,DWORD dwLineNumber,PLONG plDisplacement,PIMAGEHLP_LINE64 Line);
699
 
700
#ifdef _IMAGEHLP64
701
#define SymGetLineFromName SymGetLineFromName64
702
#else
703
  BOOL IMAGEAPI SymGetLineFromName(HANDLE hProcess,PSTR ModuleName,PSTR FileName,DWORD dwLineNumber,PLONG plDisplacement,PIMAGEHLP_LINE Line);
704
#endif
705
 
706
  BOOL IMAGEAPI SymGetLineNext64(HANDLE hProcess,PIMAGEHLP_LINE64 Line);
707
 
708
#ifdef _IMAGEHLP64
709
#define SymGetLineNext SymGetLineNext64
710
#else
711
  BOOL IMAGEAPI SymGetLineNext(HANDLE hProcess,PIMAGEHLP_LINE Line);
712
#endif
713
 
714
  BOOL IMAGEAPI SymGetLinePrev64(HANDLE hProcess,PIMAGEHLP_LINE64 Line);
715
 
716
#ifdef _IMAGEHLP64
717
#define SymGetLinePrev SymGetLinePrev64
718
#else
719
  BOOL IMAGEAPI SymGetLinePrev(HANDLE hProcess,PIMAGEHLP_LINE Line);
720
#endif
721
 
722
  BOOL IMAGEAPI SymMatchFileName(PSTR FileName,PSTR Match,PSTR *FileNameStop,PSTR *MatchStop);
723
  BOOL IMAGEAPI SymInitialize(HANDLE hProcess,PSTR UserSearchPath,BOOL fInvadeProcess);
724
  BOOL IMAGEAPI SymGetSearchPath(HANDLE hProcess,PSTR SearchPath,DWORD SearchPathLength);
725
  BOOL IMAGEAPI SymSetSearchPath(HANDLE hProcess,PSTR SearchPath);
726
  DWORD64 IMAGEAPI SymLoadModule64(HANDLE hProcess,HANDLE hFile,PSTR ImageName,PSTR ModuleName,DWORD64 BaseOfDll,DWORD SizeOfDll);
727
 
728
#define SLMFLAG_VIRTUAL 0x1
729
 
730
  DWORD64 IMAGEAPI SymLoadModuleEx(HANDLE hProcess,HANDLE hFile,PSTR ImageName,PSTR ModuleName,DWORD64 BaseOfDll,DWORD DllSize,PMODLOAD_DATA Data,DWORD Flags);
731
 
732
#ifdef _IMAGEHLP64
733
#define SymLoadModule SymLoadModule64
734
#else
735
  DWORD IMAGEAPI SymLoadModule(HANDLE hProcess,HANDLE hFile,PSTR ImageName,PSTR ModuleName,DWORD BaseOfDll,DWORD SizeOfDll);
736
#endif
737
 
738
  BOOL IMAGEAPI SymUnloadModule64(HANDLE hProcess,DWORD64 BaseOfDll);
739
 
740
#ifdef _IMAGEHLP64
741
#define SymUnloadModule SymUnloadModule64
742
#else
743
  BOOL IMAGEAPI SymUnloadModule(HANDLE hProcess,DWORD BaseOfDll);
744
#endif
745
 
746
  BOOL IMAGEAPI SymUnDName64(PIMAGEHLP_SYMBOL64 sym,PSTR UnDecName,DWORD UnDecNameLength);
747
 
748
#ifdef _IMAGEHLP64
749
#define SymUnDName SymUnDName64
750
#else
751
  BOOL IMAGEAPI SymUnDName(PIMAGEHLP_SYMBOL sym,PSTR UnDecName,DWORD UnDecNameLength);
752
#endif
753
 
754
  BOOL IMAGEAPI SymRegisterCallback64(HANDLE hProcess,PSYMBOL_REGISTERED_CALLBACK64 CallbackFunction,ULONG64 UserContext);
755
 
756
  BOOL IMAGEAPI SymRegisterFunctionEntryCallback64(HANDLE hProcess,PSYMBOL_FUNCENTRY_CALLBACK64 CallbackFunction,ULONG64 UserContext);
757
 
758
#ifdef _IMAGEHLP64
759
#define SymRegisterCallback SymRegisterCallback64
760
#define SymRegisterFunctionEntryCallback SymRegisterFunctionEntryCallback64
761
#else
762
  BOOL IMAGEAPI SymRegisterCallback(HANDLE hProcess,PSYMBOL_REGISTERED_CALLBACK CallbackFunction,PVOID UserContext);
763
  BOOL IMAGEAPI SymRegisterFunctionEntryCallback(HANDLE hProcess,PSYMBOL_FUNCENTRY_CALLBACK CallbackFunction,PVOID UserContext);
764
#endif
765
 
766
  typedef struct _IMAGEHLP_SYMBOL_SRC {
767
    DWORD sizeofstruct;
768
    DWORD type;
769
    char file[MAX_PATH];
770
  } IMAGEHLP_SYMBOL_SRC,*PIMAGEHLP_SYMBOL_SRC;
771
 
772
  typedef struct _MODULE_TYPE_INFO {
773
    USHORT dataLength;
774
    USHORT leaf;
775
    BYTE data[1];
776
  } MODULE_TYPE_INFO,*PMODULE_TYPE_INFO;
777
 
778
  typedef struct _SYMBOL_INFO {
779
    ULONG SizeOfStruct;
780
    ULONG TypeIndex;
781
    ULONG64 Reserved[2];
782
    ULONG info;
783
    ULONG Size;
784
    ULONG64 ModBase;
785
    ULONG Flags;
786
    ULONG64 Value;
787
    ULONG64 Address;
788
    ULONG Register;
789
    ULONG Scope;
790
    ULONG Tag;
791
    ULONG NameLen;
792
    ULONG MaxNameLen;
793
    CHAR Name[1];
794
  } SYMBOL_INFO,*PSYMBOL_INFO;
795
 
796
  typedef struct _SYMBOL_INFO_PACKAGE {
797
    SYMBOL_INFO si;
798
    CHAR name[MAX_SYM_NAME + 1];
799
  } SYMBOL_INFO_PACKAGE,*PSYMBOL_INFO_PACKAGE;
800
 
801
  typedef struct _IMAGEHLP_STACK_FRAME
802
  {
803
    ULONG64 InstructionOffset;
804
    ULONG64 ReturnOffset;
805
    ULONG64 FrameOffset;
806
    ULONG64 StackOffset;
807
    ULONG64 BackingStoreOffset;
808
    ULONG64 FuncTableEntry;
809
    ULONG64 Params[4];
810
    ULONG64 Reserved[5];
811
    BOOL Virtual;
812
    ULONG Reserved2;
813
  } IMAGEHLP_STACK_FRAME,*PIMAGEHLP_STACK_FRAME;
814
 
815
  typedef VOID IMAGEHLP_CONTEXT,*PIMAGEHLP_CONTEXT;
816
 
817
  BOOL IMAGEAPI SymSetContext(HANDLE hProcess,PIMAGEHLP_STACK_FRAME StackFrame,PIMAGEHLP_CONTEXT Context);
818
  BOOL IMAGEAPI SymFromAddr(HANDLE hProcess,DWORD64 Address,PDWORD64 Displacement,PSYMBOL_INFO Symbol);
819
  BOOL IMAGEAPI SymFromToken(HANDLE hProcess,DWORD64 Base,DWORD Token,PSYMBOL_INFO Symbol);
820
  BOOL IMAGEAPI SymFromName(HANDLE hProcess,LPSTR Name,PSYMBOL_INFO Symbol);
821
 
822
  typedef BOOL (CALLBACK *PSYM_ENUMERATESYMBOLS_CALLBACK)(PSYMBOL_INFO pSymInfo,ULONG SymbolSize,PVOID UserContext);
823
 
824
  BOOL IMAGEAPI SymEnumSymbols(HANDLE hProcess,ULONG64 BaseOfDll,PCSTR Mask,PSYM_ENUMERATESYMBOLS_CALLBACK EnumSymbolsCallback,PVOID UserContext);
825
  BOOL IMAGEAPI SymEnumSymbolsForAddr(HANDLE hProcess,DWORD64 Address,PSYM_ENUMERATESYMBOLS_CALLBACK EnumSymbolsCallback,PVOID UserContext);
826
 
827
#define SYMENUMFLAG_FULLSRCH 1
828
#define SYMENUMFLAG_SPEEDSRCH 2
829
 
830
  typedef enum _IMAGEHLP_SYMBOL_TYPE_INFO {
831
    TI_GET_SYMTAG,TI_GET_SYMNAME,TI_GET_LENGTH,TI_GET_TYPE,TI_GET_TYPEID,TI_GET_BASETYPE,TI_GET_ARRAYINDEXTYPEID,TI_FINDCHILDREN,
832
    TI_GET_DATAKIND,TI_GET_ADDRESSOFFSET,TI_GET_OFFSET,TI_GET_VALUE,TI_GET_COUNT,TI_GET_CHILDRENCOUNT,TI_GET_BITPOSITION,TI_GET_VIRTUALBASECLASS,
833
    TI_GET_VIRTUALTABLESHAPEID,TI_GET_VIRTUALBASEPOINTEROFFSET,TI_GET_CLASSPARENTID,TI_GET_NESTED,TI_GET_SYMINDEX,TI_GET_LEXICALPARENT,
834
    TI_GET_ADDRESS,TI_GET_THISADJUST,TI_GET_UDTKIND,TI_IS_EQUIV_TO,TI_GET_CALLING_CONVENTION
835
  } IMAGEHLP_SYMBOL_TYPE_INFO;
836
 
837
  typedef struct _TI_FINDCHILDREN_PARAMS {
838
    ULONG Count;
839
    ULONG Start;
840
    ULONG ChildId[1];
841
  } TI_FINDCHILDREN_PARAMS;
842
 
843
  BOOL IMAGEAPI SymGetTypeInfo(HANDLE hProcess,DWORD64 ModBase,ULONG TypeId,IMAGEHLP_SYMBOL_TYPE_INFO GetType,PVOID pInfo);
844
  BOOL IMAGEAPI SymEnumTypes(HANDLE hProcess,ULONG64 BaseOfDll,PSYM_ENUMERATESYMBOLS_CALLBACK EnumSymbolsCallback,PVOID UserContext);
845
  BOOL IMAGEAPI SymGetTypeFromName(HANDLE hProcess,ULONG64 BaseOfDll,LPSTR Name,PSYMBOL_INFO Symbol);
846
  BOOL IMAGEAPI SymAddSymbol(HANDLE hProcess,ULONG64 BaseOfDll,PCSTR Name,DWORD64 Address,DWORD Size,DWORD Flags);
847
  BOOL IMAGEAPI SymDeleteSymbol(HANDLE hProcess,ULONG64 BaseOfDll,PCSTR Name,DWORD64 Address,DWORD Flags);
848
 
849
  typedef BOOL (WINAPI *PDBGHELP_CREATE_USER_DUMP_CALLBACK)(DWORD DataType,PVOID *Data,LPDWORD DataLength,PVOID UserData);
850
 
851
  BOOL WINAPI DbgHelpCreateUserDump(LPSTR FileName,PDBGHELP_CREATE_USER_DUMP_CALLBACK Callback,PVOID UserData);
852
  BOOL WINAPI DbgHelpCreateUserDumpW(LPWSTR FileName,PDBGHELP_CREATE_USER_DUMP_CALLBACK Callback,PVOID UserData);
853
  BOOL IMAGEAPI SymGetSymFromAddr64(HANDLE hProcess,DWORD64 qwAddr,PDWORD64 pdwDisplacement,PIMAGEHLP_SYMBOL64 Symbol);
854
 
855
#ifdef _IMAGEHLP64
856
#define SymGetSymFromAddr SymGetSymFromAddr64
857
#else
858
  BOOL IMAGEAPI SymGetSymFromAddr(HANDLE hProcess,DWORD dwAddr,PDWORD pdwDisplacement,PIMAGEHLP_SYMBOL Symbol);
859
#endif
860
 
861
  BOOL IMAGEAPI SymGetSymFromName64(HANDLE hProcess,PSTR Name,PIMAGEHLP_SYMBOL64 Symbol);
862
 
863
#ifdef _IMAGEHLP64
864
#define SymGetSymFromName SymGetSymFromName64
865
#else
866
  BOOL IMAGEAPI SymGetSymFromName(HANDLE hProcess,PSTR Name,PIMAGEHLP_SYMBOL Symbol);
867
#endif
868
 
869
  DBHLP_DEPRECIATED BOOL IMAGEAPI FindFileInPath(HANDLE hprocess,LPSTR SearchPath,LPSTR FileName,PVOID id,DWORD two,DWORD three,DWORD flags,LPSTR FilePath);
870
  DBHLP_DEPRECIATED BOOL IMAGEAPI FindFileInSearchPath(HANDLE hprocess,LPSTR SearchPath,LPSTR FileName,DWORD one,DWORD two,DWORD three,LPSTR FilePath);
871
  DBHLP_DEPRECIATED BOOL IMAGEAPI SymEnumSym(HANDLE hProcess,ULONG64 BaseOfDll,PSYM_ENUMERATESYMBOLS_CALLBACK EnumSymbolsCallback,PVOID UserContext);
872
 
873
#define SYMF_OMAP_GENERATED 0x00000001
874
#define SYMF_OMAP_MODIFIED 0x00000002
875
#define SYMF_REGISTER 0x00000008
876
#define SYMF_REGREL 0x00000010
877
#define SYMF_FRAMEREL 0x00000020
878
#define SYMF_PARAMETER 0x00000040
879
#define SYMF_LOCAL 0x00000080
880
#define SYMF_CONSTANT 0x00000100
881
#define SYMF_EXPORT 0x00000200
882
#define SYMF_FORWARDER 0x00000400
883
#define SYMF_FUNCTION 0x00000800
884
#define SYMF_VIRTUAL 0x00001000
885
#define SYMF_THUNK 0x00002000
886
#define SYMF_TLSREL 0x00004000
887
 
888
#define IMAGEHLP_SYMBOL_INFO_VALUEPRESENT 1
889
#define IMAGEHLP_SYMBOL_INFO_REGISTER SYMF_REGISTER
890
#define IMAGEHLP_SYMBOL_INFO_REGRELATIVE SYMF_REGREL
891
#define IMAGEHLP_SYMBOL_INFO_FRAMERELATIVE SYMF_FRAMEREL
892
#define IMAGEHLP_SYMBOL_INFO_PARAMETER SYMF_PARAMETER
893
#define IMAGEHLP_SYMBOL_INFO_LOCAL SYMF_LOCAL
894
#define IMAGEHLP_SYMBOL_INFO_CONSTANT SYMF_CONSTANT
895
#define IMAGEHLP_SYMBOL_FUNCTION SYMF_FUNCTION
896
#define IMAGEHLP_SYMBOL_VIRTUAL SYMF_VIRTUAL
897
#define IMAGEHLP_SYMBOL_THUNK SYMF_THUNK
898
#define IMAGEHLP_SYMBOL_INFO_TLSRELATIVE SYMF_TLSREL
899
 
900
#include 
901
 
902
#define MINIDUMP_SIGNATURE ('PMDM')
903
#define MINIDUMP_VERSION (42899)
904
  typedef DWORD RVA;
905
  typedef ULONG64 RVA64;
906
 
907
  typedef struct _MINIDUMP_LOCATION_DESCRIPTOR {
908
    ULONG32 DataSize;
909
    RVA Rva;
910
  } MINIDUMP_LOCATION_DESCRIPTOR;
911
 
912
  typedef struct _MINIDUMP_LOCATION_DESCRIPTOR64 {
913
    ULONG64 DataSize;
914
    RVA64 Rva;
915
  } MINIDUMP_LOCATION_DESCRIPTOR64;
916
 
917
  typedef struct _MINIDUMP_MEMORY_DESCRIPTOR {
918
    ULONG64 StartOfMemoryRange;
919
    MINIDUMP_LOCATION_DESCRIPTOR Memory;
920
  } MINIDUMP_MEMORY_DESCRIPTOR,*PMINIDUMP_MEMORY_DESCRIPTOR;
921
 
922
  typedef struct _MINIDUMP_MEMORY_DESCRIPTOR64 {
923
    ULONG64 StartOfMemoryRange;
924
    ULONG64 DataSize;
925
  } MINIDUMP_MEMORY_DESCRIPTOR64,*PMINIDUMP_MEMORY_DESCRIPTOR64;
926
 
927
  typedef struct _MINIDUMP_HEADER {
928
    ULONG32 Signature;
929
    ULONG32 Version;
930
    ULONG32 NumberOfStreams;
931
    RVA StreamDirectoryRva;
932
    ULONG32 CheckSum;
933
    union {
934
      ULONG32 Reserved;
935
      ULONG32 TimeDateStamp;
936
    } DUMMYUNIONNAME;
937
    ULONG64 Flags;
938
  } MINIDUMP_HEADER,*PMINIDUMP_HEADER;
939
 
940
  typedef struct _MINIDUMP_DIRECTORY {
941
    ULONG32 StreamType;
942
    MINIDUMP_LOCATION_DESCRIPTOR Location;
943
  } MINIDUMP_DIRECTORY,*PMINIDUMP_DIRECTORY;
944
 
945
  typedef struct _MINIDUMP_STRING {
946
    ULONG32 Length;
947
    WCHAR Buffer [0];
948
  } MINIDUMP_STRING,*PMINIDUMP_STRING;
949
 
950
  typedef enum _MINIDUMP_STREAM_TYPE {
951
    UnusedStream = 0,ReservedStream0 = 1,ReservedStream1 = 2,ThreadListStream = 3,ModuleListStream = 4,MemoryListStream = 5,
952
    ExceptionStream = 6,SystemInfoStream = 7,ThreadExListStream = 8,Memory64ListStream = 9,CommentStreamA = 10,CommentStreamW = 11,
953
    HandleDataStream = 12,FunctionTableStream = 13,UnloadedModuleListStream = 14,MiscInfoStream = 15,LastReservedStream = 0xffff
954
  } MINIDUMP_STREAM_TYPE;
955
 
956
  typedef union _CPU_INFORMATION {
957
    struct {
958
      ULONG32 VendorId [3 ];
959
      ULONG32 VersionInformation;
960
      ULONG32 FeatureInformation;
961
      ULONG32 AMDExtendedCpuFeatures;
962
    } X86CpuInfo;
963
    struct {
964
      ULONG64 ProcessorFeatures [2 ];
965
    } OtherCpuInfo;
966
  } CPU_INFORMATION,*PCPU_INFORMATION;
967
 
968
  typedef struct _MINIDUMP_SYSTEM_INFO {
969
    USHORT ProcessorArchitecture;
970
    USHORT ProcessorLevel;
971
    USHORT ProcessorRevision;
972
    union {
973
      USHORT Reserved0;
974
      struct {
975
	UCHAR NumberOfProcessors;
976
	UCHAR ProductType;
977
      } DUMMYSTRUCTNAME;
978
    } DUMMYUNIONNAME;
979
    ULONG32 MajorVersion;
980
    ULONG32 MinorVersion;
981
    ULONG32 BuildNumber;
982
    ULONG32 PlatformId;
983
    RVA CSDVersionRva;
984
    union {
985
      ULONG32 Reserved1;
986
      struct {
987
	USHORT SuiteMask;
988
	USHORT Reserved2;
989
      } DUMMYSTRUCTNAME;
990
    } DUMMYUNIONNAME1;
991
    CPU_INFORMATION Cpu;
992
  } MINIDUMP_SYSTEM_INFO,*PMINIDUMP_SYSTEM_INFO;
993
 
994
  C_ASSERT (sizeof (((PPROCESS_INFORMATION)0)->dwThreadId)==4);
995
 
996
  typedef struct _MINIDUMP_THREAD {
997
    ULONG32 ThreadId;
998
    ULONG32 SuspendCount;
999
    ULONG32 PriorityClass;
1000
    ULONG32 Priority;
1001
    ULONG64 Teb;
1002
    MINIDUMP_MEMORY_DESCRIPTOR Stack;
1003
    MINIDUMP_LOCATION_DESCRIPTOR ThreadContext;
1004
  } MINIDUMP_THREAD,*PMINIDUMP_THREAD;
1005
 
1006
  typedef struct _MINIDUMP_THREAD_LIST {
1007
    ULONG32 NumberOfThreads;
1008
    MINIDUMP_THREAD Threads [0];
1009
  } MINIDUMP_THREAD_LIST,*PMINIDUMP_THREAD_LIST;
1010
 
1011
  typedef struct _MINIDUMP_THREAD_EX {
1012
    ULONG32 ThreadId;
1013
    ULONG32 SuspendCount;
1014
    ULONG32 PriorityClass;
1015
    ULONG32 Priority;
1016
    ULONG64 Teb;
1017
    MINIDUMP_MEMORY_DESCRIPTOR Stack;
1018
    MINIDUMP_LOCATION_DESCRIPTOR ThreadContext;
1019
    MINIDUMP_MEMORY_DESCRIPTOR BackingStore;
1020
  } MINIDUMP_THREAD_EX,*PMINIDUMP_THREAD_EX;
1021
 
1022
  typedef struct _MINIDUMP_THREAD_EX_LIST {
1023
    ULONG32 NumberOfThreads;
1024
    MINIDUMP_THREAD_EX Threads [0];
1025
  } MINIDUMP_THREAD_EX_LIST,*PMINIDUMP_THREAD_EX_LIST;
1026
 
1027
  typedef struct _MINIDUMP_EXCEPTION {
1028
    ULONG32 ExceptionCode;
1029
    ULONG32 ExceptionFlags;
1030
    ULONG64 ExceptionRecord;
1031
    ULONG64 ExceptionAddress;
1032
    ULONG32 NumberParameters;
1033
    ULONG32 __unusedAlignment;
1034
    ULONG64 ExceptionInformation [EXCEPTION_MAXIMUM_PARAMETERS ];
1035
  } MINIDUMP_EXCEPTION,*PMINIDUMP_EXCEPTION;
1036
 
1037
  typedef struct MINIDUMP_EXCEPTION_STREAM {
1038
    ULONG32 ThreadId;
1039
    ULONG32 __alignment;
1040
    MINIDUMP_EXCEPTION ExceptionRecord;
1041
    MINIDUMP_LOCATION_DESCRIPTOR ThreadContext;
1042
  } MINIDUMP_EXCEPTION_STREAM,*PMINIDUMP_EXCEPTION_STREAM;
1043
 
1044
  typedef struct _MINIDUMP_MODULE {
1045
    ULONG64 BaseOfImage;
1046
    ULONG32 SizeOfImage;
1047
    ULONG32 CheckSum;
1048
    ULONG32 TimeDateStamp;
1049
    RVA ModuleNameRva;
1050
    VS_FIXEDFILEINFO VersionInfo;
1051
    MINIDUMP_LOCATION_DESCRIPTOR CvRecord;
1052
    MINIDUMP_LOCATION_DESCRIPTOR MiscRecord;
1053
    ULONG64 Reserved0;
1054
    ULONG64 Reserved1;
1055
  } MINIDUMP_MODULE,*PMINIDUMP_MODULE;
1056
 
1057
  typedef struct _MINIDUMP_MODULE_LIST {
1058
    ULONG32 NumberOfModules;
1059
    MINIDUMP_MODULE Modules [0 ];
1060
  } MINIDUMP_MODULE_LIST,*PMINIDUMP_MODULE_LIST;
1061
 
1062
  typedef struct _MINIDUMP_MEMORY_LIST {
1063
    ULONG32 NumberOfMemoryRanges;
1064
    MINIDUMP_MEMORY_DESCRIPTOR MemoryRanges [0];
1065
  } MINIDUMP_MEMORY_LIST,*PMINIDUMP_MEMORY_LIST;
1066
 
1067
  typedef struct _MINIDUMP_MEMORY64_LIST {
1068
    ULONG64 NumberOfMemoryRanges;
1069
    RVA64 BaseRva;
1070
    MINIDUMP_MEMORY_DESCRIPTOR64 MemoryRanges [0];
1071
  } MINIDUMP_MEMORY64_LIST,*PMINIDUMP_MEMORY64_LIST;
1072
 
1073
  typedef struct _MINIDUMP_EXCEPTION_INFORMATION {
1074
    DWORD ThreadId;
1075
    PEXCEPTION_POINTERS ExceptionPointers;
1076
    BOOL ClientPointers;
1077
  } MINIDUMP_EXCEPTION_INFORMATION,*PMINIDUMP_EXCEPTION_INFORMATION;
1078
 
1079
  typedef struct _MINIDUMP_EXCEPTION_INFORMATION64 {
1080
    DWORD ThreadId;
1081
    ULONG64 ExceptionRecord;
1082
    ULONG64 ContextRecord;
1083
    BOOL ClientPointers;
1084
  } MINIDUMP_EXCEPTION_INFORMATION64,*PMINIDUMP_EXCEPTION_INFORMATION64;
1085
 
1086
  typedef struct _MINIDUMP_HANDLE_DESCRIPTOR {
1087
    ULONG64 Handle;
1088
    RVA TypeNameRva;
1089
    RVA ObjectNameRva;
1090
    ULONG32 Attributes;
1091
    ULONG32 GrantedAccess;
1092
    ULONG32 HandleCount;
1093
    ULONG32 PointerCount;
1094
  } MINIDUMP_HANDLE_DESCRIPTOR,*PMINIDUMP_HANDLE_DESCRIPTOR;
1095
 
1096
  typedef struct _MINIDUMP_HANDLE_DATA_STREAM {
1097
    ULONG32 SizeOfHeader;
1098
    ULONG32 SizeOfDescriptor;
1099
    ULONG32 NumberOfDescriptors;
1100
    ULONG32 Reserved;
1101
  } MINIDUMP_HANDLE_DATA_STREAM,*PMINIDUMP_HANDLE_DATA_STREAM;
1102
 
1103
  typedef struct _MINIDUMP_FUNCTION_TABLE_DESCRIPTOR {
1104
    ULONG64 MinimumAddress;
1105
    ULONG64 MaximumAddress;
1106
    ULONG64 BaseAddress;
1107
    ULONG32 EntryCount;
1108
    ULONG32 SizeOfAlignPad;
1109
  } MINIDUMP_FUNCTION_TABLE_DESCRIPTOR,*PMINIDUMP_FUNCTION_TABLE_DESCRIPTOR;
1110
 
1111
  typedef struct _MINIDUMP_FUNCTION_TABLE_STREAM {
1112
    ULONG32 SizeOfHeader;
1113
    ULONG32 SizeOfDescriptor;
1114
    ULONG32 SizeOfNativeDescriptor;
1115
    ULONG32 SizeOfFunctionEntry;
1116
    ULONG32 NumberOfDescriptors;
1117
    ULONG32 SizeOfAlignPad;
1118
  } MINIDUMP_FUNCTION_TABLE_STREAM,*PMINIDUMP_FUNCTION_TABLE_STREAM;
1119
 
1120
  typedef struct _MINIDUMP_UNLOADED_MODULE {
1121
    ULONG64 BaseOfImage;
1122
    ULONG32 SizeOfImage;
1123
    ULONG32 CheckSum;
1124
    ULONG32 TimeDateStamp;
1125
    RVA ModuleNameRva;
1126
  } MINIDUMP_UNLOADED_MODULE,*PMINIDUMP_UNLOADED_MODULE;
1127
 
1128
  typedef struct _MINIDUMP_UNLOADED_MODULE_LIST {
1129
    ULONG32 SizeOfHeader;
1130
    ULONG32 SizeOfEntry;
1131
    ULONG32 NumberOfEntries;
1132
  } MINIDUMP_UNLOADED_MODULE_LIST,*PMINIDUMP_UNLOADED_MODULE_LIST;
1133
 
1134
#define MINIDUMP_MISC1_PROCESS_ID 0x00000001
1135
#define MINIDUMP_MISC1_PROCESS_TIMES 0x00000002
1136
 
1137
  typedef struct _MINIDUMP_MISC_INFO {
1138
    ULONG32 SizeOfInfo;
1139
    ULONG32 Flags1;
1140
    ULONG32 ProcessId;
1141
    ULONG32 ProcessCreateTime;
1142
    ULONG32 ProcessUserTime;
1143
    ULONG32 ProcessKernelTime;
1144
  } MINIDUMP_MISC_INFO,*PMINIDUMP_MISC_INFO;
1145
 
1146
  typedef struct _MINIDUMP_USER_RECORD {
1147
    ULONG32 Type;
1148
    MINIDUMP_LOCATION_DESCRIPTOR Memory;
1149
  } MINIDUMP_USER_RECORD,*PMINIDUMP_USER_RECORD;
1150
 
1151
  typedef struct _MINIDUMP_USER_STREAM {
1152
    ULONG32 Type;
1153
    ULONG BufferSize;
1154
    PVOID Buffer;
1155
  } MINIDUMP_USER_STREAM,*PMINIDUMP_USER_STREAM;
1156
 
1157
  typedef struct _MINIDUMP_USER_STREAM_INFORMATION {
1158
    ULONG UserStreamCount;
1159
    PMINIDUMP_USER_STREAM UserStreamArray;
1160
  } MINIDUMP_USER_STREAM_INFORMATION,*PMINIDUMP_USER_STREAM_INFORMATION;
1161
 
1162
  typedef enum _MINIDUMP_CALLBACK_TYPE {
1163
    ModuleCallback,ThreadCallback,ThreadExCallback,IncludeThreadCallback,IncludeModuleCallback,MemoryCallback
1164
  } MINIDUMP_CALLBACK_TYPE;
1165
 
1166
  typedef struct _MINIDUMP_THREAD_CALLBACK {
1167
    ULONG ThreadId;
1168
    HANDLE ThreadHandle;
1169
    CONTEXT Context;
1170
    ULONG SizeOfContext;
1171
    ULONG64 StackBase;
1172
    ULONG64 StackEnd;
1173
  } MINIDUMP_THREAD_CALLBACK,*PMINIDUMP_THREAD_CALLBACK;
1174
 
1175
  typedef struct _MINIDUMP_THREAD_EX_CALLBACK {
1176
    ULONG ThreadId;
1177
    HANDLE ThreadHandle;
1178
    CONTEXT Context;
1179
    ULONG SizeOfContext;
1180
    ULONG64 StackBase;
1181
    ULONG64 StackEnd;
1182
    ULONG64 BackingStoreBase;
1183
    ULONG64 BackingStoreEnd;
1184
  } MINIDUMP_THREAD_EX_CALLBACK,*PMINIDUMP_THREAD_EX_CALLBACK;
1185
 
1186
  typedef struct _MINIDUMP_INCLUDE_THREAD_CALLBACK {
1187
    ULONG ThreadId;
1188
  } MINIDUMP_INCLUDE_THREAD_CALLBACK,*PMINIDUMP_INCLUDE_THREAD_CALLBACK;
1189
 
1190
  typedef enum _THREAD_WRITE_FLAGS {
1191
    ThreadWriteThread = 0x0001,ThreadWriteStack = 0x0002,ThreadWriteContext = 0x0004,ThreadWriteBackingStore = 0x0008,
1192
    ThreadWriteInstructionWindow = 0x0010,ThreadWriteThreadData = 0x0020
1193
  } THREAD_WRITE_FLAGS;
1194
 
1195
  typedef struct _MINIDUMP_MODULE_CALLBACK {
1196
    PWCHAR FullPath;
1197
    ULONG64 BaseOfImage;
1198
    ULONG SizeOfImage;
1199
    ULONG CheckSum;
1200
    ULONG TimeDateStamp;
1201
    VS_FIXEDFILEINFO VersionInfo;
1202
    PVOID CvRecord;
1203
    ULONG SizeOfCvRecord;
1204
    PVOID MiscRecord;
1205
    ULONG SizeOfMiscRecord;
1206
  } MINIDUMP_MODULE_CALLBACK,*PMINIDUMP_MODULE_CALLBACK;
1207
 
1208
  typedef struct _MINIDUMP_INCLUDE_MODULE_CALLBACK {
1209
    ULONG64 BaseOfImage;
1210
  } MINIDUMP_INCLUDE_MODULE_CALLBACK,*PMINIDUMP_INCLUDE_MODULE_CALLBACK;
1211
 
1212
  typedef enum _MODULE_WRITE_FLAGS {
1213
    ModuleWriteModule = 0x0001,ModuleWriteDataSeg = 0x0002,ModuleWriteMiscRecord = 0x0004,ModuleWriteCvRecord = 0x0008,
1214
    ModuleReferencedByMemory = 0x0010
1215
  } MODULE_WRITE_FLAGS;
1216
 
1217
  typedef struct _MINIDUMP_CALLBACK_INPUT {
1218
    ULONG ProcessId;
1219
    HANDLE ProcessHandle;
1220
    ULONG CallbackType;
1221
    union {
1222
      MINIDUMP_THREAD_CALLBACK Thread;
1223
      MINIDUMP_THREAD_EX_CALLBACK ThreadEx;
1224
      MINIDUMP_MODULE_CALLBACK Module;
1225
      MINIDUMP_INCLUDE_THREAD_CALLBACK IncludeThread;
1226
      MINIDUMP_INCLUDE_MODULE_CALLBACK IncludeModule;
1227
    } DUMMYUNIONNAME;
1228
  } MINIDUMP_CALLBACK_INPUT,*PMINIDUMP_CALLBACK_INPUT;
1229
 
1230
  typedef struct _MINIDUMP_CALLBACK_OUTPUT {
1231
    union {
1232
      ULONG ModuleWriteFlags;
1233
      ULONG ThreadWriteFlags;
1234
      struct {
1235
	ULONG64 MemoryBase;
1236
	ULONG MemorySize;
1237
      } DUMMYSTRUCTNAME;
1238
    } DUMMYUNIONNAME;
1239
  } MINIDUMP_CALLBACK_OUTPUT,*PMINIDUMP_CALLBACK_OUTPUT;
1240
 
1241
  typedef enum _MINIDUMP_TYPE {
1242
    MiniDumpNormal = 0x0000,MiniDumpWithDataSegs = 0x0001,MiniDumpWithFullMemory = 0x0002,MiniDumpWithHandleData = 0x0004,
1243
    MiniDumpFilterMemory = 0x0008,MiniDumpScanMemory = 0x0010,MiniDumpWithUnloadedModules = 0x0020,MiniDumpWithIndirectlyReferencedMemory = 0x0040,
1244
    MiniDumpFilterModulePaths = 0x0080,MiniDumpWithProcessThreadData = 0x0100,MiniDumpWithPrivateReadWriteMemory = 0x0200,
1245
    MiniDumpWithoutOptionalData = 0x0400
1246
  } MINIDUMP_TYPE;
1247
 
1248
  typedef BOOL (WINAPI *MINIDUMP_CALLBACK_ROUTINE)(PVOID CallbackParam,CONST PMINIDUMP_CALLBACK_INPUT CallbackInput,PMINIDUMP_CALLBACK_OUTPUT CallbackOutput);
1249
 
1250
  typedef struct _MINIDUMP_CALLBACK_INFORMATION {
1251
    MINIDUMP_CALLBACK_ROUTINE CallbackRoutine;
1252
    PVOID CallbackParam;
1253
  } MINIDUMP_CALLBACK_INFORMATION,*PMINIDUMP_CALLBACK_INFORMATION;
1254
 
1255
#define RVA_TO_ADDR(Mapping,Rva) ((PVOID)(((ULONG_PTR) (Mapping)) + (Rva)))
1256
 
1257
  BOOL WINAPI MiniDumpWriteDump(HANDLE hProcess,DWORD ProcessId,HANDLE hFile,MINIDUMP_TYPE DumpType,CONST PMINIDUMP_EXCEPTION_INFORMATION ExceptionParam,CONST PMINIDUMP_USER_STREAM_INFORMATION UserStreamParam,CONST PMINIDUMP_CALLBACK_INFORMATION CallbackParam);
1258
  BOOL WINAPI MiniDumpReadDumpStream(PVOID BaseOfDump,ULONG StreamNumber,PMINIDUMP_DIRECTORY *Dir,PVOID *StreamPointer,ULONG *StreamSize);
1259
 
1260
#include 
1261
 
1262
#ifdef __cplusplus
1263
}
1264
#endif
1265
#endif