comparison fuhtark_test/include/winapi/imagehlp.h @ 1500:91c8c3b7cbf0

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