/** * Windows API header module * * Translated from MinGW Windows headers * * Authors: Stewart Gordon * License: $(LINK2 http://www.boost.org/LICENSE_1_0.txt, Boost License 1.0) * Source: $(DRUNTIMESRC core/sys/windows/_imagehlp.d) */ module core.sys.windows.imagehlp; version (Windows): @system: version (ANSI) {} else version = Unicode; /* Comment from MinGW 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. */ import core.sys.windows.winbase, core.sys.windows.windef; // FIXME: check types of constants enum API_VERSION_NUMBER = 7; enum BIND_NO_BOUND_IMPORTS = 1; enum BIND_NO_UPDATE = 2; enum BIND_ALL_IMAGES = 4; enum BIND_CACHE_IMPORT_DLLS = 8; enum { CBA_DEFERRED_SYMBOL_LOAD_START = 1, CBA_DEFERRED_SYMBOL_LOAD_COMPLETE, CBA_DEFERRED_SYMBOL_LOAD_FAILURE, CBA_SYMBOLS_UNLOADED, CBA_DUPLICATE_SYMBOL } enum CERT_PE_IMAGE_DIGEST_DEBUG_INFO = 1; enum CERT_PE_IMAGE_DIGEST_RESOURCES = 2; enum CERT_PE_IMAGE_DIGEST_ALL_IMPORT_INFO = 4; enum CERT_PE_IMAGE_DIGEST_NON_PE_INFO = 8; enum CERT_SECTION_TYPE_ANY = 255; enum { CHECKSUM_SUCCESS = 0, CHECKSUM_OPEN_FAILURE, CHECKSUM_MAP_FAILURE, CHECKSUM_MAPVIEW_FAILURE, CHECKSUM_UNICODE_FAILURE } enum IMAGE_SEPARATION = 65536; enum SPLITSYM_REMOVE_PRIVATE = 1; enum SPLITSYM_EXTRACT_ALL = 2; enum SPLITSYM_SYMBOLPATH_IS_SRC = 4; enum SYMF_OMAP_GENERATED = 1; enum SYMF_OMAP_MODIFIED = 2; enum SYMOPT_CASE_INSENSITIVE = 1; enum SYMOPT_UNDNAME = 2; enum SYMOPT_DEFERRED_LOADS = 4; enum SYMOPT_NO_CPP = 8; //const SYMOPT_LOAD_LINES = 16; //const SYMOPT_OMAP_FIND_NEAREST = 32; public import core.sys.windows.dbghelp_types : SYMOPT_DEFERRED_LOAD, SYMOPT_FAIL_CRITICAL_ERRORS, SYMOPT_LOAD_LINES, SYMOPT_DEBUG; enum UNDNAME_COMPLETE = 0; enum UNDNAME_NO_LEADING_UNDERSCORES = 1; enum UNDNAME_NO_MS_KEYWORDS = 2; enum UNDNAME_NO_FUNCTION_RETURNS = 4; enum UNDNAME_NO_ALLOCATION_MODEL = 8; enum UNDNAME_NO_ALLOCATION_LANGUAGE = 16; enum UNDNAME_NO_MS_THISTYPE = 32; enum UNDNAME_NO_CV_THISTYPE = 64; enum UNDNAME_NO_THISTYPE = 96; enum UNDNAME_NO_ACCESS_SPECIFIERS = 128; enum UNDNAME_NO_THROW_SIGNATURES = 256; enum UNDNAME_NO_MEMBER_TYPE = 512; enum UNDNAME_NO_RETURN_UDT_MODEL = 1024; enum UNDNAME_32_BIT_DECODE = 2048; enum UNDNAME_NAME_ONLY = 4096; enum UNDNAME_NO_ARGUMENTS = 8192; enum UNDNAME_NO_SPECIAL_SYMS = 16384; enum IMAGEHLP_STATUS_REASON { BindOutOfMemory, BindRvaToVaFailed, BindNoRoomInImage, BindImportModuleFailed, BindImportProcedureFailed, BindImportModule, BindImportProcedure, BindForwarder, BindForwarderNOT, BindImageModified, BindExpandFileHeaders, BindImageComplete, BindMismatchedSymbols, BindSymbolsNotUpdated } 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; } alias LOADED_IMAGE* PLOADED_IMAGE; 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[3] Reserved; } alias IMAGE_DEBUG_INFORMATION* PIMAGE_DEBUG_INFORMATION; enum ADDRESS_MODE { AddrMode1616, AddrMode1632, AddrModeReal, AddrModeFlat } struct ADDRESS { DWORD Offset; WORD Segment; ADDRESS_MODE Mode; } alias ADDRESS* LPADDRESS; 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[5] Reserved; } alias KDHELP* PKDHELP; struct STACKFRAME { ADDRESS AddrPC; ADDRESS AddrReturn; ADDRESS AddrFrame; ADDRESS AddrStack; LPVOID FuncTableEntry; DWORD[4] Params; BOOL Far; BOOL Virtual; DWORD[3] Reserved; KDHELP KdHelp; ADDRESS AddrBStore; } alias STACKFRAME* LPSTACKFRAME; /* struct API_VERSION { USHORT MajorVersion; USHORT MinorVersion; USHORT Revision; USHORT Reserved; } */ public import core.sys.windows.dbghelp_types : API_VERSION; alias API_VERSION* LPAPI_VERSION; enum SYM_TYPE { SymNone, SymCoff, SymCv, SymPdb, SymExport, SymDeferred, SymSym } struct IMAGEHLP_SYMBOL { DWORD SizeOfStruct; DWORD Address; DWORD Size; DWORD Flags; DWORD MaxNameLength; CHAR[1] Name = 0; } alias IMAGEHLP_SYMBOL* PIMAGEHLP_SYMBOL; struct IMAGEHLP_MODULE { DWORD SizeOfStruct; DWORD BaseOfImage; DWORD ImageSize; DWORD TimeDateStamp; DWORD CheckSum; DWORD NumSyms; SYM_TYPE SymType; CHAR[32] ModuleName = 0; CHAR[256] ImageName = 0; CHAR[256] LoadedImageName = 0; } alias IMAGEHLP_MODULE* PIMAGEHLP_MODULE; struct IMAGEHLP_LINE { DWORD SizeOfStruct; DWORD Key; DWORD LineNumber; PCHAR FileName; DWORD Address; } alias IMAGEHLP_LINE* PIMAGEHLP_LINE; struct IMAGEHLP_DEFERRED_SYMBOL_LOAD { DWORD SizeOfStruct; DWORD BaseOfImage; DWORD CheckSum; DWORD TimeDateStamp; CHAR[MAX_PATH] FileName = 0; BOOLEAN Reparse; } alias IMAGEHLP_DEFERRED_SYMBOL_LOAD* PIMAGEHLP_DEFERRED_SYMBOL_LOAD; struct IMAGEHLP_DUPLICATE_SYMBOL { DWORD SizeOfStruct; DWORD NumberOfDups; PIMAGEHLP_SYMBOL Symbol; ULONG SelectedSymbol; } alias IMAGEHLP_DUPLICATE_SYMBOL* PIMAGEHLP_DUPLICATE_SYMBOL; mixin DECLARE_HANDLE!("DIGEST_HANDLE"); extern (Windows) { alias BOOL function(IMAGEHLP_STATUS_REASON, LPSTR, LPSTR, ULONG_PTR, ULONG_PTR) PIMAGEHLP_STATUS_ROUTINE; alias BOOL function(HANDLE , LPCVOID, LPVOID, DWORD, LPDWORD) PREAD_PROCESS_MEMORY_ROUTINE; alias LPVOID function(HANDLE, DWORD) PFUNCTION_TABLE_ACCESS_ROUTINE; alias DWORD function(HANDLE, DWORD) PGET_MODULE_BASE_ROUTINE; alias DWORD function(HANDLE, HANDLE, LPADDRESS) PTRANSLATE_ADDRESS_ROUTINE; alias BOOL function(LPSTR, ULONG, PVOID) PSYM_ENUMMODULES_CALLBACK; alias BOOL function(LPSTR, ULONG, ULONG, PVOID) PSYM_ENUMSYMBOLS_CALLBACK; alias BOOL function(LPSTR, ULONG, ULONG, PVOID) PENUMLOADED_MODULES_CALLBACK; alias BOOL function(HANDLE, ULONG, PVOID, PVOID) PSYMBOL_REGISTERED_CALLBACK; alias BOOL function(DIGEST_HANDLE refdata, PBYTE pData, DWORD dwLength) DIGEST_FUNCTION; PIMAGE_NT_HEADERS CheckSumMappedFile(LPVOID, DWORD, LPDWORD, LPDWORD); DWORD MapFileAndCheckSumA(LPSTR, LPDWORD, LPDWORD); DWORD MapFileAndCheckSumW(PWSTR, LPDWORD, LPDWORD); BOOL TouchFileTimes(HANDLE, LPSYSTEMTIME); BOOL SplitSymbols(LPSTR, LPSTR, LPSTR, DWORD); HANDLE FindDebugInfoFile(LPSTR, LPSTR, LPSTR); HANDLE FindExecutableImage(LPSTR, LPSTR, LPSTR); BOOL UpdateDebugInfoFile(LPSTR, LPSTR, LPSTR, PIMAGE_NT_HEADERS); BOOL UpdateDebugInfoFileEx(LPSTR, LPSTR, LPSTR, PIMAGE_NT_HEADERS, DWORD); BOOL BindImage(LPSTR, LPSTR, LPSTR); BOOL BindImageEx(DWORD, LPSTR, LPSTR, LPSTR, PIMAGEHLP_STATUS_ROUTINE); BOOL ReBaseImage(LPSTR, LPSTR, BOOL, BOOL, BOOL, ULONG, ULONG*, ULONG_PTR*, ULONG*, ULONG_PTR*, ULONG); PLOADED_IMAGE ImageLoad(LPSTR, LPSTR); BOOL ImageUnload(PLOADED_IMAGE); PIMAGE_NT_HEADERS ImageNtHeader(PVOID); PVOID ImageDirectoryEntryToData(PVOID, BOOLEAN, USHORT, PULONG); PIMAGE_SECTION_HEADER ImageRvaToSection(PIMAGE_NT_HEADERS, PVOID, ULONG); PVOID ImageRvaToVa(PIMAGE_NT_HEADERS, PVOID, ULONG, PIMAGE_SECTION_HEADER*); BOOL MapAndLoad(LPSTR, LPSTR, PLOADED_IMAGE, BOOL, BOOL); BOOL GetImageConfigInformation(PLOADED_IMAGE, PIMAGE_LOAD_CONFIG_DIRECTORY); DWORD GetImageUnusedHeaderBytes(PLOADED_IMAGE, LPDWORD); BOOL SetImageConfigInformation(PLOADED_IMAGE, PIMAGE_LOAD_CONFIG_DIRECTORY); BOOL UnMapAndLoad(PLOADED_IMAGE); PIMAGE_DEBUG_INFORMATION MapDebugInformation(HANDLE, LPSTR, LPSTR, DWORD); BOOL UnmapDebugInformation(PIMAGE_DEBUG_INFORMATION); HANDLE FindExecutableImage(LPSTR, LPSTR, LPSTR); BOOL SearchTreeForFile(LPSTR, LPSTR, LPSTR); BOOL MakeSureDirectoryPathExists(LPCSTR); DWORD UnDecorateSymbolName(LPCSTR, LPSTR, DWORD, DWORD); BOOL StackWalk(DWORD, HANDLE, HANDLE, LPSTACKFRAME, LPVOID, PREAD_PROCESS_MEMORY_ROUTINE, PFUNCTION_TABLE_ACCESS_ROUTINE, PGET_MODULE_BASE_ROUTINE, PTRANSLATE_ADDRESS_ROUTINE); LPAPI_VERSION ImagehlpApiVersion(); LPAPI_VERSION ImagehlpApiVersionEx(LPAPI_VERSION); DWORD GetTimestampForLoadedLibrary(HMODULE); BOOL RemovePrivateCvSymbolic(PCHAR, PCHAR*, ULONG*); VOID RemoveRelocations(PCHAR); DWORD SymSetOptions(DWORD); DWORD SymGetOptions(); BOOL SymCleanup(HANDLE); BOOL SymEnumerateModules(HANDLE, PSYM_ENUMMODULES_CALLBACK, PVOID); BOOL SymEnumerateSymbols(HANDLE, DWORD, PSYM_ENUMSYMBOLS_CALLBACK, PVOID); BOOL EnumerateLoadedModules(HANDLE, PENUMLOADED_MODULES_CALLBACK, PVOID); LPVOID SymFunctionTableAccess(HANDLE, DWORD); BOOL SymGetModuleInfo(HANDLE, DWORD, PIMAGEHLP_MODULE); DWORD SymGetModuleBase(HANDLE, DWORD); BOOL SymGetSymFromAddr(HANDLE, DWORD, PDWORD, PIMAGEHLP_SYMBOL); BOOL SymGetSymFromName(HANDLE, LPSTR, PIMAGEHLP_SYMBOL); BOOL SymGetSymNext(HANDLE, PIMAGEHLP_SYMBOL); BOOL SymGetSymPrev(HANDLE, PIMAGEHLP_SYMBOL); BOOL SymGetLineFromAddr(HANDLE, DWORD, PDWORD, PIMAGEHLP_LINE); BOOL SymGetLineFromName(HANDLE, LPSTR, LPSTR, DWORD, PLONG, PIMAGEHLP_LINE); BOOL SymGetLineNext(HANDLE, PIMAGEHLP_LINE); BOOL SymGetLinePrev(HANDLE, PIMAGEHLP_LINE); BOOL SymMatchFileName(LPSTR, LPSTR, LPSTR*, LPSTR*); BOOL SymInitialize(HANDLE, LPSTR, BOOL); BOOL SymGetSearchPath(HANDLE, LPSTR, DWORD); BOOL SymSetSearchPath(HANDLE, LPSTR); BOOL SymLoadModule(HANDLE, HANDLE, PSTR, PSTR, DWORD, DWORD); BOOL SymUnloadModule(HANDLE, DWORD); BOOL SymUnDName(PIMAGEHLP_SYMBOL, LPSTR, DWORD); BOOL SymRegisterCallback(HANDLE, PSYMBOL_REGISTERED_CALLBACK, PVOID); BOOL ImageGetDigestStream(HANDLE, DWORD, DIGEST_FUNCTION, DIGEST_HANDLE); BOOL ImageAddCertificate(HANDLE, LPWIN_CERTIFICATE, PDWORD); BOOL ImageRemoveCertificate(HANDLE, DWORD); BOOL ImageEnumerateCertificates(HANDLE, WORD, PDWORD, PDWORD, DWORD); BOOL ImageGetCertificateData(HANDLE, DWORD, LPWIN_CERTIFICATE, PDWORD); BOOL ImageGetCertificateHeader(HANDLE, DWORD, LPWIN_CERTIFICATE); BOOL CopyPdb(CHAR*, CHAR*, BOOL); BOOL RemovePrivateCvSymbolicEx(PCHAR, ULONG, PCHAR*, ULONG*); } version (Unicode) { alias MapFileAndCheckSumW MapFileAndCheckSum; } else { alias MapFileAndCheckSumA MapFileAndCheckSum; }