This repository has been archived on 2024-12-16. You can view files and clone it, but cannot push or open issues or pull requests.
CodeBlocksPortable/WATCOM/h/nt/imagehlp.h

2288 lines
91 KiB
C

/*
* 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 <wintrust.h>
#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_ */