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