/* * imagehlp.h Image helper functions * * ========================================================================= * * Open Watcom Project * * Copyright (c) 2004-2010 The Open Watcom Contributors. All Rights Reserved. * * This file is automatically generated. Do not edit directly. * * ========================================================================= */ #ifndef _IMAGEHLP_ #define _IMAGEHLP_ #ifndef _ENABLE_AUTODEPEND #pragma read_only_file; #endif #include #ifdef __cplusplus extern "C" { #endif /* Macros to specify image and debug helper functions */ #define IMAGEAPI DECLSPEC_IMPORT __stdcall #define DBHLPAPI IMAGEAPI /* Digest handle */ typedef PVOID DIGEST_HANDLE; /* Image helper context */ typedef VOID IMAGEHLP_CONTEXT; typedef VOID *PIMAGEHLP_CONTEXT; /* Relative virtual address */ typedef DWORD RVA; typedef ULONG64 RVA64; /* Image separation */ #define IMAGE_SEPARATION 65536 /* Maximum symbol name size */ #define MAX_SYM_NAME 2000 /* BindImageEx() flags */ #define BIND_NO_BOUND_UPDATES 0x00000001L #define BIND_NO_UPDATE 0x00000002L #define BIND_ALL_IMAGES 0x00000004L #define BIND_CACHE_IMPORT_DLLS 0x00000008L #define BIND_REPORT_64BIT_VA 0x00000010L /* Checksum return codes */ #define CHECKSUM_SUCCESS 0 #define CHECKSUM_OPEN_FAILURE 1 #define CHECKSUM_MAP_FAILURE 2 #define CHECKSUM_MAPVIEW_FAILURE 3 #define CHECKSUM_UNICODE_FAILURE 4 /* SplitSymbols() flags */ #define SPLITSYM_REMOVE_PRIVATE 0x00000001L #define SPLITSYM_EXTRACT_ALL 0x00000002L #define SPLITSYM_SYMBOLPATH_IS_SRC 0x00000004L /* Image certificate digest flags */ #define CERT_PE_IMAGE_DIGEST_DEBUG_INFO 0x00000001L #define CERT_PE_IMAGE_DIGEST_RESOURCES 0x00000002L #define CERT_PE_IMAGE_DIGEST_ALL_IMPORT_INFO 0x00000004L #define CERT_PE_IMAGE_DIGEST_NON_PE_INFO 0x00000008L /* Certificate section types */ #define CERT_SECTION_TYPE_ANY 0xFF /* Debug helper error codes */ #define ERROR_IMAGE_NOT_STRIPPED 0x8800 #define ERROR_NO_DBG_POINTER 0x8801 #define ERROR_NO_PDB_POINTER 0x8802 /* UnDecorateSymbolName() flags */ #define UNDNAME_COMPLETE 0x00000000L #define UNDNAME_NO_LEADING_UNDERSCORES 0x00000001L #define UNDNAME_NO_MS_KEYWORDS 0x00000002L #define UNDNAME_NO_FUNCTION_RETURNS 0x00000004L #define UNDNAME_NO_ALLOCATION_MODEL 0x00000008L #define UNDNAME_NO_ALLOCATION_LANGUAGE 0x00000010L #define UNDNAME_NO_MS_THISTYPE 0x00000020L #define UNDNAME_NO_CV_THISTYPE 0x00000040L #define UNDNAME_NO_THISTYPE 0x00000060L #define UNDNAME_NO_ACCESS_SPECIFIERS 0x00000080L #define UNDNAME_NO_THROW_SIGNATURES 0x00000100L #define UNDNAME_NO_MEMBER_TYPE 0x00000200L #define UNDNAME_NO_RETURN_UDT_MODEL 0x00000400L #define UNDNAME_32_BIT_DECODE 0x00000800L #define UNDNAME_NAME_ONLY 0x00001000L #define UNDNAME_NO_ARGUMENTS 0x00002000L #define UNDNAME_NO_SPECIAL_SYMS 0x00004000L /* Module load data types */ #define DBHHEADER_DEBUGDIRS 0x00000001L #define DBHHEADER_CVMISC 0x00000002L #define DBHHEADER_PDBGUID 0x00000003L /* API version number */ #define API_VERSION_NUMBER 11 /* Symbol flags */ #define SYMFLAG_VALUEPRESENT 0x00000001L #define SYMFLAG_REGISTER 0x00000008L #define SYMFLAG_REGREL 0x00000010L #define SYMFLAG_FRAMEREL 0x00000020L #define SYMFLAG_PARAMETER 0x00000040L #define SYMFLAG_LOCAL 0x00000080L #define SYMFLAG_CONSTANT 0x00000100L #define SYMFLAG_EXPORT 0x00000200L #define SYMFLAG_FORWARDER 0x00000400L #define SYMFLAG_FUNCTION 0x00000800L #define SYMFLAG_VIRTUAL 0x00001000L #define SYMFLAG_THUNK 0x00002000L #define SYMFLAG_TLSREL 0x00004000L #define SYMFLAG_SLOT 0x00008000L #define SYMFLAG_ILREL 0x00010000L #define SYMFLAG_METADATA 0x00020000L #define SYMFLAG_CLR_TOKEN 0x00040000L #define SYMFLAG_RESET 0x80000000L /* Callback action codes */ #define CBA_DEFERRED_SYMBOL_LOAD_START 0x00000001L #define CBA_DEFERRED_SYMBOL_LOAD_COMPLETE 0x00000002L #define CBA_DEFERRED_SYMBOL_LOAD_FAILURE 0x00000003L #define CBA_SYMBOLS_UNLOADED 0x00000004L #define CBA_DUPLICATE_SYMBOL 0x00000005L #define CBA_READ_MEMORY 0x00000006L #define CBA_DEFERRED_SYMBOL_LOAD_CANCEL 0x00000007L #define CBA_SET_OPTIONS 0x00000008L #define CBA_EVENT 0x00000010L #define CBA_DEFERRED_SYMBOL_LOAD_PARTIAL 0x00000020L #define CBA_DEBUG_INFO 0x10000000L #define CBA_SRCSRV_INFO 0x20000000L #define CBA_SRCSRV_EVENT 0x40000000L /* Deferred symbol load flags */ #define DSLFLAG_MISMATCHED_PDB 0x00000001L #define DSLFLAG_MISMATCHED_DBG 0x00000002L /* Symbol types */ #define SYMOPT_CASE_INSENSITIVE 0x00000001L #define SYMOPT_UNDNAME 0x00000002L #define SYMOPT_DEFERRED_LOADS 0x00000004L #define SYMOPT_NO_CPP 0x00000008L #define SYMOPT_LOAD_LINES 0x00000010L #define SYMOPT_OMAP_FIND_NEAREST 0x00000020L #define SYMOPT_LOAD_ANYTHING 0x00000040L #define SYMOPT_IGNORE_CVREC 0x00000080L #define SYMOPT_NO_UNQUALIFIED_LOADS 0x00000100L #define SYMOPT_FAIL_CRITICAL_ERRORS 0x00000200L #define SYMOPT_EXACT_SYMBOLS 0x00000400L #define SYMOPT_ALLOW_ABSOLUTE_SYMBOLS 0x00000800L #define SYMOPT_IGNORE_NT_SYMPATH 0x00001000L #define SYMOPT_INCLUDE_32BIT_MODULES 0x00002000L #define SYMOPT_PUBLICS_ONLY 0x00004000L #define SYMOPT_NO_PUBLICS 0x00008000L #define SYMOPT_AUTO_PUBLICS 0x00010000L #define SYMOPT_NO_IMAGE_SEARCH 0x00020000L #define SYMOPT_SECURE 0x00040000L #define SYMOPT_NO_PROMPTS 0x00080000L #define SYMOPT_OVERWRITE 0x00100000L #define SYMOPT_IGNORE_IMAGEDIR 0x00200000L #define SYMOPT_FLAT_DIRECTORY 0x00400000L #define SYMOPT_FAVOR_COMPRESSED 0x00800000L #define SYMOPT_ALLOW_ZERO_ADDRESS 0x01000000L #define SYMOPT_DISABLE_SYMSRV_AUTODETECT 0x02000000L #define SYMOPT_DEBUG 0x80000000L /* SymEnumSourceLines() flags */ #define ESLFLAG_FULLPATH 0x00000001L #define ESLFLAG_NEAREST 0x00000002L #define ESLFLAG_PREV 0x00000004L #define ESLFLAG_NEXT 0x00000008L /* SymLoadModuleEx() flags */ #define SLMFLAG_VIRTUAL 0x00000001L #define SLMFLAG_ALT_INDEX 0x00000002L #define SLMFLAG_NO_SYMBOLS 0x00000004L /* SymSearch() flags */ #define SYMSEARCH_MASKOBJS 0x00000001L #define SYMSEARCH_RECURSE 0x00000002L #define SYMSEARCH_GLOBALSONLY 0x00000004L #define SYMSEARCH_ALLITEMS 0x00000008L /* SymGetTypeInfo() type identifiers */ #define IMAGEHLP_GET_TYPE_INFO_UNCACHED 0x00000001L #define IMAGEHLP_GET_TYPE_INFO_CHILDREN 0x00000002L /* Symbol server version */ #define SYMSRV_VERSION 2 /* Symbol server options */ #define SSRVOPT_CALLBACK 0x00000001L #define SSRVOPT_DWORD 0x00000002L #define SSRVOPT_DWORDPTR 0x00000004L #define SSRVOPT_GUIDPTR 0x00000008L #define SSRVOPT_OLDGUIDPTR 0x00000010L #define SSRVOPT_UNATTENDED 0x00000020L #define SSRVOPT_NOCOPY 0x00000040L #define SSRVOPT_GETPATH 0x00000040L #define SSRVOPT_PARENTWIN 0x00000080L #define SSRVOPT_PARAMTYPE 0x00000100L #define SSRVOPT_SECURE 0x00000200L #define SSRVOPT_TRACE 0x00000400L #define SSRVOPT_SETCONTEXT 0x00000800L #define SSRVOPT_PROXY 0x00001000L #define SSRVOPT_DOWNSTREAM_STORE 0x00002000L #define SSRVOPT_OVERWRITE 0x00004000L #define SSRVOPT_RESETTOU 0x00008000L #define SSRVOPT_CALLBACKW 0x00010000L #define SSRVOPT_FLAT_DEFAULT_STORE 0x00020000L #define SSRVOPT_PROXYW 0x00040000L #define SSRVOPT_MESSAGE 0x00080000L #define SSRVOPT_SERVICE 0x00100000L #define SSRVOPT_FAVOR_COMPRESSED 0x00200000L #define SSRVOPT_STRING 0x00400000L #define SSRVOPT_WINHTTP 0x00800000L #define SSRVOPT_WININET 0x01000000L #define SSRVOPT_MAX 0x01000000L #define SSRVOPT_RESET ((ULONG_PTR)-1) #define NUM_SSRVOPTS 30 /* Symbol server actions */ #define SSRVACTION_TRACE 1 #define SSRVACTION_QUERYCANCEL 2 #define SSRVACTION_EVENT 3 #define SSRVACTION_EVENTW 4 #define SSRVACTION_SIZE 5 /* Symbol store options */ #define SYMSTOREOPT_COMPRESS 0x00000001L #define SYMSTOREOPT_OVERWRITE 0x00000002L #define SYMSTOREOPT_RETURNINDEX 0x00000004L #define SYMSTOREOPT_POINTER 0x00000008L #define SYMSTOREOPT_ALT_INDEX 0x00000010L #define SYMSTOREOPT_UNICODE 0x00000020L #define SYMSTOREOPT_PASS_IF_EXISTS 0x00000040L /* Old symbol flags */ #define SYMF_OMAP_GENERATED 0x00000001L #define SYMF_OMAP_MODIFIED 0x00000002L #define SYMF_REGISTER 0x00000008L #define SYMF_REGREL 0x00000010L #define SYMF_FRAMEREL 0x00000020L #define SYMF_PARAMETER 0x00000040L #define SYMF_LOCAL 0x00000080L #define SYMF_CONSTANT 0x00000100L #define SYMF_EXPORT 0x00000200L #define SYMF_FORWARDER 0x00000400L #define SYMF_FUNCTION 0x00000800L #define SYMF_VIRTUAL 0x00001000L #define SYMF_THUNK 0x00002000L #define SYMF_TLSREL 0x00004000L /* Image helper symbol flags */ #define IMAGEHLP_SYMBOL_INFO_VALUEPRESENT 0x00000001L #define IMAGEHLP_SYMBOL_INFO_REGISTER SYMF_REGISTER #define IMAGEHLP_SYMBOL_INFO_REGRELATIVE SYMF_REGREL #define IMAGEHLP_SYMBOL_INFO_FRAMERELATIVE SYMF_FRAMEREL #define IMAGEHLP_SYMBOL_INFO_PARAMETER SYMF_PARAMETER #define IMAGEHLP_SYMBOL_INFO_LOCAL SYMF_LOCAL #define IMAGEHLP_SYMBOL_INFO_CONSTANT SYMF_CONSTANT #define IMAGEHLP_SYMBOL_FUNCTION SYMF_FUNCTION #define IMAGEHLP_SYMBOL_VIRTUAL SYMF_VIRTUAL #define IMAGEHLP_SYMBOL_THUNK SYMF_THUNK #define IMAGEHLP_SYMBOL_INFO_TLSRELATIVE SYMF_TLSREL /* Minidump signature and version */ #define MINIDUMP_SIGNATURE 'PMDM' #define MINIDUMP_VERSION 42899 /* Minidump miscellaneous information flags */ #define MINIDUMP_MISC1_PROCESS_ID 0x00000001L #define MINIDUMP_MISC1_PROCESS_TIMES 0x00000002L #define MINIDUMP_MISC1_PROCESSOR_POWER_INFO 0x00000004L #define MINIDUMP_MISC3_PROCESS_INTEGRITY 0x00000010L #define MINIDUMP_MISC3_PROCESS_EXECUTE_FLAGS 0x00000020L #define MINIDUMP_MISC3_TIMEZONE 0x00000040L #define MINIDUMP_MISC3_PROTECTED_PROCESS 0x00000080L /* Minidump thread information flags */ #define MINIDUMP_THREAD_INFO_ERROR_THREAD 0x00000001L #define MINIDUMP_THREAD_INFO_WARNING_THREAD 0x00000002L #define MINIDUMP_THREAD_INFO_EXITED_THREAD 0x00000004L #define MINIDUMP_THREAD_INFO_INVALID_INFO 0x00000008L #define MINIDUMP_THREAD_INFO_INVALID_CONTEXT 0x00000010L #define MINIDUMP_THREAD_INFO_INVALID_TEB 0x00000020L /* Loaded image */ typedef struct _LOADED_IMAGE { PSTR ModuleName; HANDLE hFile; PUCHAR MappedAddress; #ifdef _IMAGEHLP64 PIMAGE_NT_HEADERS64 FileHeader; #else PIMAGE_NT_HEADERS32 FileHeader; #endif PIMAGE_SECTION_HEADER LastRvaSection; ULONG NumberOfSections; PIMAGE_SECTION_HEADER Sections; ULONG Characteristics; BOOLEAN fSystemImage; BOOLEAN fDOSImage; BOOLEAN fReadOnly; UCHAR Version; LIST_ENTRY Links; ULONG SizeOfImage; } LOADED_IMAGE; typedef LOADED_IMAGE *PLOADED_IMAGE; /* Image helper status reasons */ typedef enum _IMAGEHLP_STATUS_REASON { BindOutOfMemory = 0, BindRvaToVaFailed = 1, BindNoRoomInImage = 2, BindImportModuleFailed = 3, BindImportProcedureFailed = 4, BindImportModule = 5, BindImportProcedure = 6, BindForwarder = 7, BindForwarderNOT = 8, BindImageModified = 9, BindExportFileHeaders = 10, BindImageComplete = 11, BindMismatchedSymbols = 12, BindSymbolsNotUpdated = 13, BindImportProcedure32 = 14, BindImportProcedure64 = 15, BindForwarder32 = 16, BindForwarder64 = 17, BindForwarderNOT32 = 18, BindForwarderNOT64 = 19 } IMAGEHLP_STATUS_REASON; /* Image helper status routine */ typedef BOOL (__stdcall *PIMAGEHLP_STATUS_ROUTINE)( IMAGEHLP_STATUS_REASON, PCSTR, PCSTR, ULONG_PTR, ULONG_PTR ); typedef BOOL (__stdcall *PIMAGEHLP_STATUS_ROUTINE32)( IMAGEHLP_STATUS_REASON, PCSTR, PCSTR, ULONG, ULONG_PTR ); typedef BOOL (__stdcall *PIMAGEHLP_STATUS_ROUTINE64)( IMAGEHLP_STATUS_REASON, PCSTR, PCSTR, ULONG64, ULONG_PTR ); /* Digest function */ typedef BOOL (WINAPI *DIGEST_FUNCTION)( DIGEST_HANDLE, PBYTE, DWORD ); /* Find file callbacks */ typedef BOOL (CALLBACK *PFIND_DEBUG_FILE_CALLBACK)( HANDLE, PCSTR, PVOID ); typedef BOOL (CALLBACK *PFIND_DEBUG_FILE_CALLBACKW)( HANDLE, PCWSTR, PVOID ); typedef BOOL (CALLBACK *PFINDFILEINPATHCALLBACK)( PCSTR, PVOID ); typedef BOOL (CALLBACK *PFINDFILEINPATHCALLBACKW)( PCWSTR, PVOID ); typedef BOOL (CALLBACK *PFIND_EXE_FILE_CALLBACK)( HANDLE, PCSTR, PVOID ); typedef BOOL (CALLBACK *PFIND_EXE_FILE_CALLBACKW)( HANDLE, PCWSTR, PVOID ); typedef BOOL (CALLBACK *PENUMDIRTREE_CALLBACK)( PCSTR, PVOID ); typedef BOOL (CALLBACK *PENUMDIRTREE_CALLBACKW)( PCWSTR, PVOID ); /* Address/RVA conversion macro */ #define RVA_TO_ADDR( p1, p2 ) ((PVOID)(((ULONG_PTR)(p1)) + (p2))) /* Image debug information */ typedef struct _IMAGE_DEBUG_INFORMATION { LIST_ENTRY List; DWORD ReservedSize; PVOID ReservedMappedBase; USHORT ReservedMachine; USHORT ReservedCharacteristics; DWORD ReservedCheckSum; DWORD ImageBase; DWORD SizeOfImage; DWORD ReservedNumberOfSections; PIMAGE_SECTION_HEADER ReservedSections; DWORD ReservedExportedNamesSize; PSTR ReservedExportedNames; DWORD ReservedNumberOfFunctionTableEntries; PIMAGE_FUNCTION_ENTRY ReservedFunctionTableEntries; DWORD ReservedLowestFunctionStartingAddress; DWORD ReservedHighestFunctionStartingAddress; DWORD ReservedNumberOfFpoTableEntries; PFPO_DATA ReservedFpoTableEntries; DWORD SizeOfCoffSymbols; PIMAGE_COFF_SYMBOLS_HEADER CoffSymbols; DWORD ReservedSizeOfCodeViewSymbols; PVOID ReservedCodeViewSymbols; PSTR ImageFilePath; PSTR ImageFileName; PSTR ReservedDebugFilePath; DWORD ReservedTimeDateStamp; BOOL ReservedRomImage; PIMAGE_DEBUG_DIRECTORY ReservedDebugDirectory; DWORD ReservedNumberOfDebugDirectories; DWORD ReservedOriginalFunctionTableBaseAddress; DWORD Reserved[2]; } IMAGE_DEBUG_INFORMATION; typedef IMAGE_DEBUG_INFORMATION *PIMAGE_DEBUG_INFORMATION; /* Module load data */ typedef struct _MODLOAD_DATA { DWORD ssize; DWORD ssig; PVOID data; DWORD size; DWORD flags; } MODLOAD_DATA; typedef MODLOAD_DATA *PMODLOAD_DATA; /* Module load CodeView miscellaneous data */ typedef struct _MODLOAD_CVMISC { DWORD oCV; size_t cCV; DWORD oMisc; size_t cMisc; DWORD dtImage; DWORD cImage; } MODLOAD_CVMISC; typedef MODLOAD_CVMISC *PMODLOAD_CVMISC; /* Module load PDB GUID data */ typedef struct _MODLOAD_PDBGUID_PDBAGE { GUID PdbGuid; DWORD PdbAge; } MODLOAD_PDBGUID_PDBAGE; typedef MODLOAD_PDBGUID_PDBAGE *PMODLOAD_PDBGUID_PDBAGE; /* Address modes */ typedef enum { AddrMode1616 = 0, AddrMode1632 = 1, AddrModeReal = 2, AddrModeFlat = 3 } ADDRESS_MODE; /* Address (64-bit version) */ typedef struct _tagADDRESS64 { DWORD64 Offset; WORD Segment; ADDRESS_MODE Mode; } ADDRESS64; typedef ADDRESS64 *LPADDRESS64; /* Address */ #ifdef _IMAGEHLP64 typedef ADDRESS64 ADDRESS; typedef LPADDRESS64 LPADDRESS; #else typedef struct _tagADDRESS { DWORD Offset; WORD Segment; ADDRESS_MODE Mode; } ADDRESS; typedef ADDRESS *LPADDRESS; #endif /* Kernel debugger help (64-bit version) */ typedef struct _KDHELP64 { DWORD64 Thread; DWORD ThCallbackStack; DWORD ThCallbackBStore; DWORD NextCallback; DWORD FramePointer; DWORD64 KiCallUserMode; DWORD64 KeUserCallbackDispatcher; DWORD64 SystemRangeStart; DWORD64 KiUserExceptionDispatcher; DWORD64 StackBase; DWORD64 StackLimit; DWORD64 Reserved[5]; } KDHELP64; typedef KDHELP64 *PKDHELP64; /* Kernel debugger help */ #ifdef _IMAGEHLP64 typedef KDHELP64 KDHELP; typedef PKDHELP64 PKDHELP; #else typedef struct _KDHELP { DWORD Thread; DWORD ThCallbackStack; DWORD NextCallback; DWORD FramePointer; DWORD KiCallUserMode; DWORD KeUserCallbackDispatcher; DWORD SystemRangeStart; DWORD ThCallbackBStore; DWORD KiUserExceptionDispatcher; DWORD StackBase; DWORD StackLimit; DWORD Reserved[5]; } KDHELP; typedef KDHELP *PKDHELP; #endif /* Stack frame (64-bit version) */ typedef struct _tagSTACKFRAME64 { ADDRESS64 AddrPC; ADDRESS64 AddrReturn; ADDRESS64 AddrFrame; ADDRESS64 AddrStack; ADDRESS64 AddrBStore; PVOID FuncTableEntry; DWORD64 Params[4]; BOOL Far; BOOL Virtual; DWORD64 Reserved[3]; KDHELP64 KdHelp; } STACKFRAME64; typedef STACKFRAME64 *LPSTACKFRAME64; /* Stack frame */ #ifdef _IMAGEHLP64 typedef STACKFRAME64 STACKFRAME; typedef LPSTACKFRAME64 LPSTACKFRAME; #else typedef struct _tagSTACKFRAME { ADDRESS AddrPC; ADDRESS AddrReturn; ADDRESS AddrFrame; ADDRESS AddrStack; PVOID FuncTableEntry; DWORD Params[4]; BOOL Far; BOOL Virtual; DWORD Reserved[3]; KDHELP KdHelp; ADDRESS AddrBStore; } STACKFRAME; typedef STACKFRAME *LPSTACKFRAME; #endif /* Stack walking routines (64-bit versions) */ typedef BOOL (__stdcall *PREAD_PROCESS_MEMORY_ROUTINE64)( HANDLE, DWORD64, PVOID, DWORD, LPDWORD ); typedef PVOID (__stdcall *PFUNCTION_TABLE_ACCESS_ROUTINE64)( HANDLE, DWORD64 ); typedef DWORD64 (__stdcall *PGET_MODULE_BASE_ROUTINE64)( HANDLE, DWORD64 ); typedef DWORD64 (__stdcall *PTRANSLATE_ADDRESS_ROUTINE64)( HANDLE, HANDLE, LPADDRESS64 ); #ifdef _IMAGEHLP64 typedef PREAD_PROCESS_MEMORY_ROUTINE64 PREAD_PROCESS_MEMORY_ROUTINE; typedef PFUNCTION_TABLE_ACCESS_ROUTINE64 PFUNCTION_TABLE_ACCESS_ROUTINE; typedef PGET_MODULE_BASE_ROUTINE64 PGET_MODULE_BASE_ROUTINE; typedef PTRANSLATE_ADDRESS_ROUTINE64 PTRANSLATE_ADDRESS_ROUTINE; #else typedef BOOL (__stdcall *PREAD_PROCESS_MEMORY_ROUTINE)( HANDLE, DWORD, PVOID, DWORD, PDWORD ); typedef PVOID (__stdcall *PFUNCTION_TABLE_ACCESS_ROUTINE)( HANDLE, DWORD ); typedef DWORD (__stdcall *PGET_MODULE_BASE_ROUTINE)( HANDLE, DWORD ); typedef DWORD (__stdcall *PTRANSLATE_ADDRESS_ROUTINE)( HANDLE, HANDLE, LPADDRESS ); #endif /* API version */ typedef struct API_VERSION { USHORT MajorVersion; USHORT MinorVersion; USHORT Revision; USHORT Reserved; } API_VERSION; typedef API_VERSION *LPAPI_VERSION; /* Symbol callbacks */ typedef BOOL (CALLBACK *PSYM_ENUMMODULES_CALLBACK64)( PCSTR, DWORD64, PVOID ); typedef BOOL (CALLBACK *PSYM_ENUMMODULES_CALLBACKW64)( PCWSTR, DWORD64, PVOID ); typedef BOOL (CALLBACK *PENUMLOADED_MODULES_CALLBACK64)( PCSTR, DWORD64, ULONG, PVOID ); typedef BOOL (CALLBACK *PENUMLOADED_MODULES_CALLBACKW64)( PCWSTR, DWORD64, ULONG, PVOID ); typedef BOOL (CALLBACK *PSYM_ENUMSYMBOLS_CALLBACK64)( PCSTR, DWORD64, ULONG, PVOID ); typedef BOOL (CALLBACK *PSYM_ENUMSYMBOLS_CALLBACK64W)( PCWSTR, DWORD64, ULONG, PVOID ); typedef BOOL (CALLBACK *PSYMBOL_REGISTERED_CALLBACK64)( HANDLE, ULONG, ULONG64, ULONG64 ); typedef PVOID (CALLBACK *PSYMBOL_FUNCENTRY_CALLBACK64)( HANDLE, ULONG64, ULONG64 ); #ifdef _IMAGEHLP64 typedef PSYM_ENUMMODULES_CALLBACK64 PSYM_ENUMMODULES_CALLBACK; typedef PSYM_ENUMSYMBOLS_CALLBACK64 PSYM_ENUMSYMBOLS_CALLBACK; typedef PSYM_ENUMSYMBOLS_CALLBACK64W PSYM_ENUMSYMBOLS_CALLBACKW; typedef PENUMLOADED_MODULES_CALLBACK64 PENUMLOADED_MODULES_CALLBACK; typedef PSYMBOL_REGISTERED_CALLBACK64 PSYMBOL_REGISTERED_CALLBACK; typedef PSYMBOL_FUNCENTRY_CALLBACK64 PSYMBOL_FUNCENTRY_CALLBACK; #else typedef BOOL (CALLBACK *PSYM_ENUMMODULES_CALLBACK)( PCSTR, ULONG, PVOID ); typedef BOOL (CALLBACK *PSYM_ENUMSYMBOLS_CALLBACK)( PCSTR, ULONG, ULONG, PVOID ); typedef BOOL (CALLBACK *PSYM_ENUMSYMBOLS_CALLBACKW)( PCWSTR, ULONG, ULONG, PVOID ); typedef BOOL (CALLBACK *PENUMLOADED_MODULES_CALLBACK)( PCSTR, ULONG, ULONG, PVOID ); typedef BOOL (CALLBACK *PSYMBOL_REGISTERED_CALLBACK)( HANDLE, ULONG, PVOID, PVOID ); typedef PVOID (CALLBACK *PSYMBOL_FUNCENTRY_CALLBACK)( HANDLE, DWORD, PVOID ); #endif /* Symbol types */ typedef enum { SymNone = 0, SymCoff = 1, SymCv = 2, SymPdb = 3, SymExport = 4, SymDeferred = 5, SymSym = 6, SymDia = 7, SymVirtual = 8, NumSymTypes = 9, } SYM_TYPE; /* Image helper symbol (64-bit version) */ typedef struct _IMAGEHLP_SYMBOL64 { DWORD SizeOfStruct; DWORD64 Address; DWORD Size; DWORD Flags; DWORD MaxNameLength; CHAR Name[1]; } IMAGEHLP_SYMBOL64; typedef IMAGEHLP_SYMBOL64 *PIMAGEHLP_SYMBOL64; /* Image helper symbol package (64-bit version) */ typedef struct _IMAGEHLP_SYMBOL64_PACKAGE { IMAGEHLP_SYMBOL64 sym; CHAR name[MAX_SYM_NAME + 1]; } IMAGEHLP_SYMBOL64_PACKAGE; typedef IMAGEHLP_SYMBOL64_PACKAGE *PIMAGEHLP_SYMBOL64_PACKAGE; /* Unicode image helper symbol (64-bit version) */ typedef struct _IMAGEHLP_SYMBOLW64 { DWORD SizeOfStruct; DWORD64 Address; DWORD Size; DWORD Flags; DWORD MaxNameLength; WCHAR Name[1]; } IMAGEHLP_SYMBOLW64; typedef IMAGEHLP_SYMBOLW64 *PIMAGEHLP_SYMBOLW64; /* Unicode image helper symbol package (64-bit version) */ typedef struct _IMAGEHLP_SYMBOLW64_PACKAGE { IMAGEHLP_SYMBOLW64 sym; WCHAR name[MAX_SYM_NAME + 1]; } IMAGEHLP_SYMBOLW64_PACKAGE; typedef IMAGEHLP_SYMBOLW64_PACKAGE *PIMAGEHLP_SYMBOLW64_PACKAGE; /* Image helper symbol */ #ifdef _IMAGEHLP64 typedef IMAGEHLP_SYMBOL64 IMAGEHLP_SYMBOL; typedef PIMAGEHLP_SYMBOL64 PIMAGEHLP_SYMBOL; #else typedef struct _IMAGEHLP_SYMBOL { DWORD SizeOfStruct; DWORD Address; DWORD Size; DWORD Flags; DWORD MaxNameLength; CHAR Name[1]; } IMAGEHLP_SYMBOL; typedef IMAGEHLP_SYMBOL *PIMAGEHLP_SYMBOL; #endif /* Image helper symbol package */ #ifdef _IMAGEHLP64 typedef IMAGEHLP_SYMBOL64_PACKAGE IMAGEHLP_SYMBOL_PACKAGE; typedef PIMAGEHLP_SYMBOL64_PACKAGE PIMAGEHLP_SYMBOL_PACKAGE; #else typedef struct _IMAGEHLP_SYMBOL_PACKAGE { IMAGEHLP_SYMBOL sym; CHAR name[MAX_SYM_NAME + 1]; } IMAGEHLP_SYMBOL_PACKAGE; typedef IMAGEHLP_SYMBOL_PACKAGE *PIMAGEHLP_SYMBOL_PACKAGE; #endif /* Unicode image helper symbol */ #ifdef _IMAGEHLP64 typedef IMAGEHLP_SYMBOLW64 IMAGEHLP_SYMBOLW; typedef PIMAGEHLP_SYMBOLW64 PIMAGEHLP_SYMBOLW; #else typedef struct _IMAGEHLP_SYMBOLW { DWORD SizeOfStruct; DWORD Address; DWORD Size; DWORD Flags; DWORD MaxNameLength; WCHAR Name[1]; } IMAGEHLP_SYMBOLW; typedef IMAGEHLP_SYMBOLW *PIMAGEHLP_SYMBOLW; #endif /* Unicode image helper symbol package */ #ifdef _IMAGEHLP64 typedef IMAGEHLP_SYMBOLW64_PACKAGE IMAGEHLP_SYMBOLW_PACKAGE; typedef PIMAGEHLP_SYMBOLW64_PACKAGE PIMAGEHLP_SYMBOLW_PACKAGE; #else typedef struct _IMAGEHLP_SYMBOLW_PACKAGE { IMAGEHLP_SYMBOLW sym; WCHAR name[MAX_SYM_NAME + 1]; } IMAGEHLP_SYMBOLW_PACKAGE; typedef IMAGEHLP_SYMBOLW_PACKAGE *PIMAGEHLP_SYMBOLW_PACKAGE; #endif /* Image helper module (64-bit version) */ typedef struct _IMAGEHLP_MODULE64 { DWORD SizeOfStruct; DWORD64 BaseOfImage; DWORD ImageSize; DWORD TimeDateStamp; DWORD CheckSum; DWORD NumSyms; SYM_TYPE SymType; CHAR ModuleName[32]; CHAR ImageName[256]; CHAR LoadedImageName[256]; CHAR LoadedPdbName[256]; DWORD CVSig; CHAR CVData[MAX_PATH * 3]; DWORD PdbSig; GUID PdbSig70; DWORD PdbAge; BOOL PdbUnmatched; BOOL DbgUnmatched; BOOL LineNumbers; BOOL GlobalSymbols; BOOL TypeInfo; BOOL SourceIndexed; BOOL Publics; } IMAGEHLP_MODULE64; typedef IMAGEHLP_MODULE64 *PIMAGEHLP_MODULE64; /* Unicode image helper module (64-bit version) */ typedef struct _IMAGEHLP_MODULEW64 { DWORD SizeOfStruct; DWORD64 BaseOfImage; DWORD ImageSize; DWORD TimeDateStamp; DWORD CheckSum; DWORD NumSyms; SYM_TYPE SymType; WCHAR ModuleName[32]; WCHAR ImageName[256]; WCHAR LoadedImageName[256]; WCHAR LoadedPdbName[256]; DWORD CVSig; WCHAR CVData[MAX_PATH * 3]; DWORD PdbSig; GUID PdbSig70; DWORD PdbAge; BOOL PdbUnmatched; BOOL DbgUnmatched; BOOL LineNumbers; BOOL GlobalSymbols; BOOL TypeInfo; BOOL SourceIndexed; BOOL Publics; } IMAGEHLP_MODULEW64; typedef IMAGEHLP_MODULEW64 *PIMAGEHLP_MODULEW64; /* Image helper module */ #ifdef _IMAGEHLP64 typedef IMAGEHLP_MODULE64 IMAGEHLP_MODULE; typedef PIMAGEHLP_MODULE64 PIMAGEHLP_MODULE; #else typedef struct _IMAGEHLP_MODULE { DWORD SizeOfStruct; DWORD BaseOfImage; DWORD ImageSize; DWORD TimeDateStamp; DWORD CheckSum; DWORD NumSyms; SYM_TYPE SymType; CHAR ModuleName[32]; CHAR ImageName[256]; CHAR LoadedImageName[256]; } IMAGEHLP_MODULE; typedef IMAGEHLP_MODULE *PIMAGEHLP_MODULE; #endif /* Unicode image helper module */ #ifdef _IMAGEHLP64 typedef IMAGEHLP_MODULEW64 IMAGEHLP_MODULEW; typedef PIMAGEHLP_MODULEW64 PIMAGEHLP_MODULEW; #else typedef struct _IMAGEHLP_MODULEW { DWORD SizeOfStruct; DWORD BaseOfImage; DWORD ImageSize; DWORD TimeDateStamp; DWORD CheckSum; DWORD NumSyms; SYM_TYPE SymType; WCHAR ModuleName[32]; WCHAR ImageName[256]; WCHAR LoadedImageName[256]; } IMAGEHLP_MODULEW; typedef IMAGEHLP_MODULEW *PIMAGEHLP_MODULEW; #endif /* Image helper line (64-bit version) */ typedef struct _IMAGEHLP_LINE64 { DWORD SizeOfStruct; PVOID Key; DWORD LineNumber; PCHAR FileName; DWORD64 Address; } IMAGEHLP_LINE64; typedef IMAGEHLP_LINE64 *PIMAGEHLP_LINE64; /* Unicode image helper line (64-bit version) */ typedef struct _IMAGEHLP_LINEW64 { DWORD SizeOfStruct; PVOID Key; DWORD LineNumber; PWSTR FileName; DWORD64 Address; } IMAGEHLP_LINEW64; typedef IMAGEHLP_LINEW64 *PIMAGEHLP_LINEW64; /* Image helper line */ #ifdef _IMAGEHLP64 typedef IMAGEHLP_LINE64 IMAGEHLP_LINE; typedef PIMAGEHLP_LINE64 PIMAGEHLP_LINE; #else typedef struct _IMAGEHLP_LINE { DWORD SizeOfStruct; PVOID Key; DWORD LineNumber; PCHAR FileName; DWORD Address; } IMAGEHLP_LINE; typedef IMAGEHLP_LINE *PIMAGEHLP_LINE; #endif /* Unicode image helper line */ #ifdef _IMAGEHLP64 typedef IMAGEHLP_LINEW64 IMAGEHLP_LINEW; typedef PIMAGEHLP_LINEW64 PIMAGEHLP_LINEW; #else typedef struct _IMAGEHLP_LINEW { DWORD SizeOfStruct; PVOID Key; DWORD LineNumber; PCHAR FileName; DWORD64 Address; } IMAGEHLP_LINEW; typedef IMAGEHLP_LINEW *PIMAGEHLP_LINEW; #endif /* Source file */ typedef struct _SOURCEFILE { DWORD64 ModBase; PCHAR FileName; } SOURCEFILE; typedef SOURCEFILE *PSOURCEFILE; /* Unicode source file */ typedef struct _SOURCEFILEW { DWORD64 ModBase; PWSTR FileName; } SOURCEFILEW; typedef SOURCEFILEW *PSOURCEFILEW; /* CBA_READ_MEMORY parameters */ typedef struct _IMAGEHLP_CBA_READ_MEMORY { DWORD64 addr; PVOID buf; DWORD bytes; DWORD *bytesread; } IMAGEHLP_CBA_READ_MEMORY; typedef IMAGEHLP_CBA_READ_MEMORY *PIMAGEHLP_CBA_READ_MEMORY; /* Severities */ enum { sevInfo = 0, sevProblem = 1, sevAttn = 2, sevFatal = 3, sevMax = 4 }; /* CBA_EVENT parameters */ typedef struct _IMAGEHLP_CBA_EVENT { DWORD severity; DWORD code; PCHAR desc; PVOID object; } IMAGEHLP_CBA_EVENT; typedef IMAGEHLP_CBA_EVENT *PIMAGEHLP_CBA_EVENT; /* Unicode CBA_EVENT parameters */ typedef struct _IMAGEHLP_CBA_EVENTW { DWORD severity; DWORD code; PCWSTR desc; PVOID object; } IMAGEHLP_CBA_EVENTW; typedef IMAGEHLP_CBA_EVENTW *PIMAGEHLP_CBA_EVENTW; /* Image helper deferred symbol load (64-bit version) */ typedef struct _IMAGEHLP_DEFERRED_SYMBOL_LOAD64 { DWORD SizeOfStruct; DWORD64 BaseOfImage; DWORD CheckSum; DWORD TimeDateStamp; CHAR FileName[MAX_PATH]; BOOLEAN Reparse; HANDLE hFile; DWORD Flags; } IMAGEHLP_DEFERRED_SYMBOL_LOAD64; typedef IMAGEHLP_DEFERRED_SYMBOL_LOAD64 *PIMAGEHLP_DEFERRED_SYMBOL_LOAD64; /* Unicode image helper deferred symbol load (64-bit version) */ typedef struct _IMAGEHLP_DEFERRED_SYMBOL_LOADW64 { DWORD SizeOfStruct; DWORD64 BaseOfImage; DWORD CheckSum; DWORD TimeDateStamp; WCHAR FileName[MAX_PATH + 1]; BOOLEAN Reparse; HANDLE hFile; DWORD Flags; } IMAGEHLP_DEFERRED_SYMBOL_LOADW64; typedef IMAGEHLP_DEFERRED_SYMBOL_LOADW64 *PIMAGEHLP_DEFERRED_SYMBOL_LOADW64; /* Image helper deferred symbol load */ #ifdef _IMAGEHLP64 typedef IMAGEHLP_DEFERRED_SYMBOL_LOAD64 IMAGEHLP_DEFERRED_SYMBOL_LOAD; typedef PIMAGEHLP_DEFERRED_SYMBOL_LOAD64 PIMAGEHLP_DEFERRED_SYMBOL_LOAD; #else typedef struct _IMAGEHLP_DEFERRED_SYMBOL_LOAD { DWORD SizeOfStruct; DWORD BaseOfImage; DWORD CheckSum; DWORD TimeDateStamp; CHAR FileName[MAX_PATH]; BOOLEAN Reparse; HANDLE hFile; } IMAGEHLP_DEFERRED_SYMBOL_LOAD; typedef IMAGEHLP_DEFERRED_SYMBOL_LOAD *PIMAGEHLP_DEFERED_SYMBOL_LOAD; #endif /* Image helper duplicate symbol (64-bit version) */ typedef struct _IMAGEHLP_DUPLICATE_SYMBOL64 { DWORD SizeOfStruct; DWORD NumberOfDups; PIMAGEHLP_SYMBOL64 Symbol; DWORD SelectedSymbol; } IMAGEHLP_DUPLICATE_SYMBOL64; typedef IMAGEHLP_DUPLICATE_SYMBOL64 *PIMAGEHLP_DUPLICATE_SYMBOL64; /* Image helper duplicate symbol */ #ifdef _IMAGEHLP64 typedef IMAGEHLP_DUPLICATE_SYMBOL64 IMAGEHLP_DUPLICATE_SYMBOL; typedef PIMAGEHLP_DUPLICATE_SYMBOL64 PIMAGEHLP_DUPLICATE_SYMBOL; #else typedef struct _IMAGEHLP_DUPLICATE_SYMBOL { DWORD SizeOfStruct; DWORD NumberOfDups; PIMAGEHLP_SYMBOL Symbol; DWORD SelectedSymbol; } IMAGEHLP_DUPLICATE_SYMBOL; typedef IMAGEHLP_DUPLICATE_SYMBOL *PIMAGEHLP_DUPLICATE_SYMBOL; #endif /* Home directory types */ enum { hdBase = 0, hdSym = 1, hdSrc = 2, hdMax = 3 }; /* Address map entry */ typedef struct _OMAP { ULONG rva; ULONG rvaTo; } OMAP; typedef OMAP *POMAP; /* Source code information */ typedef struct _SRCCODEINFO { DWORD SizeOfStruct; PVOID Key; DWORD64 ModBase; CHAR Obj[MAX_PATH + 1]; CHAR FileName[MAX_PATH + 1]; DWORD LineNumber; DWORD64 Address; } SRCCODEINFO; typedef SRCCODEINFO *PSRCCODEINFO; /* Unicode source code information */ typedef struct _SRCCODEINFOW { DWORD SizeOfStruct; PVOID Key; DWORD64 ModBase; WCHAR Obj[MAX_PATH + 1]; WCHAR FileName[MAX_PATH + 1]; DWORD LineNumber; DWORD64 Address; } SRCCODEINFOW; typedef SRCCODEINFOW *PSRCCODEINFOW; /* Additional symbol callbacks */ typedef BOOL (CALLBACK *PSYM_ENUMSOURCEFILES_CALLBACK)( PSOURCEFILE, PVOID ); typedef BOOL (CALLBACK *PSYM_ENUMSOURCEFILES_CALLBACKW)( PSOURCEFILEW, PVOID ); typedef BOOL (CALLBACK *PSYM_ENUMLINES_CALLBACK)( PSRCCODEINFO, PVOID ); typedef BOOL (CALLBACK *PSYM_ENUMLINES_CALLBACKW)( PSRCCODEINFOW, PVOID ); typedef BOOL (CALLBACK *PSYM_ENUMPROCESSES_CALLBACK)( HANDLE, PVOID ); typedef BOOL (CALLBACK *PENUMSOURCEFILETOKENSCALLBACK)( PVOID, size_t ); typedef PSYM_ENUMSOURCEFILES_CALLBACK PSYM_ENUMSOURCFILES_CALLBACK; /* Image helper symbol source */ typedef struct _IMAGEHLP_SYMBOL_SRC { DWORD sizeofstruct; DWORD type; char file[MAX_PATH]; } IMAGEHLP_SYMBOL_SRC; typedef IMAGEHLP_SYMBOL_SRC *PIMAGEHLP_SYMBOL_SRC; /* Module type information */ typedef struct _MODULE_TYPE_INFO { USHORT dataLength; USHORT leaf; BYTE data[1]; } MODULE_TYPE_INFO; typedef MODULE_TYPE_INFO *PMODULE_TYPE_INFO; /* Symbol information */ typedef struct _SYMBOL_INFO { ULONG SizeOfStruct; ULONG TypeIndex; ULONG64 Reserved[2]; ULONG Index; ULONG Size; ULONG64 ModBase; ULONG Flags; ULONG64 Value; ULONG64 Address; ULONG Register; ULONG Scope; ULONG Tag; ULONG NameLen; ULONG MaxNameLen; CHAR Name[1]; } SYMBOL_INFO; typedef SYMBOL_INFO *PSYMBOL_INFO; /* Symbol information package */ typedef struct _SYMBOL_INFO_PACKAGE { SYMBOL_INFO si; CHAR name[MAX_SYM_NAME + 1]; } SYMBOL_INFO_PACKAGE; typedef SYMBOL_INFO_PACKAGE *PSYMBOL_INFO_PACKAGE; /* Unicode symbol information */ typedef struct _SYMBOL_INFOW { ULONG SizeOfStruct; ULONG TypeIndex; ULONG64 Reserved[2]; ULONG Index; ULONG Size; ULONG64 ModBase; ULONG Flags; ULONG64 Value; ULONG64 Address; ULONG Register; ULONG Scope; ULONG Tag; ULONG NameLen; ULONG MaxNameLen; WCHAR Name[1]; } SYMBOL_INFOW; typedef SYMBOL_INFOW *PSYMBOL_INFOW; /* Unicode symbol information package */ typedef struct _SYMBOL_INFO_PACKAGEW { SYMBOL_INFOW si; WCHAR name[MAX_SYM_NAME + 1]; } SYMBOL_INFO_PACKAGEW; typedef SYMBOL_INFO_PACKAGEW *PSYMBOL_INFO_PACKAGEW; /* Image helper stack frame */ typedef struct _IMAGEHLP_STACK_FRAME { ULONG64 InstructionOffset; ULONG64 ReturnOffset; ULONG64 FrameOffset; ULONG64 StackOffset; ULONG64 BackingStoreOffset; ULONG64 FuncTableEntry; ULONG64 Params[4]; ULONG64 Reserved[5]; BOOL Virtual; ULONG Reserved2; } IMAGEHLP_STACK_FRAME; typedef IMAGEHLP_STACK_FRAME *PIMAGEHLP_STACK_FRAME; /* Symbol enumeration callback */ typedef BOOL (CALLBACK *PSYM_ENUMERATESYMBOLS_CALLBACK)( PSYMBOL_INFO, ULONG, PVOID ); typedef BOOL (CALLBACK *PSYM_ENUMERATESYMBOLS_CALLBACKW)( PSYMBOL_INFOW, ULONG, PVOID ); /* Image helper symbol type information */ typedef enum _IMAGEHLP_SYMBOL_TYPE_INFO { TI_GET_SYMTAG = 0, TI_GET_SYMNAME = 1, TI_GET_LENGTH = 2, TI_GET_TYPE = 3, TI_GET_TYPEID = 4, TI_GET_BASETYPE = 5, TI_GET_ARRAYINDEXTYPEID = 6, TI_FINDCHILDREN = 7, TI_GET_DATAKIND = 8, TI_GET_ADDRESSOFFSET = 9, TI_GET_OFFSET = 10, TI_GET_VALUE = 11, TI_GET_COUNT = 12, TI_GET_CHILDRENCOUNT = 13, TI_GET_BITPOSITION = 14, TI_GET_VIRTUALBASECLASS = 15, TI_GET_VIRTUALTABLESHAPEID = 16, TI_GET_VIRTUALBASEPOINTEROFFSET = 17, TI_GET_CLASSPARENTID = 18, TI_GET_NESTED = 19, TI_GET_SYMINDEX = 20, TI_GET_LEXICALPARENT = 21, TI_GET_ADDRESS = 22, TI_GET_THISADJUST = 23, TI_GET_UDTKIND = 24, TI_IS_EQUIV_TO = 25, TI_GET_CALLING_CONVENTION = 26, TI_IS_CLOSE_EQUIV_TO = 27, TI_GTIEX_REQS_VALID = 28, TI_GET_VIRTUALBASEOFFSET = 29, TI_GET_VIRTUALBASEDISPINDEX = 30, TI_GET_IS_REFERENCE = 31, TI_GET_INDIRECTVIRTUALBASECLASS = 32, IMAGEHLP_SYMBOL_TYPE_INFO_MAX = 33 } IMAGEHLP_SYMBOL_TYPE_INFO; /* TI_FINDCHILDREN parameters */ typedef struct _TI_FINDCHILDREN_PARAMS { ULONG Count; ULONG Start; ULONG ChildId[1]; } TI_FINDCHILDREN_PARAMS; /* SymGetTypeInfoEx() parameters */ typedef struct _IMAGEHLP_GET_TYPE_INFO_PARAMS { ULONG SizeOfStruct; ULONG Flags; ULONG NumIds; PULONG TypeIds; ULONG64 TagFilter; ULONG NumReqs; IMAGEHLP_SYMBOL_TYPE_INFO *ReqKinds; PULONG_PTR ReqOffsets; PULONG ReqSizes; ULONG_PTR ReqStride; ULONG_PTR BufferSize; PVOID Buffer; ULONG EntriesMatched; ULONG EntriesFilled; ULONG64 TagsFound; ULONG64 AllReqsValid; ULONG NumReqsValid; PULONG64 ReqsValid; } IMAGEHLP_GET_TYPE_INFO_PARAMS; typedef IMAGEHLP_GET_TYPE_INFO_PARAMS *PIMAGEHLP_GET_TYPE_INFO_PARAMS; /* Symbol server index information */ typedef struct { DWORD sizeofstruct; char file[MAX_PATH + 1]; BOOL stripped; DWORD timestamp; DWORD size; char dbgfile[MAX_PATH + 1]; char pdbfile[MAX_PATH + 1]; GUID guid; DWORD sig; DWORD age; } SYMSRV_INDEX_INFO; typedef SYMSRV_INDEX_INFO *PSYMSRV_INDEX_INFO; /* Unicode symbol server index information */ typedef struct { DWORD sizeofstruct; WCHAR file[MAX_PATH + 1]; BOOL stripped; DWORD timestamp; DWORD size; WCHAR dbgfile[MAX_PATH + 1]; WCHAR pdbfile[MAX_PATH + 1]; GUID guid; DWORD sig; DWORD age; } SYMSRV_INDEX_INFOW; typedef SYMSRV_INDEX_INFOW *PSYMSRV_INDEX_INFOW; /* SymGetSymbolFile() types */ enum { sfImage = 0, sfDbg = 1, sfPdb = 2, sfMpd = 3, sfMax = 4 }; /* User dump callbacks */ typedef BOOL (WINAPI *PDBGHELP_CREATE_USER_DUMP_CALLBACK)( DWORD, PVOID *, LPDWORD, PVOID ); /* Symbol server procedures */ typedef BOOL (WINAPI *PSYMBOLSERVERPROC)( PCSTR, PCSTR, PVOID, DWORD, DWORD, PSTR ); typedef BOOL (WINAPI *PSYMBOLSERVERPROCA)( PCSTR, PCSTR, PVOID, DWORD, DWORD, PSTR ); typedef BOOL (WINAPI *PSYMBOLSERVERPROCW)( PCWSTR, PCWSTR, PVOID, DWORD, DWORD, PWSTR ); typedef BOOL (WINAPI *PSYMBOLSERVERBYINDEXPROC)( PCSTR, PCSTR, PCSTR, PSTR ); typedef BOOL (WINAPI *PSYMBOLSERVERBYINDEXPROCA)( PCSTR, PCSTR, PCSTR, PSTR ); typedef BOOL (WINAPI *PSYMBOLSERVERBYINDEXPROCW)( PCWSTR, PCWSTR, PCWSTR, PWSTR ); typedef BOOL (WINAPI *PSYMBOLSERVEROPENPROC)( VOID ); typedef BOOL (WINAPI *PSYMBOLSERVERCLOSEPROC)( VOID ); typedef BOOL (WINAPI *PSYMBOLSERVERSETOPTIONSPROC)( UINT_PTR, ULONG64 ); typedef BOOL (WINAPI *PSYMBOLSERVERSETOPTIONSWPROC)( UINT_PTR, ULONG64 ); typedef BOOL (WINAPI *PSYMBOLSERVERCALLBACKPROC)( UINT_PTR, ULONG64, ULONG64 ); typedef UINT_PTR (WINAPI *PSYMBOLSERVERGETOPTIONSPROC)(); typedef BOOL (WINAPI *PSYMBOLSERVERPINGPROC)( PCSTR ); typedef BOOL (WINAPI *PSYMBOLSERVERPINGPROCA)( PCSTR ); typedef BOOL (WINAPI *PSYMBOLSERVERPINGPROCW)( PCWSTR ); typedef BOOL (WINAPI *PSYMBOLSERVERGETVERSION)( LPAPI_VERSION ); typedef BOOL (WINAPI *PSYMBOLSERVERDELTANAME)( PCSTR, PVOID, DWORD, DWORD, PVOID, DWORD, DWORD, PSTR, size_t ); typedef BOOL (WINAPI *PSYMBOLSERVERDELTANAMEW)( PCWSTR, PVOID, DWORD, DWORD, PVOID, DWORD, DWORD, PWSTR, size_t ); typedef BOOL (WINAPI *PSYMBOLSERVERGETSUPPLEMENT)( PCSTR, PCSTR, PCSTR, PSTR, size_t ); typedef BOOL (WINAPI *PSYMBOLSERVERGETSUPPLEMENTW)( PCWSTR, PCWSTR, PCWSTR, PWSTR, size_t ); typedef BOOL (WINAPI *PSYMBOLSERVERSTORESUPPLEMENT)( PCSTR, PCSTR, PCSTR, PSTR, size_t, DWORD ); typedef BOOL (WINAPI *PSYMBOLSERVERSTORESUPPLEMENTW)( PCWSTR, PCWSTR, PCWSTR, PWSTR, size_t, DWORD ); typedef BOOL (WINAPI *PSYMBOLSERVERGETINDEXSTRING)( PVOID, DWORD, DWORD, PSTR, size_t ); typedef BOOL (WINAPI *PSYMBOLSERVERGETINDEXSTRINGW)( PVOID, DWORD, DWORD, PWSTR, size_t ); typedef BOOL (WINAPI *PSYMBOLSERVERSTOREFILE)( PCSTR, PCSTR, PVOID, DWORD, DWORD, PSTR, size_t, DWORD ); typedef BOOL (WINAPI *PSYMBOLSERVERSTOREFILEW)( PCWSTR, PCWSTR, PVOID, DWORD, DWORD, PWSTR, size_t, DWORD ); typedef BOOL (WINAPI *PSYMBOLSERVERISSTORE)( PCSTR ); typedef BOOL (WINAPI *PSYMBOLSERVERISSTOREW)( PCWSTR ); typedef DWORD (WINAPI *PSYMBOLSERVERVERSION)(); typedef BOOL (WINAPI *PSYMBOLSERVERMESSAGEPROC)( UINT_PTR, ULONG64, ULONG64 ); /* Minidump location descriptor */ typedef struct _MINIDUMP_LOCATION_DESCRIPTOR { ULONG32 DataSize; RVA Rva; } MINIDUMP_LOCATION_DESCRIPTOR; /* Minidump location descriptor (64-bit version) */ typedef struct _MINIDUMP_LOCATION_DESCRIPTOR64 { ULONG64 DataSize; RVA64 Rva; } MINIDUMP_LOCATION_DESCRIPTOR64; /* Minidump memory descriptor */ typedef struct _MINIDUMP_MEMORY_DESCRIPTOR { ULONG64 StartOfMemoryRange; MINIDUMP_LOCATION_DESCRIPTOR Memory; } MINIDUMP_MEMORY_DESCRIPTOR; typedef MINIDUMP_MEMORY_DESCRIPTOR *PMINIDUMP_MEMORY_DESCRIPTOR; /* Minidump memory descriptor (64-bit version) */ typedef struct _MINIDUMP_MEMORY_DESCRIPTOR64 { ULONG64 StartOfMemoryRange; ULONG64 DataSize; } MINIDUMP_MEMORY_DESCRIPTOR64; typedef MINIDUMP_MEMORY_DESCRIPTOR64 *PMINIDUMP_MEMORY_DESCRIPTOR64; /* Minidump header */ typedef struct _MINIDUMP_HEADER { ULONG32 Signature; ULONG32 Version; ULONG32 NumberOfStreams; RVA StreamDirectoryRva; ULONG32 CheckSum; union { ULONG32 Reserved; ULONG32 TimeDateStamp; }; ULONG64 Flags; } MINIDUMP_HEADER; typedef MINIDUMP_HEADER *PMINIDUMP_HEADER; /* Minidump directory */ typedef struct _MINIDUMP_DIRECTORY { ULONG32 StreamType; MINIDUMP_LOCATION_DESCRIPTOR Location; } MINIDUMP_DIRECTORY; typedef MINIDUMP_DIRECTORY *PMINIDUMP_DIRECTORY; /* Minidump string */ typedef struct _MINIDUMP_STRING { ULONG32 Length; WCHAR Buffer[1]; } MINIDUMP_STRING; typedef MINIDUMP_STRING *PMINIDUMP_STRING; /* Minidump stream types */ typedef enum _MINIDUMP_STREAM_TYPE { UnusedStream = 0, ThreadListStream = 3, ModuleListStream = 4, MemoryListStream = 5, ExceptionStream = 6, SystemInfoStream = 7, ThreadExListStream = 8, Memory64ListStream = 9, CommentStreamA = 10, CommentStreamW = 11, HandleDataStream = 12, FunctionTableStream = 13, UnloadedModuleListStream = 14, MiscInfoStream = 15, MemoryInfoListStream = 16, ThreadInfoListStream = 17, HandleOperationListStream = 18, TokenStream = 19, ceStreamNull = 0x8000, ceStreamSystemInfo = 0x8001, ceStreamException = 0x8002, ceStreamModuleList = 0x8003, ceStreamProcessList = 0x8004, ceStreamThreadList = 0x8005, ceStreamThreadContextList = 0x8006, ceStreamThreadCallStackList = 0x8007, ceStreamMemoryVirtualList = 0x8008, ceStreamMemoryPhysicalList = 0x8009, ceStreamBucketParameters = 0x800A, ceStreamProcessModuleMap = 0x800B, ceStreamDiagnosisList = 0x800C, LastReservedStream = 0xFFFF } MINIDUMP_STREAM_TYPE; /* CPU information */ typedef union _CPU_INFORMATION { struct { ULONG32 VendorId[3]; ULONG32 VersionInformation; ULONG32 FeatureInformation; ULONG32 AMDExtendedCpuFeatures; } X86CpuInfo; struct { ULONG64 ProcessorFeatures[2]; } OtherCpuInfo; } CPU_INFORMATION; typedef CPU_INFORMATION *PCPU_INFORMATION; /* Minidump system information */ typedef struct _MINIDUMP_SYSTEM_INFO { USHORT ProcessorArchitecture; USHORT ProcessorLevel; USHORT ProcessorRevision; union { USHORT Reserved0; struct { UCHAR NumberOfProcessors; UCHAR ProductType; }; }; ULONG32 MajorVersion; ULONG32 MinorVersion; ULONG32 BuildNumber; ULONG32 PlatformId; RVA CSDVersionRva; union { ULONG32 Reserved1; struct { USHORT SuiteMask; USHORT Reserved2; }; }; CPU_INFORMATION Cpu; } MINIDUMP_SYSTEM_INFO; typedef MINIDUMP_SYSTEM_INFO *PMINIDUMP_SYSTEM_INFO; /* Minidump thread */ typedef struct _MINIDUMP_THREAD { ULONG32 ThreadId; ULONG32 SuspendCount; ULONG32 PriorityClass; ULONG32 Priority; ULONG64 Teb; MINIDUMP_MEMORY_DESCRIPTOR Stack; MINIDUMP_LOCATION_DESCRIPTOR ThreadContext; } MINIDUMP_THREAD; typedef MINIDUMP_THREAD *PMINIDUMP_THREAD; /* Minidump thread list */ typedef struct _MINIDUMP_THREAD_LIST { ULONG32 NumberOfThreads; MINIDUMP_THREAD Threads[1]; } MINIDUMP_THREAD_LIST; typedef MINIDUMP_THREAD_LIST *PMINIDUMP_THREAD_LIST; /* Minidump thread (extended version) */ typedef struct _MINIDUMP_THREAD_EX { ULONG32 ThreadId; ULONG32 SuspendCount; ULONG32 PriorityClass; ULONG32 Priority; ULONG64 Teb; MINIDUMP_MEMORY_DESCRIPTOR Stack; MINIDUMP_LOCATION_DESCRIPTOR ThreadContext; MINIDUMP_MEMORY_DESCRIPTOR BackingStore; } MINIDUMP_THREAD_EX; typedef MINIDUMP_THREAD_EX *PMINIDUMP_THREAD_EX; /* Minidump thread list (extended version) */ typedef struct _MINIDUMP_THREAD_EX_LIST { ULONG32 NumberOfThreads; MINIDUMP_THREAD_EX Threads[1]; } MINIDUMP_THREAD_EX_LIST; typedef MINIDUMP_THREAD_EX_LIST *PMINIDUMP_THREAD_EX_LIST; /* Minidump exception */ typedef struct _MINIDUMP_EXCEPTION { ULONG32 ExceptionCode; ULONG32 ExceptionFlags; ULONG64 ExceptionRecord; ULONG64 ExceptionAddress; ULONG32 NumberParameters; ULONG32 __unusedAlignment; ULONG64 ExceptionInformation[EXCEPTION_MAXIMUM_PARAMETERS]; } MINIDUMP_EXCEPTION; typedef MINIDUMP_EXCEPTION *PMINIDUMP_EXCEPTION; /* Minidump exception stream */ typedef struct _MINIDUMP_EXCEPTION_STREAM { ULONG32 ThreadId; ULONG32 __alignment; MINIDUMP_EXCEPTION ExceptionRecord; MINIDUMP_LOCATION_DESCRIPTOR ThreadContext; } MINIDUMP_EXCEPTION_STREAM; typedef MINIDUMP_EXCEPTION_STREAM *PMINIDUMP_EXCEPTION_STREAM; /* Minidump module */ typedef struct _MINIDUMP_MODULE { ULONG64 BaseOfImage; ULONG32 SizeOfImage; ULONG32 CheckSum; ULONG32 TimeDateStamp; RVA ModuleNameRva; VS_FIXEDFILEINFO VersionInfo; MINIDUMP_LOCATION_DESCRIPTOR CvRecord; MINIDUMP_LOCATION_DESCRIPTOR MiscRecord; ULONG64 Reserved0; ULONG64 Reserved1; } MINIDUMP_MODULE; typedef MINIDUMP_MODULE *PMINIDUMP_MODULE; /* Minidump module list */ typedef struct _MINIDUMP_MODULE_LIST { ULONG32 NumberOfModules; MINIDUMP_MODULE Modules[1]; } MINIDUMP_MODULE_LIST; typedef MINIDUMP_MODULE_LIST *PMINIDUMP_MODULE_LIST; /* Minidump memory list */ typedef struct _MINIDUMP_MEMORY_LIST { ULONG32 NumberOfMemoryRanges; MINIDUMP_MEMORY_DESCRIPTOR MemoryRanges[1]; } MINIDUMP_MEMORY_LIST; typedef MINIDUMP_MEMORY_LIST *PMINIDUMP_MEMORY_LIST; /* Minidump memory list (64-bit version) */ typedef struct _MINIDUMP_MEMORY64_LIST { ULONG64 NumberOfMemoryRanges; RVA64 BaseRva; MINIDUMP_MEMORY_DESCRIPTOR64 MemoryRanges[1]; } MINIDUMP_MEMORY64_LIST; typedef MINIDUMP_MEMORY64_LIST *PMINIDUMP_MEMORY64_LIST; /* Minidump exception information */ typedef struct _MINIDUMP_EXCEPTION_INFORMATION { DWORD ThreadId; PEXCEPTION_POINTERS ExceptionPointers; BOOL ClientPointers; } MINIDUMP_EXCEPTION_INFORMATION; typedef MINIDUMP_EXCEPTION_INFORMATION *PMINIDUMP_EXCEPTION_INFORMATION; /* Minidump exception information (64-bit version) */ typedef struct _MINIDUMP_EXCEPTION_INFORMATION64 { DWORD ThreadId; ULONG64 ExceptionRecord; ULONG64 ContextRecord; BOOL ClientPointers; } MINIDUMP_EXCEPTION_INFORMATION64; typedef MINIDUMP_EXCEPTION_INFORMATION64 *PMINIDUMP_EXCEPTION_INFORMATION64; /* Minidump handle object information types */ typedef enum _MINIDUMP_HANDLE_OBJECT_INFORMATION_TYPE { MiniHandleObjectInformationNone = 0, MiniThreadInformation1 = 1, MiniMutantInformation1 = 2, MiniMutantInformation2 = 3, MiniProcessInformation1 = 4, MiniProcessInformation2 = 5, MiniHandleObjectInformationTypeMax = 6 } MINIDUMP_HANDLE_OBJECT_INFORMATION_TYPE; /* Minidump handle object information */ typedef struct _MINIDUMP_HANDLE_OBJECT_INFORMATION { RVA NextInfoRva; ULONG32 InfoType; ULONG32 SizeOfInfo; } MINIDUMP_HANDLE_OBJECT_INFORMATION; /* Minidump handle descriptor */ typedef struct _MINIDUMP_HANDLE_DESCRIPTOR { ULONG64 Handle; RVA TypeNameRva; RVA ObjectNameRva; ULONG32 Attributes; ULONG32 GrantedAccess; ULONG32 HandleCount; ULONG32 PointerCount; } MINIDUMP_HANDLE_DESCRIPTOR; typedef MINIDUMP_HANDLE_DESCRIPTOR *PMINIDUMP_HANDLE_DESCRIPTOR; /* Minidump handle descriptor (version 2) */ typedef struct _MINIDUMP_HANDLE_DESCRIPTOR_2 { ULONG64 Handle; RVA TypeNameRva; RVA ObjectNameRva; ULONG32 Attributes; ULONG32 GrantedAccess; ULONG32 HandleCount; ULONG32 PointerCount; RVA ObjectInfoRva; ULONG32 Reserved0; } MINIDUMP_HANDLE_DESCRIPTOR_2; typedef MINIDUMP_HANDLE_DESCRIPTOR_2 *PMINIDUMP_HANDLE_DESCRIPTOR_2; typedef MINIDUMP_HANDLE_DESCRIPTOR_2 MINIDUMP_HANDLE_DESCRIPTOR_N; typedef MINIDUMP_HANDLE_DESCRIPTOR_N *PMINIDUMP_HANDLE_DESCRIPTOR_N; /* Minidump handle data stream */ typedef struct _MINIDUMP_HANDLE_DATA_STREAM { ULONG32 SizeOfHeader; ULONG32 SizeOfDescriptor; ULONG32 NumberOfDescriptors; ULONG32 Reserved; } MINIDUMP_HANDLE_DATA_STREAM; typedef MINIDUMP_HANDLE_DATA_STREAM *PMINIDUMP_HANDLE_DATA_STREAM; /* Minidump handle operation list */ typedef struct _MINIDUMP_HANDLE_OPERATION_LIST { ULONG32 SizeOfHeader; ULONG32 SizeOfEntry; ULONG32 NumberOfEntries; ULONG32 Reserved; } MINIDUMP_HANDLE_OPERATION_LIST; typedef MINIDUMP_HANDLE_OPERATION_LIST *PMINIDUMP_HANDLE_OPERATION_LIST; /* Minidump function table descriptor */ typedef struct _MINIDUMP_FUNCTION_TABLE_DESCRIPTOR { ULONG64 MinimumAddress; ULONG64 MaximumAddress; ULONG64 BaseAddress; ULONG32 EntryCount; ULONG32 SizeOfAlignPad; } MINIDUMP_FUNCTION_TABLE_DESCRIPTOR; typedef MINIDUMP_FUNCTION_TABLE_DESCRIPTOR *PMINIDUMP_FUNCTION_TABLE_DESCRIPTOR; /* Minidump function table stream */ typedef struct _MINIDUMP_FUNCTION_TABLE_STREAM { ULONG32 SizeOfHeader; ULONG32 SizeOfDescriptor; ULONG32 SizeOfNativeDescriptor; ULONG32 SizeOfFunctionEntry; ULONG32 NumberOfDescriptors; ULONG32 SizeOfAlignPad; } MINIDUMP_FUNCTION_TABLE_STREAM; typedef MINIDUMP_FUNCTION_TABLE_STREAM *PMINIDUMP_FUNCTION_TABLE_STREAM; /* Minidump unloaded module */ typedef struct _MINIDUMP_UNLOADED_MODULE { ULONG64 BaseOfImage; ULONG32 SizeOfImage; ULONG32 CheckSum; ULONG32 TimeDateStamp; RVA ModuleNameRva; } MINIDUMP_UNLOADED_MODULE; typedef MINIDUMP_UNLOADED_MODULE *PMINIDUMP_UNLOADED_MODULE; /* Minidump unloaded module list */ typedef struct _MINIDUMP_UNLOADED_MODULE_LIST { ULONG32 SizeOfHeader; ULONG32 SizeOfEntry; ULONG32 NumberOfEntries; } MINIDUMP_UNLOADED_MODULE_LIST; typedef MINIDUMP_UNLOADED_MODULE_LIST *PMINIDUMP_UNLOADED_MODULE_LIST; /* Minidump miscellaneous information */ typedef struct _MINIDUMP_MISC_INFO { ULONG32 SizeOfInfo; ULONG32 Flags1; ULONG32 ProcessId; ULONG32 ProcessCreateTime; ULONG32 ProcessUserTime; ULONG32 ProcessKernelTime; } MINIDUMP_MISC_INFO; typedef MINIDUMP_MISC_INFO *PMINIDUMP_MISC_INFO; /* Minidump miscellaneous information (version 2) */ typedef struct _MINIDUMP_MISC_INFO_2 { ULONG32 SizeOfInfo; ULONG32 Flags1; ULONG32 ProcessId; ULONG32 ProcessCreateTime; ULONG32 ProcessUserTime; ULONG32 ProcessKernelTime; ULONG32 ProcessorMaxMhz; ULONG32 ProcessorCurrentMhz; ULONG32 ProcessorMhzLimit; ULONG32 ProcessorMaxIdleState; ULONG32 ProcessorCurrentIdleState; } MINIDUMP_MISC_INFO_2; typedef MINIDUMP_MISC_INFO_2 *PMINIDUMP_MISC_INFO_2; /* Minidump miscellaneous information (version 3) */ typedef struct _MINIDUMP_MISC_INFO_3 { ULONG32 SizeOfInfo; ULONG32 Flags1; ULONG32 ProcessId; ULONG32 ProcessCreateTime; ULONG32 ProcessUserTime; ULONG32 ProcessKernelTime; ULONG32 ProcessorMaxMhz; ULONG32 ProcessorCurrentMhz; ULONG32 ProcessorMhzLimit; ULONG32 ProcessorMaxIdleState; ULONG32 ProcessorCurrentIdleState; ULONG32 ProcessIntegrityLevel; ULONG32 ProcessExecuteFlags; ULONG32 ProtectedProcess; ULONG32 TimeZoneId; TIME_ZONE_INFORMATION TimeZone; } MINIDUMP_MISC_INFO_3; typedef MINIDUMP_MISC_INFO_3 *PMINIDUMP_MISC_INFO_3; typedef MINIDUMP_MISC_INFO_3 MINIDUMP_MISC_INFO_N; typedef MINIDUMP_MISC_INFO_N *PMINIDUMP_MISC_INFO_N; /* Minidump memory information */ typedef struct _MINIDUMP_MEMORY_INFO { ULONG64 BaseAddress; ULONG64 AllocationBase; ULONG32 AllocationProtect; ULONG32 __alignment1; ULONG64 RegionSize; ULONG32 State; ULONG32 Protect; ULONG32 Type; ULONG32 __alignment2; } MINIDUMP_MEMORY_INFO; typedef MINIDUMP_MEMORY_INFO *PMINIDUMP_MEMORY_INFO; /* Minidump memory information list */ typedef struct _MINIDUMP_MEMORY_INFO_LIST { ULONG SizeOfHeader; ULONG SizeOfEntry; ULONG64 NumberOfEntries; } MINIDUMP_MEMORY_INFO_LIST; typedef MINIDUMP_MEMORY_INFO_LIST *PMINIDUMP_MEMORY_INFO_LIST; /* Minidump thread information */ typedef struct _MINIDUMP_THREAD_INFO { ULONG32 ThreadId; ULONG32 DumpFlags; ULONG32 DumpError; ULONG32 ExitStatus; ULONG64 CreateTime; ULONG64 ExitTime; ULONG64 KernelTime; ULONG64 UserTime; ULONG64 StartAddress; ULONG64 Affinity; } MINIDUMP_THREAD_INFO; typedef MINIDUMP_THREAD_INFO *PMINIDUMP_THREAD_INFO; /* Minidump thread information list */ typedef struct _MINIDUMP_THREAD_INFO_LIST { ULONG SizeOfHeader; ULONG SizeOfEntry; ULONG NumberOfEntries; } MINIDUMP_THREAD_INFO_LIST; typedef MINIDUMP_THREAD_INFO_LIST *PMINIDUMP_THREAD_INFO_LIST; /* Minidump token information header */ typedef struct _MINIDUMP_TOKEN_INFO_HEADER { ULONG TokenSize; ULONG TokenId; ULONG64 TokenHandle; } MINIDUMP_TOKEN_INFO_HEADER; typedef MINIDUMP_TOKEN_INFO_HEADER *PMINIDUMP_TOKEN_INFO_HEADER; /* Minidump token information list */ typedef struct _MINIDUMP_TOKEN_INFO_LIST { ULONG TokenListSize; ULONG TokenListEntries; ULONG ListHeaderSize; ULONG ElementHeaderSize; } MINIDUMP_TOKEN_INFO_LIST; typedef MINIDUMP_TOKEN_INFO_LIST *PMINIDUMP_TOKEN_INFO_LIST; /* Minidump user record */ typedef struct _MINIDUMP_USER_RECORD { ULONG32 Type; MINIDUMP_LOCATION_DESCRIPTOR Memory; } MINIDUMP_USER_RECORD; typedef MINIDUMP_USER_RECORD *PMINIDUMP_USER_RECORD; /* Minidump user stream */ typedef struct _MINIDUMP_USER_STREAM { ULONG32 Type; ULONG BufferSize; PVOID Buffer; } MINIDUMP_USER_STREAM; typedef MINIDUMP_USER_STREAM *PMINIDUMP_USER_STREAM; /* Minidump user stream information */ typedef struct _MINIDUMP_USER_STREAM_INFORMATION { ULONG UserStreamCount; PMINIDUMP_USER_STREAM UserStreamArray; } MINIDUMP_USER_STREAM_INFORMATION; typedef MINIDUMP_USER_STREAM_INFORMATION *PMINIDUMP_USER_STREAM_INFORMATION; /* Minidump callback types */ typedef enum _MINIDUMP_CALLBACK_TYPE { ModuleCallback = 0, ThreadCallback = 1, ThreadExCallback = 2, IncludeThreadCallback = 3, IncludeModuleCallback = 4, MemoryCallback = 5, CancelCallback = 6, WriteKernelMinidumpCallback = 7, KernelMinidumpStatusCallback = 8, RemoveMemoryCallback = 9, IncludeVmRegionCallback = 10, IoStartCallback = 11, IoWriteAllCallback = 12, IoFinishCallback = 13, ReadMemoryFailureCallback = 14, SecondaryFlagsCallback = 15, } MINIDUMP_CALLBACK_TYPE; /* Minidump thread callback */ typedef struct _MINIDUMP_THREAD_CALLBACK { ULONG ThreadId; HANDLE ThreadHandle; CONTEXT Context; ULONG SizeOfContext; ULONG64 StackBase; ULONG64 StackEnd; } MINIDUMP_THREAD_CALLBACK; typedef MINIDUMP_THREAD_CALLBACK *PMINIDUMP_THREAD_CALLBACK; /* Minidump thread callback (extended version) */ typedef struct _MINIDUMP_THREAD_EX_CALLBACK { ULONG ThreadId; HANDLE ThreadHandle; CONTEXT Context; ULONG SizeOfContext; ULONG64 StackBase; ULONG64 StackEnd; ULONG64 BackingStoreBase; ULONG64 BackingStoreEnd; } MINIDUMP_THREAD_EX_CALLBACK; typedef MINIDUMP_THREAD_EX_CALLBACK *PMINIDUMP_THREAD_EX_CALLBACK; /* Minidump include thread callback */ typedef struct _MINIDUMP_INCLUDE_THREAD_CALLBACK { ULONG ThreadId; } MINIDUMP_INCLUDE_THREAD_CALLBACK; typedef MINIDUMP_INCLUDE_THREAD_CALLBACK *PMINIDUMP_INCLUDE_THREAD_CALLBACK; /* Thread write flags */ typedef enum _THREAD_WRITE_FLAGS { ThreadWriteThread = 0x0001, ThreadWriteStack = 0x0002, ThreadWriteContext = 0x0004, ThreadWriteBackingStore = 0x0008, ThreadWriteInstructionWindow = 0x0010, ThreadWriteThreadData = 0x0020, ThreadWriteThreadInfo = 0x0040 } THREAD_WRITE_FLAGS; /* Minidump module callback */ typedef struct _MINIDUMP_MODULE_CALLBACK { PWCHAR FullPath; ULONG64 BaseOfImage; ULONG SizeOfImage; ULONG CheckSum; ULONG TimeDateStamp; VS_FIXEDFILEINFO VersionInfo; PVOID CvRecord; ULONG SizeOfCvRecord; PVOID MiscRecord; ULONG SizeOfMiscRecord; } MINIDUMP_MODULE_CALLBACK; typedef MINIDUMP_MODULE_CALLBACK *PMINIDUMP_MODULE_CALLBACK; /* Minidump include module callback */ typedef struct _MINIDUMP_INCLUDE_MODULE_CALLBACK { ULONG64 BaseOfImage; } MINIDUMP_INCLUDE_MODULE_CALLBACK; typedef MINIDUMP_INCLUDE_MODULE_CALLBACK *PMINIDUMP_INCLUDE_MODULE_CALLBACK; /* Module write flags */ typedef enum _MODULE_WRITE_FLAGS { ModuleWriteModule = 0x0001, ModuleWriteDataSeg = 0x0002, ModuleWriteMiscRecord = 0x0004, ModuleWriteCvRecord = 0x0008, ModuleReferencedByMemory = 0x0010, ModuleWriteTlsData = 0x0020, ModuleWriteCodeSegs = 0x0040 } MODULE_WRITE_FLAGS; /* Minidump I/O callback */ typedef struct _MINIDUMP_IO_CALLBACK { HANDLE Handle; ULONG64 Offset; PVOID Buffer; ULONG BufferBytes; } MINIDUMP_IO_CALLBACK; typedef MINIDUMP_IO_CALLBACK *PMINIDUMP_IO_CALLBACK; /* Minidump read memory failure callback */ typedef struct _MINIDUMP_READ_MEMORY_FAILURE_CALLBACK { ULONG64 Offset; ULONG Bytes; HRESULT FailureStatus; } MINIDUMP_READ_MEMORY_FAILURE_CALLBACK; typedef MINIDUMP_READ_MEMORY_FAILURE_CALLBACK *PMINIDUMP_READ_MEMORY_FAILURE_CALLBACK; /* Minidump callback input */ typedef struct _MINIDUMP_CALLBACK_INPUT { ULONG ProcessId; HANDLE ProcessHandle; ULONG CallbackType; union { HRESULT Status; MINIDUMP_THREAD_CALLBACK Thread; MINIDUMP_THREAD_EX_CALLBACK ThreadEx; MINIDUMP_MODULE_CALLBACK Module; MINIDUMP_INCLUDE_THREAD_CALLBACK IncludeThread; MINIDUMP_INCLUDE_MODULE_CALLBACK IncludeModule; MINIDUMP_IO_CALLBACK Io; MINIDUMP_READ_MEMORY_FAILURE_CALLBACK ReadMemoryFailure; ULONG SecondaryFlags; }; } MINIDUMP_CALLBACK_INPUT; typedef MINIDUMP_CALLBACK_INPUT *PMINIDUMP_CALLBACK_INPUT; /* Minidump callback output */ typedef struct _MINIDUMP_CALLBACK_OUTPUT { union { ULONG ModuleWriteFlags; ULONG ThreadWriteFlags; ULONG SecondaryFlags; struct { ULONG64 MemoryBase; ULONG MemorySize; }; struct { BOOL CheckCancel; BOOL Cancel; }; HANDLE Handle; struct { MINIDUMP_MEMORY_INFO VmRegion; BOOL Continue; }; HRESULT Status; }; } MINIDUMP_CALLBACK_OUTPUT; typedef MINIDUMP_CALLBACK_OUTPUT *PMINIDUMP_CALLBACK_OUTPUT; /* Minidump types */ typedef enum _MINIDUMP_TYPE { MiniDumpNormal = 0x00000000, MiniDumpWithDataSegs = 0x00000001, MiniDumpWithFullMemory = 0x00000002, MiniDumpWithHandleData = 0x00000004, MiniDumpFilterMemory = 0x00000008, MiniDumpScanMemory = 0x00000010, MiniDumpWithUnloadedModules = 0x00000020, MiniDumpWithIndirectlyReferencedMemory = 0x00000040, MiniDumpFilterModulePaths = 0x00000080, MiniDumpWithProcessThreadData = 0x00000100, MiniDumpWithPrivateReadWriteMemory = 0x00000200, MiniDumpWithoutOptionalData = 0x00000400, MiniDumpWithFullMemoryInfo = 0x00000800, MiniDumpWithThreadInfo = 0x00001000, MiniDumpWithCodeSegs = 0x00002000, MiniDumpWithoutAuxiliaryState = 0x00004000, MiniDumpWithFullAuxiliaryState = 0x00008000, MiniDumpWithPrivateWriteCopyMemory = 0x00010000, MiniDumpIgnoreInaccessibleMemory = 0x00020000, MiniDumpWithTokenInformation = 0x00040000, MiniDumpValidTypeFlags = 0x0007FFFF } MINIDUMP_TYPE; /* Minidump secondary flags */ typedef enum _MINIDUMP_SECONDARY_FLAGS { MiniSecondaryWithoutPowerInfo = 0x00000001, MiniSecondaryValidFlags = 0x00000001 } MINIDUMP_SECONDARY_FLAGS; /* Minidump callback routine */ typedef BOOL (WINAPI *MINIDUMP_CALLBACK_ROUTINE)( PVOID, PMINIDUMP_CALLBACK_INPUT, PMINIDUMP_CALLBACK_OUTPUT ); /* Minidump callback information */ typedef struct _MINIDUMP_CALLBACK_INFORMATION { MINIDUMP_CALLBACK_ROUTINE CallbackRoutine; PVOID CallbackParam; } MINIDUMP_CALLBACK_INFORMATION; typedef MINIDUMP_CALLBACK_INFORMATION *PMINIDUMP_CALLBACK_INFORMATION; /* Functions in IMAGEHLP.DLL and DBGHELP.DLL */ BOOL IMAGEAPI BindImage( PCSTR, PCSTR, PCSTR ); BOOL IMAGEAPI BindImageEx( DWORD, PCSTR, PCSTR, PCSTR, PIMAGEHLP_STATUS_ROUTINE ); PIMAGE_NT_HEADERS IMAGEAPI CheckSumMappedFile( PVOID, DWORD, PDWORD, PDWORD ); BOOL IMAGEAPI EnumDirTree( HANDLE, PCSTR, PCSTR, PSTR, PENUMDIRTREE_CALLBACK, PVOID ); BOOL IMAGEAPI EnumDirTreeW( HANDLE, PCWSTR, PCWSTR, PWSTR, PENUMDIRTREE_CALLBACKW, PVOID ); BOOL IMAGEAPI EnumerateLoadedModules64( HANDLE, PENUMLOADED_MODULES_CALLBACK64, PVOID ); BOOL IMAGEAPI EnumerateLoadedModulesW64( HANDLE, PENUMLOADED_MODULES_CALLBACKW64, PVOID ); BOOL IMAGEAPI EnumerateLoadedModulesEx( HANDLE, PENUMLOADED_MODULES_CALLBACK64, PVOID ); BOOL IMAGEAPI EnumerateLoadedModulesExW( HANDLE, PENUMLOADED_MODULES_CALLBACKW64, PVOID ); HANDLE IMAGEAPI FindDebugInfoFile( PCSTR, PCSTR, PSTR ); HANDLE IMAGEAPI FindDebugInfoFileEx( PCSTR, PCSTR, PSTR, PFIND_DEBUG_FILE_CALLBACK, PVOID ); HANDLE IMAGEAPI FindDebugInfoFileExW( PCWSTR, PCWSTR, PWSTR, PFIND_DEBUG_FILE_CALLBACKW, PVOID ); HANDLE IMAGEAPI FindExecutableImage( PCSTR, PCSTR, PSTR ); HANDLE IMAGEAPI FindExecutableImageEx( PCSTR, PCSTR, PSTR, PFIND_EXE_FILE_CALLBACK, PVOID ); HANDLE IMAGEAPI FindExecutableImageExW( PCWSTR, PCWSTR, PWSTR, PFIND_EXE_FILE_CALLBACKW, PVOID ); BOOL IMAGEAPI FindFileInPath( HANDLE, PCSTR, PCSTR, PVOID, DWORD, DWORD, DWORD, PSTR ); BOOL IMAGEAPI FindFileInSearchPath( HANDLE, PCSTR, PCSTR, DWORD, DWORD, DWORD, PSTR ); BOOL IMAGEAPI GetImageConfigInformation( PLOADED_IMAGE, PIMAGE_LOAD_CONFIG_DIRECTORY ); DWORD IMAGEAPI GetImageUnusedHeaderBytes( PLOADED_IMAGE, PDWORD ); DWORD IMAGEAPI GetTimestampForLoadedLibrary( HMODULE ); BOOL IMAGEAPI ImageAddCertificate( HANDLE, LPWIN_CERTIFICATE, PDWORD ); PVOID IMAGEAPI ImageDirectoryEntryToData( PVOID, BOOLEAN, USHORT, PULONG ); PVOID IMAGEAPI ImageDirectoryEntryToDataEx( PVOID, BOOLEAN, USHORT, PULONG, PIMAGE_SECTION_HEADER * ); BOOL IMAGEAPI ImageEnumerateCertificates( HANDLE, WORD, PDWORD, PDWORD, DWORD ); BOOL IMAGEAPI ImageGetCertificateData( HANDLE, DWORD, LPWIN_CERTIFICATE, PDWORD ); BOOL IMAGEAPI ImageGetCertificateHeader( HANDLE, DWORD, LPWIN_CERTIFICATE ); BOOL IMAGEAPI ImageGetDigestStream( HANDLE, DWORD, DIGEST_FUNCTION, DIGEST_HANDLE ); PLOADED_IMAGE IMAGEAPI ImageLoad( PCSTR, PCSTR ); PIMAGE_NT_HEADERS IMAGEAPI ImageNtHeader( PVOID ); BOOL IMAGEAPI ImageRemoveCertificate( HANDLE, DWORD ); PIMAGE_SECTION_HEADER IMAGEAPI ImageRvaToSection( PIMAGE_NT_HEADERS, PVOID, ULONG ); PVOID IMAGEAPI ImageRvaToVa( PIMAGE_NT_HEADERS, PVOID, ULONG, PIMAGE_SECTION_HEADER * ); BOOL IMAGEAPI ImageUnload( PLOADED_IMAGE ); LPAPI_VERSION IMAGEAPI ImagehlpApiVersion( VOID ); LPAPI_VERSION IMAGEAPI ImagehlpApiVersionEx( LPAPI_VERSION ); BOOL IMAGEAPI MakeSureDirectoryPathExists( PCSTR ); BOOL IMAGEAPI MapAndLoad( PCSTR, PCSTR, PLOADED_IMAGE, BOOL, BOOL ); PIMAGE_DEBUG_INFORMATION IMAGEAPI MapDebugInformation( HANDLE, PCSTR, PCSTR, ULONG ); DWORD IMAGEAPI MapFileAndCheckSumA( PCSTR, PDWORD, PDWORD ); DWORD IMAGEAPI MapFileAndCheckSumW( PCWSTR, PDWORD, PDWORD ); BOOL IMAGEAPI ReBaseImage( PCSTR, PCSTR, BOOL, BOOL, BOOL, ULONG, ULONG *, ULONG_PTR *, ULONG *, ULONG_PTR *, ULONG ); BOOL IMAGEAPI ReBaseImage64( PCSTR, PCSTR, BOOL, BOOL, BOOL, ULONG, ULONG *, ULONG64 *, ULONG *, ULONG64 *, ULONG ); BOOL IMAGEAPI SearchTreeForFile( PCSTR, PCSTR, PSTR ); BOOL IMAGEAPI SearchTreeForFileW( PCWSTR, PCWSTR, PWSTR ); BOOL IMAGEAPI SetImageConfigInformation( PLOADED_IMAGE, PIMAGE_LOAD_CONFIG_DIRECTORY ); BOOL IMAGEAPI SplitSymbols( PSTR, PCSTR, PSTR, ULONG ); BOOL IMAGEAPI StackWalk64( DWORD, HANDLE, HANDLE, LPSTACKFRAME64, PVOID, PREAD_PROCESS_MEMORY_ROUTINE64, PFUNCTION_TABLE_ACCESS_ROUTINE64, PGET_MODULE_BASE_ROUTINE64, PTRANSLATE_ADDRESS_ROUTINE64 ); BOOL IMAGEAPI SymAddSourceStream( HANDLE, ULONG64, PCSTR, PBYTE, size_t ); BOOL IMAGEAPI SymAddSourceStreamA( HANDLE, ULONG64, PCSTR, PBYTE, size_t ); BOOL IMAGEAPI SymAddSourceStreamW( HANDLE, ULONG64, PCWSTR, PBYTE, size_t ); BOOL IMAGEAPI SymAddSymbol( HANDLE, ULONG64, PCSTR, DWORD64, DWORD, DWORD ); BOOL IMAGEAPI SymAddSymbolW( HANDLE, ULONG64, PCWSTR, DWORD64, DWORD, DWORD ); BOOL IMAGEAPI SymCleanup( HANDLE ); BOOL IMAGEAPI SymDeleteSymbol( HANDLE, ULONG64, PCSTR, DWORD64, DWORD ); BOOL IMAGEAPI SymDeleteSymbolW( HANDLE, ULONG64, PCWSTR, DWORD64, DWORD ); BOOL IMAGEAPI SymEnumLines( HANDLE, ULONG64, PCSTR, PCSTR, PSYM_ENUMLINES_CALLBACK, PVOID ); BOOL IMAGEAPI SymEnumLinesW( HANDLE, ULONG64, PCWSTR, PCWSTR, PSYM_ENUMLINES_CALLBACKW, PVOID ); BOOL IMAGEAPI SymEnumProcesses( PSYM_ENUMPROCESSES_CALLBACK, PVOID ); BOOL IMAGEAPI SymEnumSourceFileTokens( HANDLE, ULONG64, PENUMSOURCEFILETOKENSCALLBACK ); BOOL IMAGEAPI SymEnumSourceFiles( HANDLE, ULONG64, PCSTR, PSYM_ENUMSOURCEFILES_CALLBACK, PVOID ); BOOL IMAGEAPI SymEnumSourceFilesW( HANDLE, ULONG64, PCWSTR, PSYM_ENUMSOURCEFILES_CALLBACKW, PVOID ); BOOL IMAGEAPI SymEnumSourceLines( HANDLE, ULONG64, PCSTR, PCSTR, DWORD, DWORD, PSYM_ENUMLINES_CALLBACK, PVOID ); BOOL IMAGEAPI SymEnumSourceLinesW( HANDLE, ULONG64, PCWSTR, PCWSTR, DWORD, DWORD, PSYM_ENUMLINES_CALLBACKW, PVOID ); BOOL IMAGEAPI SymEnumSym( HANDLE, ULONG64, PSYM_ENUMERATESYMBOLS_CALLBACK, PVOID ); BOOL IMAGEAPI SymEnumSymbols( HANDLE, ULONG64, PCSTR, PSYM_ENUMERATESYMBOLS_CALLBACK, PVOID ); BOOL IMAGEAPI SymEnumSymbolsForAddr( HANDLE, DWORD64, PSYM_ENUMERATESYMBOLS_CALLBACK, PVOID ); BOOL IMAGEAPI SymEnumSymbolsForAddrW( HANDLE, DWORD64, PSYM_ENUMERATESYMBOLS_CALLBACKW, PVOID ); BOOL IMAGEAPI SymEnumSymbolsW( HANDLE, ULONG64, PCWSTR, PSYM_ENUMERATESYMBOLS_CALLBACKW, PVOID ); BOOL IMAGEAPI SymEnumTypes( HANDLE, ULONG64, PSYM_ENUMERATESYMBOLS_CALLBACK, PVOID ); BOOL IMAGEAPI SymEnumTypesByName( HANDLE, ULONG64, PCSTR, PSYM_ENUMERATESYMBOLS_CALLBACK, PVOID ); BOOL IMAGEAPI SymEnumTypesByNameW( HANDLE, ULONG64, PCWSTR, PSYM_ENUMERATESYMBOLS_CALLBACK, PVOID ); BOOL IMAGEAPI SymEnumTypesW( HANDLE, ULONG64, PSYM_ENUMERATESYMBOLS_CALLBACKW, PVOID ); BOOL IMAGEAPI SymEnumerateModules64( HANDLE, PSYM_ENUMMODULES_CALLBACK64, PVOID ); BOOL IMAGEAPI SymEnumerateModulesW64( HANDLE, PSYM_ENUMMODULES_CALLBACKW64, PVOID ); BOOL IMAGEAPI SymEnumerateSymbols64( HANDLE, ULONG64, PSYM_ENUMSYMBOLS_CALLBACK64, PVOID ); BOOL IMAGEAPI SymEnumerateSymbolsW64( HANDLE, ULONG64, PSYM_ENUMSYMBOLS_CALLBACK64W, PVOID ); HANDLE IMAGEAPI SymFindDebugInfoFile( HANDLE, PCSTR, PSTR, PFIND_DEBUG_FILE_CALLBACK, PVOID ); HANDLE IMAGEAPI SymFindDebugInfoFileW( HANDLE, PCWSTR, PWSTR, PFIND_DEBUG_FILE_CALLBACKW, PVOID ); HANDLE IMAGEAPI SymFindExecutableImage( HANDLE, PCSTR, PSTR, PFIND_EXE_FILE_CALLBACK, PVOID ); HANDLE IMAGEAPI SymFindExecutableImageW( HANDLE, PCWSTR, PWSTR, PFIND_EXE_FILE_CALLBACKW, PVOID ); BOOL IMAGEAPI SymFindFileInPath( HANDLE, PCSTR, PCSTR, PVOID, DWORD, DWORD, DWORD, PSTR, PFINDFILEINPATHCALLBACK, PVOID ); BOOL IMAGEAPI SymFindFileInPathW( HANDLE, PCWSTR, PCWSTR, PVOID, DWORD, DWORD, DWORD, PWSTR, PFINDFILEINPATHCALLBACKW, PVOID ); BOOL IMAGEAPI SymFromAddr( HANDLE, DWORD64, PDWORD64, PSYMBOL_INFO ); BOOL IMAGEAPI SymFromAddrW( HANDLE, DWORD64, PDWORD64, PSYMBOL_INFOW ); BOOL IMAGEAPI SymFromIndex( HANDLE, ULONG64, DWORD, PSYMBOL_INFO ); BOOL IMAGEAPI SymFromIndexW( HANDLE, ULONG64, DWORD, PSYMBOL_INFOW ); BOOL IMAGEAPI SymFromName( HANDLE, PCSTR, PSYMBOL_INFO ); BOOL IMAGEAPI SymFromNameW( HANDLE, PCWSTR, PSYMBOL_INFOW ); BOOL IMAGEAPI SymFromToken( HANDLE, DWORD64, DWORD, PSYMBOL_INFO ); BOOL IMAGEAPI SymFromTokenW( HANDLE, DWORD64, DWORD, PSYMBOL_INFOW ); PVOID IMAGEAPI SymFunctionTableAccess64( HANDLE, DWORD64 ); ULONG IMAGEAPI SymGetFileLineOffsets64( HANDLE, PCSTR, PCSTR, PDWORD64, ULONG ); PCHAR IMAGEAPI SymGetHomeDirectory( DWORD, PSTR, size_t ); PWSTR IMAGEAPI SymGetHomeDirectoryW( DWORD, PWSTR, size_t ); BOOL IMAGEAPI SymGetLineFromAddr64( HANDLE, DWORD64, PDWORD, PIMAGEHLP_LINE64 ); BOOL IMAGEAPI SymGetLineFromAddrW64( HANDLE, DWORD64, PDWORD, PIMAGEHLP_LINEW64 ); BOOL IMAGEAPI SymGetLineFromName64( HANDLE, PCSTR, PCSTR, DWORD, PLONG, PIMAGEHLP_LINE64 ); BOOL IMAGEAPI SymGetLineFromNameW64( HANDLE, PCWSTR, PCWSTR, DWORD, PLONG, PIMAGEHLP_LINEW64 ); BOOL IMAGEAPI SymGetLineNext64( HANDLE, PIMAGEHLP_LINE64 ); BOOL IMAGEAPI SymGetLineNextW64( HANDLE, PIMAGEHLP_LINEW64 ); BOOL IMAGEAPI SymGetLinePrev64( HANDLE, PIMAGEHLP_LINE64 ); BOOL IMAGEAPI SymGetLinePrevW64( HANDLE, PIMAGEHLP_LINEW64 ); DWORD64 IMAGEAPI SymGetModuleBase64( HANDLE, DWORD64 ); BOOL IMAGEAPI SymGetModuleInfo64( HANDLE, DWORD64, PIMAGEHLP_MODULE64 ); BOOL IMAGEAPI SymGetModuleInfoW64( HANDLE, DWORD64, PIMAGEHLP_MODULE64 ); BOOL IMAGEAPI SymGetOmaps( HANDLE, DWORD64, POMAP *, PDWORD64, POMAP *, PDWORD64 ); DWORD IMAGEAPI SymGetOptions( VOID ); BOOL IMAGEAPI SymGetScope( HANDLE, ULONG64, DWORD, PSYMBOL_INFO ); BOOL IMAGEAPI SymGetScopeW( HANDLE, ULONG64, DWORD, PSYMBOL_INFOW ); BOOL IMAGEAPI SymGetSearchPath( HANDLE, PSTR, DWORD ); BOOL IMAGEAPI SymGetSearchPathW( HANDLE, PWSTR, DWORD ); BOOL IMAGEAPI SymGetSourceFile( HANDLE, ULONG64, PCSTR, PCSTR, PSTR, DWORD ); BOOL IMAGEAPI SymGetSourceFileFromToken( HANDLE, PVOID, PCSTR, PSTR, DWORD ); BOOL IMAGEAPI SymGetSourceFileFromTokenW( HANDLE, PVOID, PCWSTR, PWSTR, DWORD ); BOOL IMAGEAPI SymGetSourceFileToken( HANDLE, ULONG64, PCSTR, PVOID *, DWORD * ); BOOL IMAGEAPI SymGetSourceFileTokenW( HANDLE, ULONG64, PCWSTR, PVOID *, DWORD * ); BOOL IMAGEAPI SymGetSourceFileW( HANDLE, ULONG64, PCWSTR, PCWSTR, PWSTR, DWORD ); BOOL IMAGEAPI SymGetSourceVarFromToken( HANDLE, PVOID, PCSTR, PCSTR, PSTR, DWORD ); BOOL IMAGEAPI SymGetSourceVarFromTokenW( HANDLE, PVOID, PCWSTR, PCWSTR, PWSTR, DWORD ); BOOL IMAGEAPI SymGetSymFromAddr64( HANDLE, DWORD64, PDWORD64, PIMAGEHLP_SYMBOL64 ); BOOL IMAGEAPI SymGetSymFromName64( HANDLE, PCSTR, PIMAGEHLP_SYMBOL64 ); BOOL IMAGEAPI SymGetSymNext64( HANDLE, PIMAGEHLP_SYMBOL64 ); BOOL IMAGEAPI SymGetSymPrev64( HANDLE, PIMAGEHLP_SYMBOL64 ); BOOL IMAGEAPI SymGetSymbolFile( HANDLE, PCSTR, PCSTR, DWORD, PSTR, size_t, PSTR, size_t ); BOOL IMAGEAPI SymGetSymbolFileW( HANDLE, PCWSTR, PCWSTR, DWORD, PWSTR, size_t, PWSTR, size_t ); BOOL IMAGEAPI SymGetTypeFromName( HANDLE, ULONG64, PCSTR, PSYMBOL_INFO ); BOOL IMAGEAPI SymGetTypeFromNameW( HANDLE, ULONG64, PCWSTR, PSYMBOL_INFOW ); BOOL IMAGEAPI SymGetTypeInfo( HANDLE, DWORD64, ULONG, IMAGEHLP_SYMBOL_TYPE_INFO, PVOID ); BOOL IMAGEAPI SymGetTypeInfoEx( HANDLE, DWORD64, PIMAGEHLP_GET_TYPE_INFO_PARAMS ); BOOL IMAGEAPI SymGetUnwindInfo( HANDLE, DWORD64, PVOID, PULONG ); BOOL IMAGEAPI SymInitialize( HANDLE, PCSTR, BOOL ); BOOL IMAGEAPI SymInitializeW( HANDLE, PCWSTR, BOOL ); DWORD64 IMAGEAPI SymLoadModule64( HANDLE, HANDLE, PCSTR, PCSTR, DWORD64, DWORD ); DWORD64 IMAGEAPI SymLoadModuleEx( HANDLE, HANDLE, PCSTR, PCSTR, DWORD64, DWORD, PMODLOAD_DATA, DWORD ); DWORD64 IMAGEAPI SymLoadModuleExW( HANDLE, HANDLE, PCWSTR, PCWSTR, DWORD64, DWORD, PMODLOAD_DATA, DWORD ); BOOL IMAGEAPI SymMatchFileName( PCSTR, PCSTR, PSTR *, PSTR * ); BOOL IMAGEAPI SymMatchFileNameW( PCWSTR, PCWSTR, PWSTR *, PWSTR * ); BOOL IMAGEAPI SymMatchString( PCSTR, PCSTR, BOOL ); BOOL IMAGEAPI SymMatchStringA( PCSTR, PCSTR, BOOL ); BOOL IMAGEAPI SymMatchStringW( PCWSTR, PCWSTR, BOOL ); BOOL IMAGEAPI SymNext( HANDLE, PSYMBOL_INFO ); BOOL IMAGEAPI SymNextW( HANDLE, PSYMBOL_INFOW ); BOOL IMAGEAPI SymPrev( HANDLE, PSYMBOL_INFO ); BOOL IMAGEAPI SymPrevW( HANDLE, PSYMBOL_INFOW ); BOOL IMAGEAPI SymRefreshModuleList( HANDLE ); BOOL IMAGEAPI SymRegisterCallback64( HANDLE, PSYMBOL_REGISTERED_CALLBACK64, ULONG64 ); BOOL IMAGEAPI SymRegisterCallbackW64( HANDLE, PSYMBOL_REGISTERED_CALLBACK64, ULONG64 ); BOOL IMAGEAPI SymRegisterFunctionEntryCallback64( HANDLE, PSYMBOL_FUNCENTRY_CALLBACK64, ULONG64 ); BOOL IMAGEAPI SymSearch( HANDLE, ULONG64, DWORD, DWORD, PCSTR, DWORD64, PSYM_ENUMERATESYMBOLS_CALLBACK, PVOID, DWORD ); BOOL IMAGEAPI SymSearchW( HANDLE, ULONG64, DWORD, DWORD, PCWSTR, DWORD64, PSYM_ENUMERATESYMBOLS_CALLBACKW, PVOID, DWORD ); BOOL IMAGEAPI SymSetContext( HANDLE, PIMAGEHLP_STACK_FRAME, PIMAGEHLP_CONTEXT ); PCHAR IMAGEAPI SymSetHomeDirectory( HANDLE, PCSTR ); PWSTR IMAGEAPI SymSetHomeDirectoryW( HANDLE, PCWSTR ); DWORD IMAGEAPI SymSetOptions( DWORD ); BOOL IMAGEAPI SymSetParentWindow( HWND ); BOOL IMAGEAPI SymSetScopeFromAddr( HANDLE, ULONG64 ); BOOL IMAGEAPI SymSetScopeFromIndex( HANDLE, ULONG64, DWORD ); BOOL IMAGEAPI SymSetSearchPath( HANDLE, PCSTR ); BOOL IMAGEAPI SymSetSearchPathW( HANDLE, PCWSTR ); PCSTR IMAGEAPI SymSrvDeltaName( HANDLE, PCSTR, PCSTR, PCSTR, PCSTR ); PCWSTR IMAGEAPI SymSrvDeltaNameW( HANDLE, PCWSTR, PCWSTR, PCWSTR, PCWSTR ); BOOL IMAGEAPI SymSrvGetFileIndexInfo( PCSTR, PSYMSRV_INDEX_INFO, DWORD ); BOOL IMAGEAPI SymSrvGetFileIndexInfoW( PCWSTR, PSYMSRV_INDEX_INFOW, DWORD ); BOOL IMAGEAPI SymSrvGetFileIndexString( HANDLE, PCSTR, PCSTR, PSTR, size_t, DWORD ); BOOL IMAGEAPI SymSrvGetFileIndexStringW( HANDLE, PCWSTR, PCWSTR, PWSTR, size_t, DWORD ); BOOL IMAGEAPI SymSrvGetFileIndexes( PCSTR, GUID *, PDWORD, PDWORD, DWORD ); BOOL IMAGEAPI SymSrvGetFileIndexesW( PCWSTR, GUID *, PDWORD, PDWORD, DWORD ); PCSTR IMAGEAPI SymSrvGetSupplement( HANDLE, PCSTR, PCSTR, PCSTR ); PCWSTR IMAGEAPI SymSrvGetSupplementW( HANDLE, PCWSTR, PCWSTR, PCWSTR ); BOOL IMAGEAPI SymSrvIsStore( HANDLE, PCSTR ); BOOL IMAGEAPI SymSrvIsStoreW( HANDLE, PCWSTR ); PCSTR IMAGEAPI SymSrvStoreFile( HANDLE, PCSTR, PCSTR, DWORD ); PCWSTR IMAGEAPI SymSrvStoreFileW( HANDLE, PCWSTR, PCWSTR, DWORD ); PCSTR IMAGEAPI SymSrvStoreSupplement( HANDLE, PCSTR, PCSTR, PCSTR, DWORD ); PCWSTR IMAGEAPI SymSrvStoreSupplementW( HANDLE, PCWSTR, PCWSTR, PCWSTR, DWORD ); BOOL IMAGEAPI SymUnDName64( PIMAGEHLP_SYMBOL64, PSTR, DWORD ); BOOL IMAGEAPI SymUnloadModule64( HANDLE, DWORD64 ); BOOL IMAGEAPI TouchFileTimes( HANDLE, PSYSTEMTIME ); DWORD IMAGEAPI UnDecorateSymbolName( PCSTR, PSTR, DWORD, DWORD ); DWORD IMAGEAPI UnDecorateSymbolNameW( PCWSTR, PWSTR, DWORD, DWORD ); BOOL IMAGEAPI UnMapAndLoad( PLOADED_IMAGE ); BOOL IMAGEAPI UnmapDebugInformation( PIMAGE_DEBUG_INFORMATION ); BOOL IMAGEAPI UpdateDebugInfoFile( PCSTR, PCSTR, PSTR, PIMAGE_NT_HEADERS32 ); BOOL IMAGEAPI UpdateDebugInfoFileEx( PCSTR, PCSTR, PSTR, PIMAGE_NT_HEADERS32, DWORD ); #ifndef _IMAGEHLP64 BOOL IMAGEAPI EnumerateLoadedModules( HANDLE, PENUMLOADED_MODULES_CALLBACK, PVOID ); BOOL IMAGEAPI StackWalk( DWORD, HANDLE, HANDLE, LPSTACKFRAME, PVOID, PREAD_PROCESS_MEMORY_ROUTINE, PFUNCTION_TABLE_ACCESS_ROUTINE, PGET_MODULE_BASE_ROUTINE, PTRANSLATE_ADDRESS_ROUTINE ); BOOL IMAGEAPI SymEnumerateModules( HANDLE, PSYM_ENUMMODULES_CALLBACK, PVOID ); BOOL IMAGEAPI SymEnumerateSymbols( HANDLE, ULONG, PSYM_ENUMSYMBOLS_CALLBACK, PVOID ); BOOL IMAGEAPI SymEnumerateSymbolsW( HANDLE, ULONG, PSYM_ENUMSYMBOLS_CALLBACKW, PVOID ); PVOID IMAGEAPI SymFunctionTableAccess( HANDLE, DWORD ); BOOL IMAGEAPI SymGetLineFromAddr( HANDLE, DWORD, PDWORD, PIMAGEHLP_LINE ); BOOL IMAGEAPI SymGetLineFromName( HANDLE, PCSTR, PCSTR, DWORD, PLONG, PIMAGEHLP_LINE ); BOOL IMAGEAPI SymGetLineNext( HANDLE, PIMAGEHLP_LINE ); BOOL IMAGEAPI SymGetLinePrev( HANDLE, PIMAGEHLP_LINE ); DWORD IMAGEAPI SymGetModuleBase( HANDLE, DWORD ); BOOL IMAGEAPI SymGetModuleInfo( HANDLE, DWORD, PIMAGEHLP_MODULE ); BOOL IMAGEAPI SymGetModuleInfoW( HANDLE, DWORD, PIMAGEHLP_MODULEW ); BOOL IMAGEAPI SymGetSymFromAddr( HANDLE, DWORD, PDWORD, PIMAGEHLP_SYMBOL ); BOOL IMAGEAPI SymGetSymFromName( HANDLE, PCSTR, PIMAGEHLP_SYMBOL ); BOOL IMAGEAPI SymGetSymNext( HANDLE, PIMAGEHLP_SYMBOL ); BOOL IMAGEAPI SymGetSymPrev( HANDLE, PIMAGEHLP_SYMBOL ); DWORD IMAGEAPI SymLoadModule( HANDLE, HANDLE, PCSTR, PCSTR, DWORD, DWORD ); BOOL IMAGEAPI SymRegisterCallback( HANDLE, PSYMBOL_REGISTERED_CALLBACK, PVOID ); BOOL IMAGEAPI SymRegisterFunctionEntryCallback( HANDLE, PSYMBOL_FUNCENTRY_CALLBACK, PVOID ); BOOL IMAGEAPI SymUnDName( PIMAGEHLP_SYMBOL, PSTR, DWORD ); BOOL IMAGEAPI SymUnloadModule( HANDLE, DWORD ); #endif /* Functions in DBGHELP.DLL */ BOOL WINAPI DbgHelpCreateUserDump( LPCSTR, PDBGHELP_CREATE_USER_DUMP_CALLBACK, PVOID ); BOOL WINAPI DbgHelpCreateUserDumpW( LPCWSTR, PDBGHELP_CREATE_USER_DUMP_CALLBACK, PVOID ); BOOL WINAPI MiniDumpReadDumpStream( PVOID, ULONG, PMINIDUMP_DIRECTORY *, PVOID *, ULONG * ); BOOL WINAPI MiniDumpWriteDump( HANDLE, DWORD, HANDLE, MINIDUMP_TYPE, PMINIDUMP_EXCEPTION_INFORMATION, PMINIDUMP_USER_STREAM_INFORMATION, PMINIDUMP_CALLBACK_INFORMATION ); /* Functions implemented as macros */ #ifndef _IMAGEHLP64 #define Address32To64( p1, p2 ) \ { \ (p2)->Offset = (ULONG64)(LONG64)(LONG)((p1)->Offset); \ (p2)->Segment = (p1)->Segment; \ (p2)->Mode = (p1)->Mode; \ } #define Address64To32( p1, p2 ) \ { \ (p2)->Offset = (ULONG)((p1)->Offset); \ (p2)->Segment = (p1)->Segment; \ (p2)->Mode = (p1)->Mode; \ } #define KdHelp32To64( p1, p2 ) \ { \ (p2)->Thread = (p1)->Thread; \ (p2)->ThCallbackStack = (p1)->ThCallbackStack; \ (p2)->NextCallback = (p1)->NextCallback; \ (p2)->FramePointer = (p1)->FramePointer; \ (p2)->KiCallUserMode = (p1)->KiCallUserMode; \ (p2)->KeUserCallbackDispatcher = (p1)->KeUserCallbackDispatcher; \ (p2)->SystemRangeStart = (p1)->SystemRangeStart; \ (p2)->KiUserExceptionDispatcher = (p1)->KiUserExceptionDispatcher; \ (p2)->StackBase = (p1)->StackBase; \ (p2)->StackLimit = (p1)->StackLimit; \ } #endif /* Aliases for 64-bit image helper */ #ifdef _IMAGEHLP64 #define StackWalk StackWalk64 #define SymEnumerateLoadedModules SymEnumerateLoadedModules64 #define SymEnumerateModules SymEnumerateModules64 #define SymEnumerateSymbols SymEnumerateSymbols64 #define SymEnumerateSymbolsW SymEnumerateSymbolsW64 #define SymFunctionTableAccess SymFunctionTableAccess64 #define SymGetLineFromAddr SymGetLineFromAddr64 #define SymGetLineFromAddrW SymGetLineFromAddrW64 #define SymGetLineFromName SymGetLineFromName64 #define SymGetLineNext SymGetLineNext64 #define SymGetLinePrev SymGetLinePrev64 #define SymGetModuleBase SymGetModuleBase64 #define SymGetModuleInfo SymGetModuleInfo64 #define SymGetModuleInfoW SymGetModuleInfoW64 #define SymGetSymFromAddr SymGetSymFromAddr64 #define SymGetSymFromName SymGetSymFromName64 #define SymGetSymNext SymGetSymNext64 #define SymGetSymPrev SymGetSymPrev64 #define SymLoadModule SymLoadModule64 #define SymRegisterCallback SymRegisterCallback64 #define SymRegisterFunctionEntryCallback SymRegisterFunctionEntryCallback64 #define SymUnDName SymUnDName64 #define SymUnloadModule SymUnloadModule64 #endif /* Map generic function names to the appropriate ANSI or Unicode version. */ #ifdef UNICODE #define MapFileAndCheckSum MapFileAndCheckSumW #else #define MapFileAndCheckSum MapFileAndCheckSumA #endif #ifdef DBGHELP_TRANSLATE_TCHAR #define EnumDirTree EnumDirTreeW #define EnumerateLoadedModules64 EnumerateLoadedModulesW64 #define EnumerateLoadedModulesEx EnumerateLoadedModulesExW #define FindDebugInfoFileEx FindDebugInfoFileExW #define FindExecutableImageEx FindExecutableImageExW #define SearchTreeForFile SearchTreeForFileW #define SymAddSymbol SymAddSymbolW #define SymDeleteSymbol SymDeleteSymbolW #define SymEnumLines SymEnumLinesW #define SymEnumSourceFiles SymEnumSourceFilesW #define SymEnumSourceLines SymEnumSourceLinesW #define SymEnumSymbols SymEnumSymbolsW #define SymEnumSymbolsForAddr SymEnumSymbolsForAddrW #define SymEnumTypes SymEnumTypesW #define SymEnumTypesByName SymEnumTypesByNameW #define SymEnumerateModules64 SymEnumerateModulesW64 #define SymFindDebugInfoFile SymFindDebugInfoFileW #define SymFindExecutableImage SymFindExecutableImageW #define SymFindFileInPath SymFindFileInPathW #define SymFromAddr SymFromAddrW #define SymFromIndex SymFromIndexW #define SymFromName SymFromNameW #define SymFromToken SymFromTokenW #define SymGetFileLineOffsets64 SymGetFileLineOffsetsW64 #define SymGetHomeDirectory SymGetHomeDirectoryW #define SymGetLineFromAddr64 SymGetLineFromAddrW64 #define SymGetLineFromName64 SymGetLineFromNameW64 #define SymGetLineNext64 SymGetLineNextW64 #define SymGetLinePrev64 SymGetLinePrevW64 #define SymGetModuleInfo64 SymGetModuleInfoW64 #define SymGetScope SymGetScopeW #define SymGetSearchPath SymGetSearchPathW #define SymGetSourceFile SymGetSourceFileW #define SymGetSourceFileFromToken SymGetSourceFileFromTokenW #define SymGetSourceFileToken SymGetSourceFileTokenW #define SymGetSourceVarFromToken SymGetSourceVarFromTokenW #define SymGetSymbolFile SymGetSymbolFileW #define SymGetTypeFromName SymGetTypeFromNameW #define SymInitialize SymInitializeW #define SymLoadModuleEx SymLoadModuleExW #define SymMatchFileName SymMatchFileNameW #define SymMatchString SymMatchStringW #define SymNext SymNextW #define SymPrev SymPrevW #define SymRegisterCallback64 SymRegisterCallbackW64 #define SymSearch SymSearchW #define SymSetHomeDirectory SymSetHomeDirectoryW #define SymSetSearchPath SymSetSearchPathW #define SymSrvDeltaName SymSrvDeltaNameW #define SymSrvGetFileIndexInfo SymSrvGetFileIndexInfoW #define SymSrvGetFileIndexString SymSrvGetFileIndexStringW #define SymSrvGetFileIndexes SymSrvGetFileIndexesW #define SymSrvGetSupplement SymSrvGetSupplementW #define SymSrvIsStore SymSrvIsStoreW #define SymSrvStoreFile SymSrvStoreFileW #define SymSrvStoreSupplement SymSrvStoreSupplementW #define UnDecorateSymbolName UnDecorateSymbolNameW #endif /* Map generic type names to the appropriate ANSI or Unicode version. */ #ifdef DBGHELP_TRANSLATE_TCHAR #define IMAGEHLP_LINE64 IMAGEHLP_LINEW64 #define PIMAGEHLP_LINE64 PIMAGEHLP_LINEW64 #define SYMBOL_INFO SYMBOL_INFOW #define PSYMBOL_INFO PSYMBOL_INFOW #define SYMBOL_INFO_PACKAGE SYMBOL_INFO_PACKAGEW #define PSYMBOL_INFO_PACKAGE PSYMBOL_INFO_PACKAGEW #define FIND_EXE_FILE_CALLBACK FIND_EXE_FILE_CALLBACKW #define PFIND_EXE_FILE_CALLBACK PFIND_EXE_FILE_CALLBACKW #define SYM_ENUMERATESYMBOLS_CALLBACK SYM_ENUMERATESYMBOLS_CALLBACKW #define PSYM_ENUMERATESYMBOLS_CALLBACK PSYM_ENUMERATESYMBOLS_CALLBACKW #define SRCCODEINFO SRCCODEINFOW #define PSRCCODEINFO PSRCCODEINFOW #define SOURCEFILE SOURCEFILEW #define PSOURCEFILE PSOURCEFILEW #define SYM_ENUMSOURCEFILES_CALLBACK SYM_ENUMSOURCEFILES_CALLBACKW #define PSYM_ENUMSOURCEFILES_CALLBACK PSYM_ENUMSOURCEFILES_CALLBACKW #define IMAGEHLP_CBA_EVENT IMAGEHLP_CBA_EVENTW #define PIMAGEHLP_CBA_EVENT PIMAGEHLP_CBA_EVENTW #define PENUMDIRTREE_CALLBACK PENUMDIRTREE_CALLBACKW #define IMAGEHLP_DEFERRED_SYMBOL_LOAD64 IMAGEHLP_DEFERRED_SYMBOL_LOADW64 #define PIMAGEHLP_DEFERRED_SYMBOL_LOAD64 PIMAGEHLP_DEFERRED_SYMBOL_LOADW64 #define PFIND_DEBUG_FILE_CALLBACK PFIND_DEBUG_FILE_CALLBACKW #define PFINDFILEINPATHCALLBACK PFINDFILEINPATHCALLBACKW #define IMAGEHLP_MODULE64 IMAGEHLP_MODULEW64 #define PIMAGEHLP_MODULE64 PIMAGEHLP_MODULEW64 #define SYMSRV_INDEX_INFO SYMSRV_INDEX_INFOW #define PSYMSRV_INDEX_INFO PSYMSRV_INDEX_INFOW #define PSYMBOLSERVERPROC PSYMBOLSERVERPROCW #define PSYMBOLSERVERPINGPROC PSYMBOLSERVERPINGPROCW #endif #ifdef __cplusplus } /* extern "C" */ #endif #endif /* _IMAGEHLP_ */