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