42#ifdef _IMAGEHLP_SOURCE_
43#define IMAGEAPI __stdcall
44#define DBHLP_DEPRECIATED
46#define IMAGEAPI DECLSPEC_IMPORT __stdcall
47#if (_MSC_VER >= 1300) && !defined(MIDL_PASS)
48#define DBHLP_DEPRECIATED __declspec(deprecated)
50#define DBHLP_DEPRECIATED
54#define DBHLPAPI IMAGEAPI
56#define IMAGE_SEPARATION (64 * 1024)
64 PIMAGE_NT_HEADERS64 FileHeader;
66 PIMAGE_NT_HEADERS32 FileHeader;
68 PIMAGE_SECTION_HEADER LastRvaSection;
69 ULONG NumberOfSections;
70 PIMAGE_SECTION_HEADER Sections;
71 ULONG Characteristics;
78#define MAX_SYM_NAME 2000
82FindDebugInfoFile(PSTR FileName, PSTR SymbolPath, PSTR DebugFilePath);
84typedef BOOL(CALLBACK* PFIND_DEBUG_FILE_CALLBACK)(HANDLE FileHandle,
90FindDebugInfoFileEx(PSTR FileName,
93 PFIND_DEBUG_FILE_CALLBACK Callback,
96typedef BOOL(CALLBACK* PFINDFILEINPATHCALLBACK)(PSTR filename, PVOID context);
99SymFindFileInPath(HANDLE hprocess,
107 PFINDFILEINPATHCALLBACK callback,
112FindExecutableImage(PSTR FileName, PSTR SymbolPath, PSTR ImageFilePath);
114typedef BOOL(CALLBACK* PFIND_EXE_FILE_CALLBACK)(HANDLE FileHandle,
120FindExecutableImageEx(PSTR FileName,
123 PFIND_EXE_FILE_CALLBACK Callback,
128ImageNtHeader(IN PVOID Base);
132ImageDirectoryEntryToDataEx(IN PVOID Base,
133 IN BOOLEAN MappedAsImage,
134 IN USHORT DirectoryEntry,
136 OUT PIMAGE_SECTION_HEADER* FoundHeader OPTIONAL);
140ImageDirectoryEntryToData(IN PVOID Base,
141 IN BOOLEAN MappedAsImage,
142 IN USHORT DirectoryEntry,
147ImageRvaToSection(IN PIMAGE_NT_HEADERS NtHeaders, IN PVOID Base, IN ULONG Rva);
151ImageRvaToVa(IN PIMAGE_NT_HEADERS NtHeaders,
154 IN OUT PIMAGE_SECTION_HEADER* LastRvaSection);
159 WINAPI* PSYMBOLSERVERPROC)(LPCSTR, LPCSTR, PVOID, DWORD, DWORD, LPSTR);
160typedef BOOL(WINAPI* PSYMBOLSERVEROPENPROC)(VOID);
161typedef BOOL(WINAPI* PSYMBOLSERVERCLOSEPROC)(VOID);
162typedef BOOL(WINAPI* PSYMBOLSERVERSETOPTIONSPROC)(UINT_PTR, ULONG64);
163typedef BOOL(CALLBACK WINAPI* PSYMBOLSERVERCALLBACKPROC)(UINT_PTR action,
166typedef UINT_PTR(WINAPI* PSYMBOLSERVERGETOPTIONSPROC)();
167typedef BOOL(WINAPI* PSYMBOLSERVERPINGPROC)(LPCSTR);
169#define SSRVOPT_CALLBACK 0x001
170#define SSRVOPT_DWORD 0x002
171#define SSRVOPT_DWORDPTR 0x004
172#define SSRVOPT_GUIDPTR 0x008
173#define SSRVOPT_OLDGUIDPTR 0x010
174#define SSRVOPT_UNATTENDED 0x020
175#define SSRVOPT_NOCOPY 0x040
176#define SSRVOPT_PARENTWIN 0x080
177#define SSRVOPT_PARAMTYPE 0x100
178#define SSRVOPT_SECURE 0x200
179#define SSRVOPT_TRACE 0x400
180#define SSRVOPT_RESET ((ULONG_PTR)-1)
182#define SSRVACTION_TRACE 1
191 PVOID ReservedMappedBase;
192 USHORT ReservedMachine;
193 USHORT ReservedCharacteristics;
194 DWORD ReservedCheckSum;
198 DWORD ReservedNumberOfSections;
199 PIMAGE_SECTION_HEADER ReservedSections;
201 DWORD ReservedExportedNamesSize;
202 PSTR ReservedExportedNames;
204 DWORD ReservedNumberOfFunctionTableEntries;
205 PIMAGE_FUNCTION_ENTRY ReservedFunctionTableEntries;
206 DWORD ReservedLowestFunctionStartingAddress;
207 DWORD ReservedHighestFunctionEndingAddress;
209 DWORD ReservedNumberOfFpoTableEntries;
210 PFPO_DATA ReservedFpoTableEntries;
212 DWORD SizeOfCoffSymbols;
213 PIMAGE_COFF_SYMBOLS_HEADER CoffSymbols;
215 DWORD ReservedSizeOfCodeViewSymbols;
216 PVOID ReservedCodeViewSymbols;
220 PSTR ReservedDebugFilePath;
222 DWORD ReservedTimeDateStamp;
224 BOOL ReservedRomImage;
225 PIMAGE_DEBUG_DIRECTORY ReservedDebugDirectory;
226 DWORD ReservedNumberOfDebugDirectories;
228 DWORD ReservedOriginalFunctionTableBaseAddress;
236MapDebugInformation(HANDLE FileHandle,
247SearchTreeForFile(PSTR RootPath, PSTR InputPathName, PSTR OutputPathBuffer);
249typedef BOOL(CALLBACK* PENUMDIRTREE_CALLBACK)(LPCSTR FilePath,
253EnumDirTree(HANDLE hProcess,
256 PSTR OutputPathBuffer,
257 PENUMDIRTREE_CALLBACK Callback,
261MakeSureDirectoryPathExists(PCSTR DirPath);
267#define UNDNAME_COMPLETE (0x0000)
268#define UNDNAME_NO_LEADING_UNDERSCORES \
270#define UNDNAME_NO_MS_KEYWORDS \
272#define UNDNAME_NO_FUNCTION_RETURNS \
274#define UNDNAME_NO_ALLOCATION_MODEL \
276#define UNDNAME_NO_ALLOCATION_LANGUAGE \
278#define UNDNAME_NO_MS_THISTYPE \
281#define UNDNAME_NO_CV_THISTYPE \
284#define UNDNAME_NO_THISTYPE (0x0060)
285#define UNDNAME_NO_ACCESS_SPECIFIERS \
287#define UNDNAME_NO_THROW_SIGNATURES \
290#define UNDNAME_NO_MEMBER_TYPE \
292#define UNDNAME_NO_RETURN_UDT_MODEL \
294#define UNDNAME_32_BIT_DECODE (0x0800)
295#define UNDNAME_NAME_ONLY \
298#define UNDNAME_NO_ARGUMENTS (0x2000)
299#define UNDNAME_NO_SPECIAL_SYMS \
306UnDecorateSymbolName(PCSTR DecoratedName,
307 PSTR UnDecoratedName,
308 DWORD UndecoratedLength,
318#define DBHHEADER_DEBUGDIRS 0x1
348#if !defined(_IMAGEHLP_SOURCE_) && defined(_IMAGEHLP64)
349#define ADDRESS ADDRESS64
350#define LPADDRESS LPADDRESS64
362 a64->Offset = (ULONG64)(LONG64)(LONG)a32->Offset;
363 a64->Segment = a32->Segment;
364 a64->Mode = a32->Mode;
370 a32->Offset = (ULONG)a64->Offset;
371 a32->Segment = a64->Segment;
372 a32->Mode = a64->Mode;
400 DWORD ThCallbackStack;
406 DWORD ThCallbackBStore;
420 DWORD64 KiCallUserMode;
425 DWORD64 KeUserCallbackDispatcher;
430 DWORD64 SystemRangeStart;
436#if !defined(_IMAGEHLP_SOURCE_) && defined(_IMAGEHLP64)
437#define KDHELP KDHELP64
438#define PKDHELP PKDHELP64
453 DWORD ThCallbackStack;
467 DWORD KiCallUserMode;
472 DWORD KeUserCallbackDispatcher;
477 DWORD SystemRangeStart;
483 DWORD ThCallbackBStore;
492 p64->Thread = p32->Thread;
493 p64->ThCallbackStack = p32->ThCallbackStack;
494 p64->NextCallback = p32->NextCallback;
495 p64->FramePointer = p32->FramePointer;
496 p64->KiCallUserMode = p32->KiCallUserMode;
497 p64->KeUserCallbackDispatcher = p32->KeUserCallbackDispatcher;
498 p64->SystemRangeStart = p32->SystemRangeStart;
509 PVOID FuncTableEntry;
517#if !defined(_IMAGEHLP_SOURCE_) && defined(_IMAGEHLP64)
518#define STACKFRAME STACKFRAME64
519#define LPSTACKFRAME LPSTACKFRAME64
527 PVOID FuncTableEntry;
537typedef BOOL(__stdcall* PREAD_PROCESS_MEMORY_ROUTINE64)(
539 DWORD64 qwBaseAddress,
542 LPDWORD lpNumberOfBytesRead);
544typedef PVOID(__stdcall* PFUNCTION_TABLE_ACCESS_ROUTINE64)(HANDLE hProcess,
547typedef DWORD64(__stdcall* PGET_MODULE_BASE_ROUTINE64)(HANDLE hProcess,
550typedef DWORD64(__stdcall* PTRANSLATE_ADDRESS_ROUTINE64)(HANDLE hProcess,
555StackWalk64(DWORD MachineType,
560 PREAD_PROCESS_MEMORY_ROUTINE64 ReadMemoryRoutine,
561 PFUNCTION_TABLE_ACCESS_ROUTINE64 FunctionTableAccessRoutine,
562 PGET_MODULE_BASE_ROUTINE64 GetModuleBaseRoutine,
563 PTRANSLATE_ADDRESS_ROUTINE64 TranslateAddress);
565#if !defined(_IMAGEHLP_SOURCE_) && defined(_IMAGEHLP64)
567#define PREAD_PROCESS_MEMORY_ROUTINE PREAD_PROCESS_MEMORY_ROUTINE64
568#define PFUNCTION_TABLE_ACCESS_ROUTINE PFUNCTION_TABLE_ACCESS_ROUTINE64
569#define PGET_MODULE_BASE_ROUTINE PGET_MODULE_BASE_ROUTINE64
570#define PTRANSLATE_ADDRESS_ROUTINE PTRANSLATE_ADDRESS_ROUTINE64
572#define StackWalk StackWalk64
576typedef BOOL(__stdcall* PREAD_PROCESS_MEMORY_ROUTINE)(
581 PDWORD lpNumberOfBytesRead);
583typedef PVOID(__stdcall* PFUNCTION_TABLE_ACCESS_ROUTINE)(HANDLE hProcess,
586typedef DWORD(__stdcall* PGET_MODULE_BASE_ROUTINE)(HANDLE hProcess,
589typedef DWORD(__stdcall* PTRANSLATE_ADDRESS_ROUTINE)(HANDLE hProcess,
594StackWalk(DWORD MachineType,
599 PREAD_PROCESS_MEMORY_ROUTINE ReadMemoryRoutine,
600 PFUNCTION_TABLE_ACCESS_ROUTINE FunctionTableAccessRoutine,
601 PGET_MODULE_BASE_ROUTINE GetModuleBaseRoutine,
602 PTRANSLATE_ADDRESS_ROUTINE TranslateAddress);
606#define API_VERSION_NUMBER 9
618ImagehlpApiVersion(VOID);
626GetTimestampForLoadedLibrary(HMODULE Module);
631typedef BOOL(CALLBACK* PSYM_ENUMMODULES_CALLBACK64)(PSTR ModuleName,
635typedef BOOL(CALLBACK* PSYM_ENUMSYMBOLS_CALLBACK64)(PSTR SymbolName,
636 DWORD64 SymbolAddress,
640typedef BOOL(CALLBACK* PSYM_ENUMSYMBOLS_CALLBACK64W)(PWSTR SymbolName,
641 DWORD64 SymbolAddress,
645typedef BOOL(CALLBACK* PENUMLOADED_MODULES_CALLBACK64)(PSTR ModuleName,
650typedef BOOL(CALLBACK* PSYMBOL_REGISTERED_CALLBACK64)(HANDLE hProcess,
653 ULONG64 UserContext);
655typedef PVOID(CALLBACK* PSYMBOL_FUNCENTRY_CALLBACK)(HANDLE hProcess,
659typedef PVOID(CALLBACK* PSYMBOL_FUNCENTRY_CALLBACK64)(HANDLE hProcess,
661 ULONG64 UserContext);
663#if !defined(_IMAGEHLP_SOURCE_) && defined(_IMAGEHLP64)
665#define PSYM_ENUMMODULES_CALLBACK PSYM_ENUMMODULES_CALLBACK64
666#define PSYM_ENUMSYMBOLS_CALLBACK PSYM_ENUMSYMBOLS_CALLBACK64
667#define PSYM_ENUMSYMBOLS_CALLBACKW PSYM_ENUMSYMBOLS_CALLBACK64W
668#define PENUMLOADED_MODULES_CALLBACK PENUMLOADED_MODULES_CALLBACK64
669#define PSYMBOL_REGISTERED_CALLBACK PSYMBOL_REGISTERED_CALLBACK64
670#define PSYMBOL_FUNCENTRY_CALLBACK PSYMBOL_FUNCENTRY_CALLBACK64
674typedef BOOL(CALLBACK* PSYM_ENUMMODULES_CALLBACK)(PSTR ModuleName,
678typedef BOOL(CALLBACK* PSYM_ENUMSYMBOLS_CALLBACK)(PSTR SymbolName,
683typedef BOOL(CALLBACK* PSYM_ENUMSYMBOLS_CALLBACKW)(PWSTR SymbolName,
688typedef BOOL(CALLBACK* PENUMLOADED_MODULES_CALLBACK)(PSTR ModuleName,
693typedef BOOL(CALLBACK* PSYMBOL_REGISTERED_CALLBACK)(HANDLE hProcess,
704#define SYMFLAG_VALUEPRESENT 0x00000001
705#define SYMFLAG_REGISTER 0x00000008
706#define SYMFLAG_REGREL 0x00000010
707#define SYMFLAG_FRAMEREL 0x00000020
708#define SYMFLAG_PARAMETER 0x00000040
709#define SYMFLAG_LOCAL 0x00000080
710#define SYMFLAG_CONSTANT 0x00000100
711#define SYMFLAG_EXPORT 0x00000200
712#define SYMFLAG_FORWARDER 0x00000400
713#define SYMFLAG_FUNCTION 0x00000800
714#define SYMFLAG_VIRTUAL 0x00001000
715#define SYMFLAG_THUNK 0x00002000
716#define SYMFLAG_TLSREL 0x00004000
752 CHAR name[MAX_SYM_NAME + 1];
755#if !defined(_IMAGEHLP_SOURCE_) && defined(_IMAGEHLP64)
757#define IMAGEHLP_SYMBOL IMAGEHLP_SYMBOL64
758#define PIMAGEHLP_SYMBOL PIMAGEHLP_SYMBOL64
759#define IMAGEHLP_SYMBOL_PACKAGE IMAGEHLP_SYMBOL64_PACKAGE
760#define PIMAGEHLP_SYMBOL_PACKAGE PIMAGEHLP_SYMBOL64_PACKAGE
777 CHAR name[MAX_SYM_NAME + 1];
797 CHAR LoadedImageName[256];
809 WCHAR ModuleName[32];
810 WCHAR ImageName[256];
811 WCHAR LoadedImageName[256];
814#if !defined(_IMAGEHLP_SOURCE_) && defined(_IMAGEHLP64)
815#define IMAGEHLP_MODULE IMAGEHLP_MODULE64
816#define PIMAGEHLP_MODULE PIMAGEHLP_MODULE64
817#define IMAGEHLP_MODULEW IMAGEHLP_MODULEW64
818#define PIMAGEHLP_MODULEW PIMAGEHLP_MODULEW64
831 CHAR LoadedImageName[256];
843 WCHAR ModuleName[32];
844 WCHAR ImageName[256];
845 WCHAR LoadedImageName[256];
862#if !defined(_IMAGEHLP_SOURCE_) && defined(_IMAGEHLP64)
863#define IMAGEHLP_LINE IMAGEHLP_LINE64
864#define PIMAGEHLP_LINE PIMAGEHLP_LINE64
890#define CBA_DEFERRED_SYMBOL_LOAD_START 0x00000001
891#define CBA_DEFERRED_SYMBOL_LOAD_COMPLETE 0x00000002
892#define CBA_DEFERRED_SYMBOL_LOAD_FAILURE 0x00000003
893#define CBA_SYMBOLS_UNLOADED 0x00000004
894#define CBA_DUPLICATE_SYMBOL 0x00000005
895#define CBA_READ_MEMORY 0x00000006
896#define CBA_DEFERRED_SYMBOL_LOAD_CANCEL 0x00000007
897#define CBA_SET_OPTIONS 0x00000008
898#define CBA_EVENT 0x00000010
899#define CBA_DEFERRED_SYMBOL_LOAD_PARTIAL 0x00000020
900#define CBA_DEBUG_INFO 0x10000000
933 CHAR FileName[MAX_PATH];
939#define DSLFLAG_MISMATCHED_PDB 0x1
940#define DSLFLAG_MISMATCHED_DBG 0x2
942#if !defined(_IMAGEHLP_SOURCE_) && defined(_IMAGEHLP64)
943#define IMAGEHLP_DEFERRED_SYMBOL_LOAD IMAGEHLP_DEFERRED_SYMBOL_LOAD64
944#define PIMAGEHLP_DEFERRED_SYMBOL_LOAD PIMAGEHLP_DEFERRED_SYMBOL_LOAD64
952 CHAR FileName[MAX_PATH];
963 DWORD SelectedSymbol;
966#if !defined(_IMAGEHLP_SOURCE_) && defined(_IMAGEHLP64)
967#define IMAGEHLP_DUPLICATE_SYMBOL IMAGEHLP_DUPLICATE_SYMBOL64
968#define PIMAGEHLP_DUPLICATE_SYMBOL PIMAGEHLP_DUPLICATE_SYMBOL64
975 DWORD SelectedSymbol;
983SymSetParentWindow(HWND hwnd);
989#define SYMOPT_CASE_INSENSITIVE 0x00000001
990#define SYMOPT_UNDNAME 0x00000002
991#define SYMOPT_DEFERRED_LOADS 0x00000004
992#define SYMOPT_NO_CPP 0x00000008
993#define SYMOPT_LOAD_LINES 0x00000010
994#define SYMOPT_OMAP_FIND_NEAREST 0x00000020
995#define SYMOPT_LOAD_ANYTHING 0x00000040
996#define SYMOPT_IGNORE_CVREC 0x00000080
997#define SYMOPT_NO_UNQUALIFIED_LOADS 0x00000100
998#define SYMOPT_FAIL_CRITICAL_ERRORS 0x00000200
999#define SYMOPT_EXACT_SYMBOLS 0x00000400
1000#define SYMOPT_ALLOW_ABSOLUTE_SYMBOLS 0x00000800
1001#define SYMOPT_IGNORE_NT_SYMPATH 0x00001000
1002#define SYMOPT_INCLUDE_32BIT_MODULES 0x00002000
1003#define SYMOPT_PUBLICS_ONLY 0x00004000
1004#define SYMOPT_NO_PUBLICS 0x00008000
1005#define SYMOPT_AUTO_PUBLICS 0x00010000
1006#define SYMOPT_NO_IMAGE_SEARCH 0x00020000
1007#define SYMOPT_SECURE 0x00040000
1009#define SYMOPT_DEBUG 0x80000000
1013SymSetOptions(IN DWORD SymOptions);
1020SymCleanup(IN HANDLE hProcess);
1023SymMatchString(IN LPSTR
string, IN LPSTR expression, IN BOOL fCase);
1025typedef BOOL(CALLBACK* PSYM_ENUMSOURCFILES_CALLBACK)(
PSOURCEFILE pSourceFile,
1029SymEnumSourceFiles(IN HANDLE hProcess,
1032 IN PSYM_ENUMSOURCFILES_CALLBACK cbSrcFiles,
1033 IN PVOID UserContext);
1036SymEnumerateModules64(IN HANDLE hProcess,
1037 IN PSYM_ENUMMODULES_CALLBACK64 EnumModulesCallback,
1038 IN PVOID UserContext);
1040#if !defined(_IMAGEHLP_SOURCE_) && defined(_IMAGEHLP64)
1041#define SymEnumerateModules SymEnumerateModules64
1044SymEnumerateModules(IN HANDLE hProcess,
1045 IN PSYM_ENUMMODULES_CALLBACK EnumModulesCallback,
1046 IN PVOID UserContext);
1050SymEnumerateSymbols64(IN HANDLE hProcess,
1051 IN DWORD64 BaseOfDll,
1052 IN PSYM_ENUMSYMBOLS_CALLBACK64 EnumSymbolsCallback,
1053 IN PVOID UserContext);
1056SymEnumerateSymbolsW64(IN HANDLE hProcess,
1057 IN DWORD64 BaseOfDll,
1058 IN PSYM_ENUMSYMBOLS_CALLBACK64W EnumSymbolsCallback,
1059 IN PVOID UserContext);
1061#if !defined(_IMAGEHLP_SOURCE_) && defined(_IMAGEHLP64)
1062#define SymEnumerateSymbols SymEnumerateSymbols64
1063#define SymEnumerateSymbolsW SymEnumerateSymbolsW64
1066SymEnumerateSymbols(IN HANDLE hProcess,
1068 IN PSYM_ENUMSYMBOLS_CALLBACK EnumSymbolsCallback,
1069 IN PVOID UserContext);
1072SymEnumerateSymbolsW(IN HANDLE hProcess,
1074 IN PSYM_ENUMSYMBOLS_CALLBACKW EnumSymbolsCallback,
1075 IN PVOID UserContext);
1079EnumerateLoadedModules64(IN HANDLE hProcess,
1080 IN PENUMLOADED_MODULES_CALLBACK64
1081 EnumLoadedModulesCallback,
1082 IN PVOID UserContext);
1084#if !defined(_IMAGEHLP_SOURCE_) && defined(_IMAGEHLP64)
1085#define EnumerateLoadedModules EnumerateLoadedModules64
1088EnumerateLoadedModules(IN HANDLE hProcess,
1089 IN PENUMLOADED_MODULES_CALLBACK
1090 EnumLoadedModulesCallback,
1091 IN PVOID UserContext);
1096SymFunctionTableAccess64(HANDLE hProcess, DWORD64 AddrBase);
1098#if !defined(_IMAGEHLP_SOURCE_) && defined(_IMAGEHLP64)
1099#define SymFunctionTableAccess SymFunctionTableAccess64
1103SymFunctionTableAccess(HANDLE hProcess, DWORD AddrBase);
1107SymGetModuleInfo64(IN HANDLE hProcess,
1112SymGetModuleInfoW64(IN HANDLE hProcess,
1116#if !defined(_IMAGEHLP_SOURCE_) && defined(_IMAGEHLP64)
1117#define SymGetModuleInfo SymGetModuleInfo64
1118#define SymGetModuleInfoW SymGetModuleInfoW64
1121SymGetModuleInfo(IN HANDLE hProcess,
1126SymGetModuleInfoW(IN HANDLE hProcess,
1133SymGetModuleBase64(IN HANDLE hProcess, IN DWORD64 qwAddr);
1135#if !defined(_IMAGEHLP_SOURCE_) && defined(_IMAGEHLP64)
1136#define SymGetModuleBase SymGetModuleBase64
1140SymGetModuleBase(IN HANDLE hProcess, IN DWORD dwAddr);
1146#if !defined(_IMAGEHLP_SOURCE_) && defined(_IMAGEHLP64)
1147#define SymGetSymNext SymGetSymNext64
1156#if !defined(_IMAGEHLP_SOURCE_) && defined(_IMAGEHLP64)
1157#define SymGetSymPrev SymGetSymPrev64
1164SymGetLineFromAddr64(IN HANDLE hProcess,
1166 OUT PDWORD pdwDisplacement,
1169#if !defined(_IMAGEHLP_SOURCE_) && defined(_IMAGEHLP64)
1170#define SymGetLineFromAddr SymGetLineFromAddr64
1173SymGetLineFromAddr(IN HANDLE hProcess,
1175 OUT PDWORD pdwDisplacement,
1180SymGetLineFromName64(IN HANDLE hProcess,
1183 IN DWORD dwLineNumber,
1184 OUT PLONG plDisplacement,
1187#if !defined(_IMAGEHLP_SOURCE_) && defined(_IMAGEHLP64)
1188#define SymGetLineFromName SymGetLineFromName64
1191SymGetLineFromName(IN HANDLE hProcess,
1194 IN DWORD dwLineNumber,
1195 OUT PLONG plDisplacement,
1202#if !defined(_IMAGEHLP_SOURCE_) && defined(_IMAGEHLP64)
1203#define SymGetLineNext SymGetLineNext64
1212#if !defined(_IMAGEHLP_SOURCE_) && defined(_IMAGEHLP64)
1213#define SymGetLinePrev SymGetLinePrev64
1220SymMatchFileName(IN PSTR FileName,
1222 OUT PSTR* FileNameStop,
1223 OUT PSTR* MatchStop);
1226SymInitialize(IN HANDLE hProcess,
1227 IN PSTR UserSearchPath,
1228 IN BOOL fInvadeProcess);
1231SymGetSearchPath(IN HANDLE hProcess,
1232 OUT PSTR SearchPath,
1233 IN DWORD SearchPathLength);
1236SymSetSearchPath(IN HANDLE hProcess, IN PSTR SearchPath);
1240SymLoadModule64(IN HANDLE hProcess,
1244 IN DWORD64 BaseOfDll,
1245 IN DWORD SizeOfDll);
1247#define SLMFLAG_VIRTUAL 0x1
1251SymLoadModuleEx(IN HANDLE hProcess,
1255 IN DWORD64 BaseOfDll,
1260#if !defined(_IMAGEHLP_SOURCE_) && defined(_IMAGEHLP64)
1261#define SymLoadModule SymLoadModule64
1265SymLoadModule(IN HANDLE hProcess,
1270 IN DWORD SizeOfDll);
1274SymUnloadModule64(IN HANDLE hProcess, IN DWORD64 BaseOfDll);
1276#if !defined(_IMAGEHLP_SOURCE_) && defined(_IMAGEHLP64)
1277#define SymUnloadModule SymUnloadModule64
1280SymUnloadModule(IN HANDLE hProcess, IN DWORD BaseOfDll);
1286 IN DWORD UnDecNameLength
1289#if !defined(_IMAGEHLP_SOURCE_) && defined(_IMAGEHLP64)
1290#define SymUnDName SymUnDName64
1295 IN DWORD UnDecNameLength
1300SymRegisterCallback64(IN HANDLE hProcess,
1301 IN PSYMBOL_REGISTERED_CALLBACK64 CallbackFunction,
1302 IN ULONG64 UserContext);
1305SymRegisterFunctionEntryCallback64(IN HANDLE hProcess,
1306 IN PSYMBOL_FUNCENTRY_CALLBACK64
1308 IN ULONG64 UserContext);
1310#if !defined(_IMAGEHLP_SOURCE_) && defined(_IMAGEHLP64)
1311#define SymRegisterCallback SymRegisterCallback64
1312#define SymRegisterFunctionEntryCallback SymRegisterFunctionEntryCallback64
1315SymRegisterCallback(IN HANDLE hProcess,
1316 IN PSYMBOL_REGISTERED_CALLBACK CallbackFunction,
1317 IN PVOID UserContext);
1320SymRegisterFunctionEntryCallback(IN HANDLE hProcess,
1321 IN PSYMBOL_FUNCENTRY_CALLBACK CallbackFunction,
1322 IN PVOID UserContext);
1329 char file[MAX_PATH];
1343 ULONG64 Reserved[2];
1361 CHAR name[MAX_SYM_NAME + 1];
1366 ULONG64 InstructionOffset;
1367 ULONG64 ReturnOffset;
1368 ULONG64 FrameOffset;
1369 ULONG64 StackOffset;
1370 ULONG64 BackingStoreOffset;
1371 ULONG64 FuncTableEntry;
1373 ULONG64 Reserved[5];
1378typedef VOID IMAGEHLP_CONTEXT, *PIMAGEHLP_CONTEXT;
1381SymSetContext(HANDLE hProcess,
1383 PIMAGEHLP_CONTEXT Context);
1386SymFromAddr(IN HANDLE hProcess,
1388 OUT PDWORD64 Displacement,
1398SymFromName(IN HANDLE hProcess, IN LPSTR Name, OUT
PSYMBOL_INFO Symbol);
1400typedef BOOL(CALLBACK* PSYM_ENUMERATESYMBOLS_CALLBACK)(
PSYMBOL_INFO pSymInfo,
1405SymEnumSymbols(IN HANDLE hProcess,
1406 IN ULONG64 BaseOfDll,
1408 IN PSYM_ENUMERATESYMBOLS_CALLBACK EnumSymbolsCallback,
1409 IN PVOID UserContext);
1412SymEnumSymbolsForAddr(IN HANDLE hProcess,
1414 IN PSYM_ENUMERATESYMBOLS_CALLBACK EnumSymbolsCallback,
1415 IN PVOID UserContext);
1417typedef enum _IMAGEHLP_SYMBOL_TYPE_INFO
1425 TI_GET_ARRAYINDEXTYPEID,
1428 TI_GET_ADDRESSOFFSET,
1432 TI_GET_CHILDRENCOUNT,
1434 TI_GET_VIRTUALBASECLASS,
1435 TI_GET_VIRTUALTABLESHAPEID,
1436 TI_GET_VIRTUALBASEPOINTEROFFSET,
1437 TI_GET_CLASSPARENTID,
1440 TI_GET_LEXICALPARENT,
1445 TI_GET_CALLING_CONVENTION,
1446} IMAGEHLP_SYMBOL_TYPE_INFO;
1456SymGetTypeInfo(IN HANDLE hProcess,
1459 IN IMAGEHLP_SYMBOL_TYPE_INFO GetType,
1463SymEnumTypes(IN HANDLE hProcess,
1464 IN ULONG64 BaseOfDll,
1465 IN PSYM_ENUMERATESYMBOLS_CALLBACK EnumSymbolsCallback,
1466 IN PVOID UserContext);
1469SymGetTypeFromName(IN HANDLE hProcess,
1470 IN ULONG64 BaseOfDll,
1475SymAddSymbol(IN HANDLE hProcess,
1476 IN ULONG64 BaseOfDll,
1483SymDeleteSymbol(IN HANDLE hProcess,
1484 IN ULONG64 BaseOfDll,
1493typedef BOOL(WINAPI* PDBGHELP_CREATE_USER_DUMP_CALLBACK)(DWORD DataType,
1499DbgHelpCreateUserDump(IN LPSTR FileName,
1500 IN PDBGHELP_CREATE_USER_DUMP_CALLBACK Callback,
1504DbgHelpCreateUserDumpW(IN LPWSTR FileName,
1505 IN PDBGHELP_CREATE_USER_DUMP_CALLBACK Callback,
1514SymGetSymFromAddr64(IN HANDLE hProcess,
1516 OUT PDWORD64 pdwDisplacement,
1519#if !defined(_IMAGEHLP_SOURCE_) && defined(_IMAGEHLP64)
1520#define SymGetSymFromAddr SymGetSymFromAddr64
1523SymGetSymFromAddr(IN HANDLE hProcess,
1525 OUT PDWORD pdwDisplacement,
1536SymGetSymFromName64(IN HANDLE hProcess,
1540#if !defined(_IMAGEHLP_SOURCE_) && defined(_IMAGEHLP64)
1541#define SymGetSymFromName SymGetSymFromName64
1544SymGetSymFromName(IN HANDLE hProcess,
1558FindFileInPath(HANDLE hprocess,
1572FindFileInSearchPath(HANDLE hprocess,
1582SymEnumSym(IN HANDLE hProcess,
1583 IN ULONG64 BaseOfDll,
1584 IN PSYM_ENUMERATESYMBOLS_CALLBACK EnumSymbolsCallback,
1585 IN PVOID UserContext);
1590#define SYMF_OMAP_GENERATED 0x00000001
1591#define SYMF_OMAP_MODIFIED 0x00000002
1592#define SYMF_REGISTER 0x00000008
1593#define SYMF_REGREL 0x00000010
1594#define SYMF_FRAMEREL 0x00000020
1595#define SYMF_PARAMETER 0x00000040
1596#define SYMF_LOCAL 0x00000080
1597#define SYMF_CONSTANT 0x00000100
1598#define SYMF_EXPORT 0x00000200
1599#define SYMF_FORWARDER 0x00000400
1600#define SYMF_FUNCTION 0x00000800
1601#define SYMF_VIRTUAL 0x00001000
1602#define SYMF_THUNK 0x00002000
1603#define SYMF_TLSREL 0x00004000
1608#define IMAGEHLP_SYMBOL_INFO_VALUEPRESENT 1
1609#define IMAGEHLP_SYMBOL_INFO_REGISTER SYMF_REGISTER
1610#define IMAGEHLP_SYMBOL_INFO_REGRELATIVE SYMF_REGREL
1611#define IMAGEHLP_SYMBOL_INFO_FRAMERELATIVE SYMF_FRAMEREL
1612#define IMAGEHLP_SYMBOL_INFO_PARAMETER SYMF_PARAMETER
1613#define IMAGEHLP_SYMBOL_INFO_LOCAL SYMF_LOCAL
1614#define IMAGEHLP_SYMBOL_INFO_CONSTANT SYMF_CONSTANT
1615#define IMAGEHLP_SYMBOL_FUNCTION SYMF_FUNCTION
1616#define IMAGEHLP_SYMBOL_VIRTUAL SYMF_VIRTUAL
1617#define IMAGEHLP_SYMBOL_THUNK SYMF_THUNK
1618#define IMAGEHLP_SYMBOL_INFO_TLSRELATIVE SYMF_TLSREL
1620#include <pshpack4.h>
1622#pragma warning(disable : 4200)
1624#define MINIDUMP_SIGNATURE ('PMDM')
1625#define MINIDUMP_VERSION (42899)
1627typedef ULONG64 RVA64;
1643 ULONG64 StartOfMemoryRange;
1654 ULONG64 StartOfMemoryRange;
1662 ULONG32 NumberOfStreams;
1663 RVA StreamDirectoryRva;
1667 ULONG32 TimeDateStamp;
1697typedef enum _MINIDUMP_STREAM_TYPE
1701 ReservedStream0 = 1,
1702 ReservedStream1 = 2,
1703 ThreadListStream = 3,
1704 ModuleListStream = 4,
1705 MemoryListStream = 5,
1706 ExceptionStream = 6,
1707 SystemInfoStream = 7,
1708 ThreadExListStream = 8,
1709 Memory64ListStream = 9,
1710 CommentStreamA = 10,
1711 CommentStreamW = 11,
1712 HandleDataStream = 12,
1713 FunctionTableStream = 13,
1714 UnloadedModuleListStream = 14,
1715 MiscInfoStream = 15,
1717 LastReservedStream = 0xffff
1719} MINIDUMP_STREAM_TYPE;
1726#if defined(_MSC_VER)
1729#pragma warning(push)
1731#pragma warning(disable : 4201)
1743 USHORT ProcessorArchitecture;
1744 USHORT ProcessorLevel;
1745 USHORT ProcessorRevision;
1751 UCHAR NumberOfProcessors;
1762 ULONG32 MajorVersion;
1763 ULONG32 MinorVersion;
1764 ULONG32 BuildNumber;
1807 ULONG32 VendorId[3];
1813 ULONG32 VersionInformation;
1819 ULONG32 FeatureInformation;
1826 ULONG32 AMDExtendedCpuFeatures;
1837 ULONG64 ProcessorFeatures[2];
1845typedef union _CPU_INFORMATION CPU_INFORMATION, *PCPU_INFORMATION;
1847#if defined(_MSC_VER)
1852#pragma warning(disable : 4201)
1868C_ASSERT(
sizeof(((PPROCESS_INFORMATION)0)->dwThreadId) == 4);
1873 ULONG32 SuspendCount;
1874 ULONG32 PriorityClass;
1887 ULONG32 NumberOfThreads;
1894 ULONG32 SuspendCount;
1895 ULONG32 PriorityClass;
1909 ULONG32 NumberOfThreads;
1919 ULONG32 ExceptionCode;
1920 ULONG32 ExceptionFlags;
1921 ULONG64 ExceptionRecord;
1922 ULONG64 ExceptionAddress;
1923 ULONG32 NumberParameters;
1924 ULONG32 __unusedAlignment;
1925 ULONG64 ExceptionInformation[EXCEPTION_MAXIMUM_PARAMETERS];
1938 ULONG32 __alignment;
1952 ULONG64 BaseOfImage;
1953 ULONG32 SizeOfImage;
1955 ULONG32 TimeDateStamp;
1957 VS_FIXEDFILEINFO VersionInfo;
1970 ULONG32 NumberOfModules;
1980 ULONG32 NumberOfMemoryRanges;
1986 ULONG64 NumberOfMemoryRanges;
1998 PEXCEPTION_POINTERS ExceptionPointers;
1999 BOOL ClientPointers;
2012 ULONG32 GrantedAccess;
2013 ULONG32 HandleCount;
2014 ULONG32 PointerCount;
2019 ULONG32 SizeOfHeader;
2020 ULONG32 SizeOfDescriptor;
2021 ULONG32 NumberOfDescriptors;
2031 ULONG64 MinimumAddress;
2032 ULONG64 MaximumAddress;
2033 ULONG64 BaseAddress;
2035 ULONG32 SizeOfAlignPad;
2040 ULONG32 SizeOfHeader;
2041 ULONG32 SizeOfDescriptor;
2042 ULONG32 SizeOfNativeDescriptor;
2043 ULONG32 SizeOfFunctionEntry;
2044 ULONG32 NumberOfDescriptors;
2045 ULONG32 SizeOfAlignPad;
2057 ULONG64 BaseOfImage;
2058 ULONG32 SizeOfImage;
2060 ULONG32 TimeDateStamp;
2070 ULONG32 SizeOfHeader;
2071 ULONG32 SizeOfEntry;
2072 ULONG32 NumberOfEntries;
2082#define MINIDUMP_MISC1_PROCESS_ID 0x00000001
2083#define MINIDUMP_MISC1_PROCESS_TIMES 0x00000002
2090 ULONG32 ProcessCreateTime;
2091 ULONG32 ProcessUserTime;
2092 ULONG32 ProcessKernelTime;
2115 ULONG UserStreamCount;
2123typedef enum _MINIDUMP_CALLBACK_TYPE
2128 IncludeThreadCallback,
2129 IncludeModuleCallback,
2130} MINIDUMP_CALLBACK_TYPE;
2135 HANDLE ThreadHandle;
2137 ULONG SizeOfContext;
2145 HANDLE ThreadHandle;
2147 ULONG SizeOfContext;
2150 ULONG64 BackingStoreBase;
2151 ULONG64 BackingStoreEnd;
2159typedef enum _THREAD_WRITE_FLAGS
2161 ThreadWriteThread = 0x0001,
2162 ThreadWriteStack = 0x0002,
2163 ThreadWriteContext = 0x0004,
2164 ThreadWriteBackingStore = 0x0008,
2165 ThreadWriteInstructionWindow = 0x0010,
2166 ThreadWriteThreadData = 0x0020,
2167} THREAD_WRITE_FLAGS;
2172 ULONG64 BaseOfImage;
2175 ULONG TimeDateStamp;
2176 VS_FIXEDFILEINFO VersionInfo;
2178 ULONG SizeOfCvRecord;
2180 ULONG SizeOfMiscRecord;
2185 ULONG64 BaseOfImage;
2188typedef enum _MODULE_WRITE_FLAGS
2190 ModuleWriteModule = 0x0001,
2191 ModuleWriteDataSeg = 0x0002,
2192 ModuleWriteMiscRecord = 0x0004,
2193 ModuleWriteCvRecord = 0x0008,
2194 ModuleReferencedByMemory = 0x0010
2195} MODULE_WRITE_FLAGS;
2200 HANDLE ProcessHandle;
2214 ULONG ModuleWriteFlags;
2215 ULONG ThreadWriteFlags;
2268typedef enum _MINIDUMP_TYPE
2270 MiniDumpNormal = 0x0000,
2271 MiniDumpWithDataSegs = 0x0001,
2272 MiniDumpWithFullMemory = 0x0002,
2273 MiniDumpWithHandleData = 0x0004,
2274 MiniDumpFilterMemory = 0x0008,
2275 MiniDumpScanMemory = 0x0010,
2276 MiniDumpWithUnloadedModules = 0x0020,
2277 MiniDumpWithIndirectlyReferencedMemory = 0x0040,
2278 MiniDumpFilterModulePaths = 0x0080,
2279 MiniDumpWithProcessThreadData = 0x0100,
2280 MiniDumpWithPrivateReadWriteMemory = 0x0200,
2289typedef BOOL(WINAPI* MINIDUMP_CALLBACK_ROUTINE)(
2290 IN PVOID CallbackParam,
2296 MINIDUMP_CALLBACK_ROUTINE CallbackRoutine;
2297 PVOID CallbackParam;
2325#define RVA_TO_ADDR(Mapping, Rva) ((PVOID)(((ULONG_PTR)(Mapping)) + (Rva)))
2332 IN MINIDUMP_TYPE DumpType,
2338MiniDumpReadDumpStream(IN PVOID BaseOfDump,
2339 IN ULONG StreamNumber,
2341 OPTIONAL OUT PVOID* StreamPointer,
2342 OPTIONAL OUT ULONG* StreamSize OPTIONAL);
Definition PlatformWin.cpp:19
Definition dbghelp.h:1936
Definition dbghelp.h:1365
Definition dbghelp.h:1326
Definition dbghelp.h:2212
Definition dbghelp.h:1678
Definition dbghelp.h:1918
Definition dbghelp.h:2030
Definition dbghelp.h:2039
Definition dbghelp.h:2018
Definition dbghelp.h:2007
Definition dbghelp.h:2184
Definition dbghelp.h:2155
Definition dbghelp.h:1636
Definition dbghelp.h:1630
Definition dbghelp.h:1985
Definition dbghelp.h:1653
Definition dbghelp.h:1642
Definition dbghelp.h:1979
Definition dbghelp.h:2086
Definition dbghelp.h:2170
Definition dbghelp.h:1969
Definition dbghelp.h:1951
Definition dbghelp.h:1684
Definition dbghelp.h:1736
Definition dbghelp.h:2133
Definition dbghelp.h:2143
Definition dbghelp.h:1908
Definition dbghelp.h:1892
Definition dbghelp.h:1886
Definition dbghelp.h:1871
Definition dbghelp.h:2069
Definition dbghelp.h:2056
Definition dbghelp.h:2100
Definition dbghelp.h:2106
Definition dbghelp.h:1333
Definition dbghelp.h:1359
Definition dbghelp.h:1340
Definition dbghelp.h:1449