1/** 2 * Windows API header module 3 * 4 * Translated from MinGW Windows headers 5 * 6 * Authors: Stewart Gordon 7 * License: $(LINK2 http://www.boost.org/LICENSE_1_0.txt, Boost License 1.0) 8 * Source: $(DRUNTIMESRC core/sys/windows/_imagehlp.d) 9 */ 10module core.sys.windows.imagehlp; 11version (Windows): 12@system: 13 14version (ANSI) {} else version = Unicode; 15 16/* Comment from MinGW 17 NOTE: This strictly does not belong in the Win32 API since it's 18 really part of Platform SDK. However, GDB needs it and we might 19 as well provide it here. 20*/ 21 22import core.sys.windows.winbase, core.sys.windows.windef; 23 24// FIXME: check types of constants 25 26enum API_VERSION_NUMBER = 7; 27 28enum BIND_NO_BOUND_IMPORTS = 1; 29enum BIND_NO_UPDATE = 2; 30enum BIND_ALL_IMAGES = 4; 31enum BIND_CACHE_IMPORT_DLLS = 8; 32 33enum { 34 CBA_DEFERRED_SYMBOL_LOAD_START = 1, 35 CBA_DEFERRED_SYMBOL_LOAD_COMPLETE, 36 CBA_DEFERRED_SYMBOL_LOAD_FAILURE, 37 CBA_SYMBOLS_UNLOADED, 38 CBA_DUPLICATE_SYMBOL 39} 40 41enum CERT_PE_IMAGE_DIGEST_DEBUG_INFO = 1; 42enum CERT_PE_IMAGE_DIGEST_RESOURCES = 2; 43enum CERT_PE_IMAGE_DIGEST_ALL_IMPORT_INFO = 4; 44enum CERT_PE_IMAGE_DIGEST_NON_PE_INFO = 8; 45 46enum CERT_SECTION_TYPE_ANY = 255; 47 48enum { 49 CHECKSUM_SUCCESS = 0, 50 CHECKSUM_OPEN_FAILURE, 51 CHECKSUM_MAP_FAILURE, 52 CHECKSUM_MAPVIEW_FAILURE, 53 CHECKSUM_UNICODE_FAILURE 54} 55 56enum IMAGE_SEPARATION = 65536; 57 58enum SPLITSYM_REMOVE_PRIVATE = 1; 59enum SPLITSYM_EXTRACT_ALL = 2; 60enum SPLITSYM_SYMBOLPATH_IS_SRC = 4; 61 62enum SYMF_OMAP_GENERATED = 1; 63enum SYMF_OMAP_MODIFIED = 2; 64 65enum SYMOPT_CASE_INSENSITIVE = 1; 66enum SYMOPT_UNDNAME = 2; 67enum SYMOPT_DEFERRED_LOADS = 4; 68enum SYMOPT_NO_CPP = 8; 69//const SYMOPT_LOAD_LINES = 16; 70//const SYMOPT_OMAP_FIND_NEAREST = 32; 71public import core.sys.windows.dbghelp_types : 72 SYMOPT_DEFERRED_LOAD, 73 SYMOPT_FAIL_CRITICAL_ERRORS, 74 SYMOPT_LOAD_LINES, 75 SYMOPT_DEBUG; 76 77enum UNDNAME_COMPLETE = 0; 78enum UNDNAME_NO_LEADING_UNDERSCORES = 1; 79enum UNDNAME_NO_MS_KEYWORDS = 2; 80enum UNDNAME_NO_FUNCTION_RETURNS = 4; 81enum UNDNAME_NO_ALLOCATION_MODEL = 8; 82enum UNDNAME_NO_ALLOCATION_LANGUAGE = 16; 83enum UNDNAME_NO_MS_THISTYPE = 32; 84enum UNDNAME_NO_CV_THISTYPE = 64; 85enum UNDNAME_NO_THISTYPE = 96; 86enum UNDNAME_NO_ACCESS_SPECIFIERS = 128; 87enum UNDNAME_NO_THROW_SIGNATURES = 256; 88enum UNDNAME_NO_MEMBER_TYPE = 512; 89enum UNDNAME_NO_RETURN_UDT_MODEL = 1024; 90enum UNDNAME_32_BIT_DECODE = 2048; 91enum UNDNAME_NAME_ONLY = 4096; 92enum UNDNAME_NO_ARGUMENTS = 8192; 93enum UNDNAME_NO_SPECIAL_SYMS = 16384; 94 95enum IMAGEHLP_STATUS_REASON { 96 BindOutOfMemory, 97 BindRvaToVaFailed, 98 BindNoRoomInImage, 99 BindImportModuleFailed, 100 BindImportProcedureFailed, 101 BindImportModule, 102 BindImportProcedure, 103 BindForwarder, 104 BindForwarderNOT, 105 BindImageModified, 106 BindExpandFileHeaders, 107 BindImageComplete, 108 BindMismatchedSymbols, 109 BindSymbolsNotUpdated 110} 111 112struct LOADED_IMAGE { 113 LPSTR ModuleName; 114 HANDLE hFile; 115 PUCHAR MappedAddress; 116 PIMAGE_NT_HEADERS FileHeader; 117 PIMAGE_SECTION_HEADER LastRvaSection; 118 ULONG NumberOfSections; 119 PIMAGE_SECTION_HEADER Sections; 120 ULONG Characteristics; 121 BOOLEAN fSystemImage; 122 BOOLEAN fDOSImage; 123 LIST_ENTRY Links; 124 ULONG SizeOfImage; 125} 126alias LOADED_IMAGE* PLOADED_IMAGE; 127 128struct IMAGE_DEBUG_INFORMATION { 129 LIST_ENTRY List; 130 DWORD Size; 131 PVOID MappedBase; 132 USHORT Machine; 133 USHORT Characteristics; 134 DWORD CheckSum; 135 DWORD ImageBase; 136 DWORD SizeOfImage; 137 DWORD NumberOfSections; 138 PIMAGE_SECTION_HEADER Sections; 139 DWORD ExportedNamesSize; 140 LPSTR ExportedNames; 141 DWORD NumberOfFunctionTableEntries; 142 PIMAGE_FUNCTION_ENTRY FunctionTableEntries; 143 DWORD LowestFunctionStartingAddress; 144 DWORD HighestFunctionEndingAddress; 145 DWORD NumberOfFpoTableEntries; 146 PFPO_DATA FpoTableEntries; 147 DWORD SizeOfCoffSymbols; 148 PIMAGE_COFF_SYMBOLS_HEADER CoffSymbols; 149 DWORD SizeOfCodeViewSymbols; 150 PVOID CodeViewSymbols; 151 LPSTR ImageFilePath; 152 LPSTR ImageFileName; 153 LPSTR DebugFilePath; 154 DWORD TimeDateStamp; 155 BOOL RomImage; 156 PIMAGE_DEBUG_DIRECTORY DebugDirectory; 157 DWORD NumberOfDebugDirectories; 158 DWORD[3] Reserved; 159} 160alias IMAGE_DEBUG_INFORMATION* PIMAGE_DEBUG_INFORMATION; 161 162enum ADDRESS_MODE { 163 AddrMode1616, 164 AddrMode1632, 165 AddrModeReal, 166 AddrModeFlat 167} 168 169struct ADDRESS { 170 DWORD Offset; 171 WORD Segment; 172 ADDRESS_MODE Mode; 173} 174alias ADDRESS* LPADDRESS; 175 176struct KDHELP { 177 DWORD Thread; 178 DWORD ThCallbackStack; 179 DWORD NextCallback; 180 DWORD FramePointer; 181 DWORD KiCallUserMode; 182 DWORD KeUserCallbackDispatcher; 183 DWORD SystemRangeStart; 184 DWORD ThCallbackBStore; 185 DWORD KiUserExceptionDispatcher; 186 DWORD StackBase; 187 DWORD StackLimit; 188 DWORD[5] Reserved; 189} 190alias KDHELP* PKDHELP; 191 192struct STACKFRAME { 193 ADDRESS AddrPC; 194 ADDRESS AddrReturn; 195 ADDRESS AddrFrame; 196 ADDRESS AddrStack; 197 LPVOID FuncTableEntry; 198 DWORD[4] Params; 199 BOOL Far; 200 BOOL Virtual; 201 DWORD[3] Reserved; 202 KDHELP KdHelp; 203 ADDRESS AddrBStore; 204} 205alias STACKFRAME* LPSTACKFRAME; 206 207/* 208struct API_VERSION { 209 USHORT MajorVersion; 210 USHORT MinorVersion; 211 USHORT Revision; 212 USHORT Reserved; 213} 214*/ 215public import core.sys.windows.dbghelp_types : API_VERSION; 216alias API_VERSION* LPAPI_VERSION; 217 218enum SYM_TYPE { 219 SymNone, 220 SymCoff, 221 SymCv, 222 SymPdb, 223 SymExport, 224 SymDeferred, 225 SymSym 226} 227 228struct IMAGEHLP_SYMBOL { 229 DWORD SizeOfStruct; 230 DWORD Address; 231 DWORD Size; 232 DWORD Flags; 233 DWORD MaxNameLength; 234 CHAR[1] Name = 0; 235} 236alias IMAGEHLP_SYMBOL* PIMAGEHLP_SYMBOL; 237 238struct IMAGEHLP_MODULE { 239 DWORD SizeOfStruct; 240 DWORD BaseOfImage; 241 DWORD ImageSize; 242 DWORD TimeDateStamp; 243 DWORD CheckSum; 244 DWORD NumSyms; 245 SYM_TYPE SymType; 246 CHAR[32] ModuleName = 0; 247 CHAR[256] ImageName = 0; 248 CHAR[256] LoadedImageName = 0; 249} 250alias IMAGEHLP_MODULE* PIMAGEHLP_MODULE; 251 252struct IMAGEHLP_LINE { 253 DWORD SizeOfStruct; 254 DWORD Key; 255 DWORD LineNumber; 256 PCHAR FileName; 257 DWORD Address; 258} 259alias IMAGEHLP_LINE* PIMAGEHLP_LINE; 260 261struct IMAGEHLP_DEFERRED_SYMBOL_LOAD { 262 DWORD SizeOfStruct; 263 DWORD BaseOfImage; 264 DWORD CheckSum; 265 DWORD TimeDateStamp; 266 CHAR[MAX_PATH] FileName = 0; 267 BOOLEAN Reparse; 268} 269alias IMAGEHLP_DEFERRED_SYMBOL_LOAD* PIMAGEHLP_DEFERRED_SYMBOL_LOAD; 270 271struct IMAGEHLP_DUPLICATE_SYMBOL { 272 DWORD SizeOfStruct; 273 DWORD NumberOfDups; 274 PIMAGEHLP_SYMBOL Symbol; 275 ULONG SelectedSymbol; 276} 277alias IMAGEHLP_DUPLICATE_SYMBOL* PIMAGEHLP_DUPLICATE_SYMBOL; 278 279mixin DECLARE_HANDLE!("DIGEST_HANDLE"); 280 281extern (Windows) { 282 alias BOOL function(IMAGEHLP_STATUS_REASON, LPSTR, LPSTR, ULONG_PTR, ULONG_PTR) 283 PIMAGEHLP_STATUS_ROUTINE; 284 alias BOOL function(HANDLE , LPCVOID, LPVOID, DWORD, LPDWORD) 285 PREAD_PROCESS_MEMORY_ROUTINE; 286 alias LPVOID function(HANDLE, DWORD) PFUNCTION_TABLE_ACCESS_ROUTINE; 287 alias DWORD function(HANDLE, DWORD) PGET_MODULE_BASE_ROUTINE; 288 alias DWORD function(HANDLE, HANDLE, LPADDRESS) 289 PTRANSLATE_ADDRESS_ROUTINE; 290 alias BOOL function(LPSTR, ULONG, PVOID) PSYM_ENUMMODULES_CALLBACK; 291 alias BOOL function(LPSTR, ULONG, ULONG, PVOID) PSYM_ENUMSYMBOLS_CALLBACK; 292 alias BOOL function(LPSTR, ULONG, ULONG, PVOID) 293 PENUMLOADED_MODULES_CALLBACK; 294 alias BOOL function(HANDLE, ULONG, PVOID, PVOID) 295 PSYMBOL_REGISTERED_CALLBACK; 296 alias BOOL function(DIGEST_HANDLE refdata, PBYTE pData, DWORD dwLength) 297 DIGEST_FUNCTION; 298 299 PIMAGE_NT_HEADERS CheckSumMappedFile(LPVOID, DWORD, LPDWORD, LPDWORD); 300 DWORD MapFileAndCheckSumA(LPSTR, LPDWORD, LPDWORD); 301 DWORD MapFileAndCheckSumW(PWSTR, LPDWORD, LPDWORD); 302 BOOL TouchFileTimes(HANDLE, LPSYSTEMTIME); 303 BOOL SplitSymbols(LPSTR, LPSTR, LPSTR, DWORD); 304 HANDLE FindDebugInfoFile(LPSTR, LPSTR, LPSTR); 305 HANDLE FindExecutableImage(LPSTR, LPSTR, LPSTR); 306 BOOL UpdateDebugInfoFile(LPSTR, LPSTR, LPSTR, PIMAGE_NT_HEADERS); 307 BOOL UpdateDebugInfoFileEx(LPSTR, LPSTR, LPSTR, PIMAGE_NT_HEADERS, DWORD); 308 BOOL BindImage(LPSTR, LPSTR, LPSTR); 309 BOOL BindImageEx(DWORD, LPSTR, LPSTR, LPSTR, PIMAGEHLP_STATUS_ROUTINE); 310 BOOL ReBaseImage(LPSTR, LPSTR, BOOL, BOOL, BOOL, ULONG, ULONG*, ULONG_PTR*, 311 ULONG*, ULONG_PTR*, ULONG); 312 PLOADED_IMAGE ImageLoad(LPSTR, LPSTR); 313 BOOL ImageUnload(PLOADED_IMAGE); 314 PIMAGE_NT_HEADERS ImageNtHeader(PVOID); 315 PVOID ImageDirectoryEntryToData(PVOID, BOOLEAN, USHORT, PULONG); 316 PIMAGE_SECTION_HEADER ImageRvaToSection(PIMAGE_NT_HEADERS, PVOID, ULONG); 317 PVOID ImageRvaToVa(PIMAGE_NT_HEADERS, PVOID, ULONG, 318 PIMAGE_SECTION_HEADER*); 319 BOOL MapAndLoad(LPSTR, LPSTR, PLOADED_IMAGE, BOOL, BOOL); 320 BOOL GetImageConfigInformation(PLOADED_IMAGE, 321 PIMAGE_LOAD_CONFIG_DIRECTORY); 322 DWORD GetImageUnusedHeaderBytes(PLOADED_IMAGE, LPDWORD); 323 BOOL SetImageConfigInformation(PLOADED_IMAGE, 324 PIMAGE_LOAD_CONFIG_DIRECTORY); 325 BOOL UnMapAndLoad(PLOADED_IMAGE); 326 PIMAGE_DEBUG_INFORMATION MapDebugInformation(HANDLE, LPSTR, LPSTR, DWORD); 327 BOOL UnmapDebugInformation(PIMAGE_DEBUG_INFORMATION); 328 HANDLE FindExecutableImage(LPSTR, LPSTR, LPSTR); 329 BOOL SearchTreeForFile(LPSTR, LPSTR, LPSTR); 330 BOOL MakeSureDirectoryPathExists(LPCSTR); 331 DWORD UnDecorateSymbolName(LPCSTR, LPSTR, DWORD, DWORD); 332 BOOL StackWalk(DWORD, HANDLE, HANDLE, LPSTACKFRAME, LPVOID, 333 PREAD_PROCESS_MEMORY_ROUTINE, PFUNCTION_TABLE_ACCESS_ROUTINE, 334 PGET_MODULE_BASE_ROUTINE, PTRANSLATE_ADDRESS_ROUTINE); 335 LPAPI_VERSION ImagehlpApiVersion(); 336 LPAPI_VERSION ImagehlpApiVersionEx(LPAPI_VERSION); 337 DWORD GetTimestampForLoadedLibrary(HMODULE); 338 BOOL RemovePrivateCvSymbolic(PCHAR, PCHAR*, ULONG*); 339 VOID RemoveRelocations(PCHAR); 340 DWORD SymSetOptions(DWORD); 341 DWORD SymGetOptions(); 342 BOOL SymCleanup(HANDLE); 343 BOOL SymEnumerateModules(HANDLE, PSYM_ENUMMODULES_CALLBACK, PVOID); 344 BOOL SymEnumerateSymbols(HANDLE, DWORD, PSYM_ENUMSYMBOLS_CALLBACK, PVOID); 345 BOOL EnumerateLoadedModules(HANDLE, PENUMLOADED_MODULES_CALLBACK, PVOID); 346 LPVOID SymFunctionTableAccess(HANDLE, DWORD); 347 BOOL SymGetModuleInfo(HANDLE, DWORD, PIMAGEHLP_MODULE); 348 DWORD SymGetModuleBase(HANDLE, DWORD); 349 BOOL SymGetSymFromAddr(HANDLE, DWORD, PDWORD, PIMAGEHLP_SYMBOL); 350 BOOL SymGetSymFromName(HANDLE, LPSTR, PIMAGEHLP_SYMBOL); 351 BOOL SymGetSymNext(HANDLE, PIMAGEHLP_SYMBOL); 352 BOOL SymGetSymPrev(HANDLE, PIMAGEHLP_SYMBOL); 353 BOOL SymGetLineFromAddr(HANDLE, DWORD, PDWORD, PIMAGEHLP_LINE); 354 BOOL SymGetLineFromName(HANDLE, LPSTR, LPSTR, DWORD, PLONG, 355 PIMAGEHLP_LINE); 356 BOOL SymGetLineNext(HANDLE, PIMAGEHLP_LINE); 357 BOOL SymGetLinePrev(HANDLE, PIMAGEHLP_LINE); 358 BOOL SymMatchFileName(LPSTR, LPSTR, LPSTR*, LPSTR*); 359 BOOL SymInitialize(HANDLE, LPSTR, BOOL); 360 BOOL SymGetSearchPath(HANDLE, LPSTR, DWORD); 361 BOOL SymSetSearchPath(HANDLE, LPSTR); 362 BOOL SymLoadModule(HANDLE, HANDLE, PSTR, PSTR, DWORD, DWORD); 363 BOOL SymUnloadModule(HANDLE, DWORD); 364 BOOL SymUnDName(PIMAGEHLP_SYMBOL, LPSTR, DWORD); 365 BOOL SymRegisterCallback(HANDLE, PSYMBOL_REGISTERED_CALLBACK, PVOID); 366 BOOL ImageGetDigestStream(HANDLE, DWORD, DIGEST_FUNCTION, DIGEST_HANDLE); 367 BOOL ImageAddCertificate(HANDLE, LPWIN_CERTIFICATE, PDWORD); 368 BOOL ImageRemoveCertificate(HANDLE, DWORD); 369 BOOL ImageEnumerateCertificates(HANDLE, WORD, PDWORD, PDWORD, DWORD); 370 BOOL ImageGetCertificateData(HANDLE, DWORD, LPWIN_CERTIFICATE, PDWORD); 371 BOOL ImageGetCertificateHeader(HANDLE, DWORD, LPWIN_CERTIFICATE); 372 BOOL CopyPdb(CHAR*, CHAR*, BOOL); 373 BOOL RemovePrivateCvSymbolicEx(PCHAR, ULONG, PCHAR*, ULONG*); 374} 375 376version (Unicode) { 377 alias MapFileAndCheckSumW MapFileAndCheckSum; 378} else { 379 alias MapFileAndCheckSumA MapFileAndCheckSum; 380} 381