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