| /* |
| imagehlp.h - Include file for IMAGEHLP.DLL APIs |
| |
| Written by Mumit Khan <khan@nanotech.wisc.edu> |
| |
| This file is part of a free library for the Win32 API. |
| |
| NOTE: This strictly does not belong in the Win32 API since it's |
| really part of Platform SDK. However,GDB needs it and we might |
| as well provide it here. |
| |
| This library is distributed in the hope that it will be useful, |
| but WITHOUT ANY WARRANTY; without even the implied warranty of |
| MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. |
| |
| */ |
| |
| #ifndef _IMAGEHLP_H |
| #define _IMAGEHLP_H |
| #if __GNUC__ >=3 |
| #pragma GCC system_header |
| #endif |
| |
| #ifdef __cplusplus |
| extern "C" { |
| #endif |
| |
| #define API_VERSION_NUMBER 7 |
| #define BIND_NO_BOUND_IMPORTS 0x00000001 |
| #define BIND_NO_UPDATE 0x00000002 |
| #define BIND_ALL_IMAGES 0x00000004 |
| #define BIND_CACHE_IMPORT_DLLS 0x00000008 |
| #define CBA_DEFERRED_SYMBOL_LOAD_START 1 |
| #define CBA_DEFERRED_SYMBOL_LOAD_COMPLETE 2 |
| #define CBA_DEFERRED_SYMBOL_LOAD_FAILURE 3 |
| #define CBA_SYMBOLS_UNLOADED 4 |
| #define CBA_DUPLICATE_SYMBOL 5 |
| #define CERT_PE_IMAGE_DIGEST_DEBUG_INFO 1 |
| #define CERT_PE_IMAGE_DIGEST_RESOURCES 2 |
| #define CERT_PE_IMAGE_DIGEST_ALL_IMPORT_INFO 4 |
| #define CERT_PE_IMAGE_DIGEST_NON_PE_INFO 8 |
| #define CERT_SECTION_TYPE_ANY 255 |
| #define CHECKSUM_SUCCESS 0 |
| #define CHECKSUM_OPEN_FAILURE 1 |
| #define CHECKSUM_MAP_FAILURE 2 |
| #define CHECKSUM_MAPVIEW_FAILURE 3 |
| #define CHECKSUM_UNICODE_FAILURE 4 |
| #define IMAGE_SEPARATION 65536 |
| #define SPLITSYM_REMOVE_PRIVATE 1 |
| #define SPLITSYM_EXTRACT_ALL 2 |
| #define SPLITSYM_SYMBOLPATH_IS_SRC 4 |
| #define SYMF_OMAP_GENERATED 1 |
| #define SYMF_OMAP_MODIFIED 2 |
| #define SYMOPT_CASE_INSENSITIVE 1 |
| #define SYMOPT_UNDNAME 2 |
| #define SYMOPT_DEFERRED_LOADS 4 |
| #define SYMOPT_NO_CPP 8 |
| #define SYMOPT_LOAD_LINES 16 |
| #define SYMOPT_OMAP_FIND_NEAREST 32 |
| #define UNDNAME_COMPLETE 0 |
| #define UNDNAME_NO_LEADING_UNDERSCORES 1 |
| #define UNDNAME_NO_MS_KEYWORDS 2 |
| #define UNDNAME_NO_FUNCTION_RETURNS 4 |
| #define UNDNAME_NO_ALLOCATION_MODEL 8 |
| #define UNDNAME_NO_ALLOCATION_LANGUAGE 16 |
| #define UNDNAME_NO_MS_THISTYPE 32 |
| #define UNDNAME_NO_CV_THISTYPE 64 |
| #define UNDNAME_NO_THISTYPE 96 |
| #define UNDNAME_NO_ACCESS_SPECIFIERS 128 |
| #define UNDNAME_NO_THROW_SIGNATURES 256 |
| #define UNDNAME_NO_MEMBER_TYPE 512 |
| #define UNDNAME_NO_RETURN_UDT_MODEL 1024 |
| #define UNDNAME_32_BIT_DECODE 2048 |
| #define UNDNAME_NAME_ONLY 4096 |
| #define UNDNAME_NO_ARGUMENTS 8192 |
| #define UNDNAME_NO_SPECIAL_SYMS 16384 |
| |
| #define _IMAGEHLPAPI DECLSPEC_IMPORT WINAPI |
| |
| #ifndef RC_INVOKED |
| |
| typedef enum _IMAGEHLP_STATUS_REASON { |
| BindOutOfMemory, |
| BindRvaToVaFailed, |
| BindNoRoomInImage, |
| BindImportModuleFailed, |
| BindImportProcedureFailed, |
| BindImportModule, |
| BindImportProcedure, |
| BindForwarder, |
| BindForwarderNOT, |
| BindImageModified, |
| BindExpandFileHeaders, |
| BindImageComplete, |
| BindMismatchedSymbols, |
| BindSymbolsNotUpdated |
| } IMAGEHLP_STATUS_REASON; |
| typedef BOOL(STDCALL*PIMAGEHLP_STATUS_ROUTINE)(IMAGEHLP_STATUS_REASON,LPSTR,LPSTR,ULONG,ULONG); |
| typedef struct _LOADED_IMAGE { |
| LPSTR ModuleName; |
| HANDLE hFile; |
| PUCHAR MappedAddress; |
| PIMAGE_NT_HEADERS FileHeader; |
| PIMAGE_SECTION_HEADER LastRvaSection; |
| ULONG NumberOfSections; |
| PIMAGE_SECTION_HEADER Sections; |
| ULONG Characteristics; |
| BOOLEAN fSystemImage; |
| BOOLEAN fDOSImage; |
| LIST_ENTRY Links; |
| ULONG SizeOfImage; |
| } LOADED_IMAGE,*PLOADED_IMAGE; |
| typedef struct _IMAGE_DEBUG_INFORMATION { |
| LIST_ENTRY List; |
| DWORD Size; |
| PVOID MappedBase; |
| USHORT Machine; |
| USHORT Characteristics; |
| DWORD CheckSum; |
| DWORD ImageBase; |
| DWORD SizeOfImage; |
| DWORD NumberOfSections; |
| PIMAGE_SECTION_HEADER Sections; |
| DWORD ExportedNamesSize; |
| LPSTR ExportedNames; |
| DWORD NumberOfFunctionTableEntries; |
| PIMAGE_FUNCTION_ENTRY FunctionTableEntries; |
| DWORD LowestFunctionStartingAddress; |
| DWORD HighestFunctionEndingAddress; |
| DWORD NumberOfFpoTableEntries; |
| PFPO_DATA FpoTableEntries; |
| DWORD SizeOfCoffSymbols; |
| PIMAGE_COFF_SYMBOLS_HEADER CoffSymbols; |
| DWORD SizeOfCodeViewSymbols; |
| PVOID CodeViewSymbols; |
| LPSTR ImageFilePath; |
| LPSTR ImageFileName; |
| LPSTR DebugFilePath; |
| DWORD TimeDateStamp; |
| BOOL RomImage; |
| PIMAGE_DEBUG_DIRECTORY DebugDirectory; |
| DWORD NumberOfDebugDirectories; |
| DWORD Reserved[3]; |
| } IMAGE_DEBUG_INFORMATION,*PIMAGE_DEBUG_INFORMATION; |
| typedef enum { |
| AddrMode1616, |
| AddrMode1632, |
| AddrModeReal, |
| AddrModeFlat |
| } ADDRESS_MODE; |
| typedef struct _tagADDRESS { |
| DWORD Offset; |
| WORD Segment; |
| ADDRESS_MODE Mode; |
| } ADDRESS,*LPADDRESS; |
| typedef struct _KDHELP { |
| DWORD Thread; |
| DWORD ThCallbackStack; |
| DWORD NextCallback; |
| DWORD FramePointer; |
| DWORD KiCallUserMode; |
| DWORD KeUserCallbackDispatcher; |
| DWORD SystemRangeStart; |
| } KDHELP,*PKDHELP; |
| typedef struct _tagSTACKFRAME { |
| ADDRESS AddrPC; |
| ADDRESS AddrReturn; |
| ADDRESS AddrFrame; |
| ADDRESS AddrStack; |
| LPVOID FuncTableEntry; |
| DWORD Params[4]; |
| BOOL Far; |
| BOOL Virtual; |
| DWORD Reserved[3]; |
| KDHELP KdHelp; |
| } STACKFRAME,*LPSTACKFRAME; |
| typedef BOOL(STDCALL*PREAD_PROCESS_MEMORY_ROUTINE)(HANDLE ,LPCVOID,LPVOID,DWORD,LPDWORD); |
| typedef LPVOID(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); |
| typedef struct API_VERSION { |
| USHORT MajorVersion; |
| USHORT MinorVersion; |
| USHORT Revision; |
| USHORT Reserved; |
| } API_VERSION,*LPAPI_VERSION; |
| typedef BOOL(CALLBACK*PSYM_ENUMMODULES_CALLBACK)(LPSTR,ULONG,PVOID); |
| typedef BOOL(CALLBACK*PSYM_ENUMSYMBOLS_CALLBACK)(LPSTR,ULONG,ULONG,PVOID); |
| typedef BOOL(CALLBACK*PENUMLOADED_MODULES_CALLBACK)(LPSTR,ULONG,ULONG,PVOID); |
| typedef BOOL(CALLBACK*PSYMBOL_REGISTERED_CALLBACK)(HANDLE,ULONG,PVOID,PVOID); |
| typedef enum { |
| SymNone, |
| SymCoff, |
| SymCv, |
| SymPdb, |
| SymExport, |
| SymDeferred, |
| SymSym |
| } SYM_TYPE; |
| typedef struct _IMAGEHLP_SYMBOL { |
| DWORD SizeOfStruct; |
| DWORD Address; |
| DWORD Size; |
| DWORD Flags; |
| DWORD MaxNameLength; |
| CHAR Name[1]; |
| } IMAGEHLP_SYMBOL,*PIMAGEHLP_SYMBOL; |
| 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,*PIMAGEHLP_MODULE; |
| typedef struct _IMAGEHLP_LINE { |
| DWORD SizeOfStruct; |
| DWORD Key; |
| DWORD LineNumber; |
| PCHAR FileName; |
| DWORD Address; |
| } IMAGEHLP_LINE,*PIMAGEHLP_LINE; |
| typedef struct _IMAGEHLP_DEFERRED_SYMBOL_LOAD { |
| DWORD SizeOfStruct; |
| DWORD BaseOfImage; |
| DWORD CheckSum; |
| DWORD TimeDateStamp; |
| CHAR FileName[MAX_PATH]; |
| BOOLEAN Reparse; |
| } IMAGEHLP_DEFERRED_SYMBOL_LOAD,*PIMAGEHLP_DEFERRED_SYMBOL_LOAD; |
| typedef struct _IMAGEHLP_DUPLICATE_SYMBOL { |
| DWORD SizeOfStruct; |
| DWORD NumberOfDups; |
| PIMAGEHLP_SYMBOL Symbol; |
| ULONG SelectedSymbol; |
| } IMAGEHLP_DUPLICATE_SYMBOL,*PIMAGEHLP_DUPLICATE_SYMBOL; |
| typedef PVOID DIGEST_HANDLE; |
| typedef BOOL(WINAPI*DIGEST_FUNCTION)(DIGEST_HANDLE refdata,PBYTE pData,DWORD dwLength); |
| |
| PIMAGE_NT_HEADERS _IMAGEHLPAPI CheckSumMappedFile(LPVOID,DWORD,LPDWORD,LPDWORD); |
| DWORD _IMAGEHLPAPI MapFileAndCheckSumA(LPSTR,LPDWORD,LPDWORD); |
| DWORD _IMAGEHLPAPI MapFileAndCheckSumW(PWSTR,LPDWORD,LPDWORD); |
| BOOL _IMAGEHLPAPI TouchFileTimes(HANDLE,LPSYSTEMTIME); |
| BOOL _IMAGEHLPAPI SplitSymbols(LPSTR,LPSTR,LPSTR,DWORD); |
| HANDLE _IMAGEHLPAPI FindDebugInfoFile(LPSTR,LPSTR,LPSTR); |
| HANDLE _IMAGEHLPAPI FindExecutableImage(LPSTR,LPSTR,LPSTR); |
| BOOL _IMAGEHLPAPI UpdateDebugInfoFile(LPSTR,LPSTR,LPSTR,PIMAGE_NT_HEADERS); |
| BOOL _IMAGEHLPAPI UpdateDebugInfoFileEx(LPSTR,LPSTR,LPSTR,PIMAGE_NT_HEADERS,DWORD); |
| BOOL _IMAGEHLPAPI BindImage(/*IN*/ LPSTR,/*IN*/ LPSTR,/*IN*/ LPSTR); |
| BOOL _IMAGEHLPAPI BindImageEx(/*IN*/ DWORD,/*IN*/ LPSTR,/*IN*/ LPSTR,/*IN*/ LPSTR,/*IN*/ PIMAGEHLP_STATUS_ROUTINE); |
| BOOL _IMAGEHLPAPI ReBaseImage(/*IN*/ LPSTR,/*IN*/ LPSTR,/*IN*/ BOOL,/*IN*/ BOOL,/*IN*/ BOOL,/*IN*/ ULONG,/*OUT*/ ULONG*,/*OUT*/ ULONG*,/*OUT*/ ULONG*,/*IN OUT*/ ULONG*,/*IN*/ ULONG); |
| |
| PLOADED_IMAGE _IMAGEHLPAPI ImageLoad(LPSTR,LPSTR); |
| BOOL _IMAGEHLPAPI ImageUnload(PLOADED_IMAGE); |
| PIMAGE_NT_HEADERS _IMAGEHLPAPI ImageNtHeader(/*IN*/ PVOID); |
| PVOID _IMAGEHLPAPI ImageDirectoryEntryToData(/*IN*/ PVOID,/*IN*/ BOOLEAN,/*IN*/ USHORT,/*OUT*/ PULONG); |
| PIMAGE_SECTION_HEADER _IMAGEHLPAPI ImageRvaToSection(/*IN*/ PIMAGE_NT_HEADERS,/*IN*/ PVOID,/*IN*/ ULONG); |
| PVOID _IMAGEHLPAPI ImageRvaToVa(/*IN*/ PIMAGE_NT_HEADERS,/*IN*/ PVOID,/*IN*/ ULONG,/*IN OUT*/ PIMAGE_SECTION_HEADER*); |
| BOOL _IMAGEHLPAPI MapAndLoad(LPSTR,LPSTR,PLOADED_IMAGE,BOOL,BOOL); |
| BOOL _IMAGEHLPAPI GetImageConfigInformation(PLOADED_IMAGE,PIMAGE_LOAD_CONFIG_DIRECTORY); |
| DWORD _IMAGEHLPAPI GetImageUnusedHeaderBytes(PLOADED_IMAGE,LPDWORD); |
| BOOL _IMAGEHLPAPI SetImageConfigInformation(PLOADED_IMAGE,PIMAGE_LOAD_CONFIG_DIRECTORY); |
| BOOL _IMAGEHLPAPI UnMapAndLoad(PLOADED_IMAGE); |
| PIMAGE_DEBUG_INFORMATION _IMAGEHLPAPI MapDebugInformation(HANDLE,LPSTR,LPSTR,DWORD); |
| BOOL _IMAGEHLPAPI UnmapDebugInformation(PIMAGE_DEBUG_INFORMATION); |
| HANDLE _IMAGEHLPAPI FindExecutableImage(LPSTR,LPSTR,LPSTR); |
| BOOL _IMAGEHLPAPI SearchTreeForFile(LPSTR,LPSTR,LPSTR); |
| BOOL _IMAGEHLPAPI MakeSureDirectoryPathExists(LPCSTR); |
| DWORD _IMAGEHLPAPI WINAPI UnDecorateSymbolName(LPCSTR,LPSTR,DWORD, DWORD); |
| BOOL |
| _IMAGEHLPAPI |
| StackWalk(DWORD,HANDLE,HANDLE,LPSTACKFRAME,LPVOID,PREAD_PROCESS_MEMORY_ROUTINE,PFUNCTION_TABLE_ACCESS_ROUTINE,PGET_MODULE_BASE_ROUTINE,PTRANSLATE_ADDRESS_ROUTINE); |
| LPAPI_VERSION _IMAGEHLPAPI ImagehlpApiVersion(VOID); |
| LPAPI_VERSION _IMAGEHLPAPI ImagehlpApiVersionEx(LPAPI_VERSION); |
| DWORD _IMAGEHLPAPI GetTimestampForLoadedLibrary(HMODULE); |
| BOOL _IMAGEHLPAPI RemovePrivateCvSymbolic(PCHAR,PCHAR*,ULONG*); |
| VOID _IMAGEHLPAPI RemoveRelocations(PCHAR); |
| DWORD _IMAGEHLPAPI SymSetOptions(/*IN*/ DWORD); |
| DWORD _IMAGEHLPAPI SymGetOptions(VOID); |
| BOOL _IMAGEHLPAPI SymCleanup(/*IN*/ HANDLE); |
| BOOL _IMAGEHLPAPI SymEnumerateModules(/*IN*/ HANDLE,/*IN*/ PSYM_ENUMMODULES_CALLBACK,/*IN*/ PVOID); |
| BOOL _IMAGEHLPAPI SymEnumerateSymbols(/*IN*/ HANDLE,/*IN*/ DWORD,/*IN*/ PSYM_ENUMSYMBOLS_CALLBACK,/*IN*/ PVOID); |
| BOOL _IMAGEHLPAPI EnumerateLoadedModules(/*IN*/ HANDLE,/*IN*/ PENUMLOADED_MODULES_CALLBACK,/*IN*/ PVOID); |
| LPVOID _IMAGEHLPAPI SymFunctionTableAccess(HANDLE,DWORD); |
| BOOL _IMAGEHLPAPI SymGetModuleInfo(/*IN*/ HANDLE,/*IN*/ DWORD,/*OUT*/ PIMAGEHLP_MODULE); |
| DWORD _IMAGEHLPAPI SymGetModuleBase(/*IN*/ HANDLE,/*IN*/ DWORD); |
| BOOL _IMAGEHLPAPI SymGetSymFromAddr(/*IN*/ HANDLE,/*IN*/ DWORD,/*OUT*/ PDWORD,/*OUT*/ PIMAGEHLP_SYMBOL); |
| BOOL _IMAGEHLPAPI SymGetSymFromName(/*IN*/ HANDLE,/*IN*/ LPSTR,/*OUT*/ PIMAGEHLP_SYMBOL); |
| BOOL _IMAGEHLPAPI SymGetSymNext(/*IN*/ HANDLE,/*IN OUT*/ PIMAGEHLP_SYMBOL); |
| BOOL _IMAGEHLPAPI SymGetSymPrev(/*IN*/ HANDLE,/*IN OUT*/ PIMAGEHLP_SYMBOL); |
| BOOL _IMAGEHLPAPI SymGetLineFromAddr(/*IN*/ HANDLE,/*IN*/ DWORD,/*OUT*/ PDWORD,/*OUT*/ PIMAGEHLP_LINE); |
| BOOL _IMAGEHLPAPI SymGetLineFromName(/*IN*/ HANDLE,/*IN*/ LPSTR,/*IN*/ LPSTR,/*IN*/ DWORD,/*OUT*/ PLONG,/*IN OUT*/ PIMAGEHLP_LINE); |
| BOOL _IMAGEHLPAPI SymGetLineNext(/*IN*/ HANDLE,/*IN OUT*/ PIMAGEHLP_LINE); |
| BOOL _IMAGEHLPAPI SymGetLinePrev(/*IN*/ HANDLE,/*IN OUT*/ PIMAGEHLP_LINE); |
| BOOL _IMAGEHLPAPI SymMatchFileName(/*IN*/ LPSTR,/*IN*/ LPSTR,/*OUT*/ LPSTR*,/*OUT*/ LPSTR*); |
| BOOL _IMAGEHLPAPI SymInitialize(/*IN*/ HANDLE,/*IN*/ LPSTR,/*IN*/ BOOL); |
| BOOL _IMAGEHLPAPI SymGetSearchPath(/*IN*/ HANDLE,/*OUT*/ LPSTR,/*IN*/ DWORD); |
| BOOL _IMAGEHLPAPI SymSetSearchPath(/*IN*/ HANDLE,/*IN*/ LPSTR); |
| BOOL _IMAGEHLPAPI SymLoadModule(/*IN*/ HANDLE,/*IN*/ HANDLE,/*IN*/ PSTR,/*IN*/ PSTR,/*IN*/ DWORD,/*IN*/ DWORD); |
| BOOL _IMAGEHLPAPI SymUnloadModule(/*IN*/ HANDLE,/*IN*/ DWORD); |
| BOOL _IMAGEHLPAPI SymUnDName(/*IN*/ PIMAGEHLP_SYMBOL,/*OUT*/ LPSTR,/*IN*/ DWORD); |
| BOOL _IMAGEHLPAPI SymRegisterCallback(/*IN*/ HANDLE,/*IN*/ PSYMBOL_REGISTERED_CALLBACK,/*IN*/ PVOID); |
| BOOL _IMAGEHLPAPI ImageGetDigestStream(/*IN*/ HANDLE,/*IN*/ DWORD,/*IN*/ DIGEST_FUNCTION,/*IN*/ DIGEST_HANDLE); |
| BOOL _IMAGEHLPAPI ImageAddCertificate(/*IN*/ HANDLE,/*IN*/ LPWIN_CERTIFICATE,/*OUT*/ PDWORD); |
| BOOL _IMAGEHLPAPI ImageRemoveCertificate(/*IN*/ HANDLE,/*IN*/ DWORD); |
| BOOL _IMAGEHLPAPI ImageEnumerateCertificates(/*IN*/ HANDLE,/*IN*/ WORD,/*OUT*/ PDWORD,/*IN OUT*/ PDWORD /*OPTIONAL*/,/*IN OUT*/ DWORD /*OPTIONAL*/); |
| BOOL _IMAGEHLPAPI ImageGetCertificateData(/*IN*/ HANDLE,/*IN*/ DWORD,/*OUT*/ LPWIN_CERTIFICATE,/*IN OUT*/ PDWORD); |
| BOOL _IMAGEHLPAPI ImageGetCertificateHeader(/*IN*/ HANDLE,/*IN*/ DWORD,/*IN OUT*/ LPWIN_CERTIFICATE); |
| BOOL _IMAGEHLPAPI CopyPdb(CHAR const*,CHAR const*,BOOL); |
| BOOL _IMAGEHLPAPI RemovePrivateCvSymbolicEx(PCHAR,ULONG,PCHAR*,ULONG*); |
| |
| #endif /* RC_INVOKED */ |
| |
| #ifdef UNICODE |
| #define MapFileAndCheckSum MapFileAndCheckSumW |
| #else |
| #define MapFileAndCheckSum MapFileAndCheckSumA |
| #endif |
| |
| #ifdef __cplusplus |
| } |
| #endif |
| |
| #endif /* _IMAGEHLP_H */ |
| |