3 * Copyright 2012, 2013 MinGW.org project
5 * Permission is hereby granted, free of charge, to any person obtaining a
6 * copy of this software and associated documentation files (the "Software"),
7 * to deal in the Software without restriction, including without limitation
8 * the rights to use, copy, modify, merge, publish, distribute, sublicense,
9 * and/or sell copies of the Software, and to permit persons to whom the
10 * Software is furnished to do so, subject to the following conditions:
12 * The above copyright notice and this permission notice (including the next
13 * paragraph) shall be included in all copies or substantial portions of the
16 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
17 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
18 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
19 * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
20 * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
21 * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
22 * DEALINGS IN THE SOFTWARE.
24 /* Written by Mumit Khan <khan@nanotech.wisc.edu> */
27 #pragma GCC system_header
34 #define API_VERSION_NUMBER 7
35 #define BIND_NO_BOUND_IMPORTS 0x00000001
36 #define BIND_NO_UPDATE 0x00000002
37 #define BIND_ALL_IMAGES 0x00000004
38 #define BIND_CACHE_IMPORT_DLLS 0x00000008
39 #define CBA_DEFERRED_SYMBOL_LOAD_START 1
40 #define CBA_DEFERRED_SYMBOL_LOAD_COMPLETE 2
41 #define CBA_DEFERRED_SYMBOL_LOAD_FAILURE 3
42 #define CBA_SYMBOLS_UNLOADED 4
43 #define CBA_DUPLICATE_SYMBOL 5
44 #define CERT_PE_IMAGE_DIGEST_DEBUG_INFO 1
45 #define CERT_PE_IMAGE_DIGEST_RESOURCES 2
46 #define CERT_PE_IMAGE_DIGEST_ALL_IMPORT_INFO 4
47 #define CERT_PE_IMAGE_DIGEST_NON_PE_INFO 8
48 #define CERT_SECTION_TYPE_ANY 255
49 #define CHECKSUM_SUCCESS 0
50 #define CHECKSUM_OPEN_FAILURE 1
51 #define CHECKSUM_MAP_FAILURE 2
52 #define CHECKSUM_MAPVIEW_FAILURE 3
53 #define CHECKSUM_UNICODE_FAILURE 4
54 #define IMAGE_SEPARATION 65536
55 #define SPLITSYM_REMOVE_PRIVATE 1
56 #define SPLITSYM_EXTRACT_ALL 2
57 #define SPLITSYM_SYMBOLPATH_IS_SRC 4
58 #define SYMF_OMAP_GENERATED 1
59 #define SYMF_OMAP_MODIFIED 2
60 #define SYMOPT_CASE_INSENSITIVE 1
61 #define SYMOPT_UNDNAME 2
62 #define SYMOPT_DEFERRED_LOADS 4
63 #define SYMOPT_NO_CPP 8
64 #define SYMOPT_LOAD_LINES 16
65 #define SYMOPT_OMAP_FIND_NEAREST 32
66 #define UNDNAME_COMPLETE 0
67 #define UNDNAME_NO_LEADING_UNDERSCORES 1
68 #define UNDNAME_NO_MS_KEYWORDS 2
69 #define UNDNAME_NO_FUNCTION_RETURNS 4
70 #define UNDNAME_NO_ALLOCATION_MODEL 8
71 #define UNDNAME_NO_ALLOCATION_LANGUAGE 16
72 #define UNDNAME_NO_MS_THISTYPE 32
73 #define UNDNAME_NO_CV_THISTYPE 64
74 #define UNDNAME_NO_THISTYPE 96
75 #define UNDNAME_NO_ACCESS_SPECIFIERS 128
76 #define UNDNAME_NO_THROW_SIGNATURES 256
77 #define UNDNAME_NO_MEMBER_TYPE 512
78 #define UNDNAME_NO_RETURN_UDT_MODEL 1024
79 #define UNDNAME_32_BIT_DECODE 2048
80 #define UNDNAME_NAME_ONLY 4096
81 #define UNDNAME_NO_ARGUMENTS 8192
82 #define UNDNAME_NO_SPECIAL_SYMS 16384
84 #define _IMAGEHLPAPI DECLSPEC_IMPORT WINAPI
88 typedef enum _IMAGEHLP_STATUS_REASON {
92 BindImportModuleFailed,
93 BindImportProcedureFailed,
99 BindExpandFileHeaders,
101 BindMismatchedSymbols,
102 BindSymbolsNotUpdated
103 } IMAGEHLP_STATUS_REASON;
104 typedef BOOL(STDCALL*PIMAGEHLP_STATUS_ROUTINE)(IMAGEHLP_STATUS_REASON,LPSTR,LPSTR,ULONG,ULONG);
105 typedef struct _LOADED_IMAGE {
108 PUCHAR MappedAddress;
109 PIMAGE_NT_HEADERS FileHeader;
110 PIMAGE_SECTION_HEADER LastRvaSection;
111 ULONG NumberOfSections;
112 PIMAGE_SECTION_HEADER Sections;
113 ULONG Characteristics;
114 BOOLEAN fSystemImage;
118 } LOADED_IMAGE,*PLOADED_IMAGE;
119 typedef struct _IMAGE_DEBUG_INFORMATION {
124 USHORT Characteristics;
128 DWORD NumberOfSections;
129 PIMAGE_SECTION_HEADER Sections;
130 DWORD ExportedNamesSize;
132 DWORD NumberOfFunctionTableEntries;
133 PIMAGE_FUNCTION_ENTRY FunctionTableEntries;
134 DWORD LowestFunctionStartingAddress;
135 DWORD HighestFunctionEndingAddress;
136 DWORD NumberOfFpoTableEntries;
137 PFPO_DATA FpoTableEntries;
138 DWORD SizeOfCoffSymbols;
139 PIMAGE_COFF_SYMBOLS_HEADER CoffSymbols;
140 DWORD SizeOfCodeViewSymbols;
141 PVOID CodeViewSymbols;
147 PIMAGE_DEBUG_DIRECTORY DebugDirectory;
148 DWORD NumberOfDebugDirectories;
150 } IMAGE_DEBUG_INFORMATION,*PIMAGE_DEBUG_INFORMATION;
157 typedef struct _tagADDRESS {
161 } ADDRESS,*LPADDRESS;
162 typedef struct _KDHELP {
164 DWORD ThCallbackStack;
167 DWORD KiCallUserMode;
168 DWORD KeUserCallbackDispatcher;
169 DWORD SystemRangeStart;
171 typedef struct _tagSTACKFRAME {
176 LPVOID FuncTableEntry;
182 } STACKFRAME,*LPSTACKFRAME;
183 typedef BOOL(STDCALL*PREAD_PROCESS_MEMORY_ROUTINE)(HANDLE,DWORD,PVOID,DWORD,PDWORD);
184 typedef LPVOID(STDCALL*PFUNCTION_TABLE_ACCESS_ROUTINE)(HANDLE,DWORD);
185 typedef DWORD(STDCALL*PGET_MODULE_BASE_ROUTINE)(HANDLE,DWORD);
186 typedef DWORD(STDCALL*PTRANSLATE_ADDRESS_ROUTINE)(HANDLE,HANDLE,LPADDRESS);
187 typedef struct API_VERSION {
192 } API_VERSION,*LPAPI_VERSION;
193 typedef BOOL(CALLBACK*PSYM_ENUMMODULES_CALLBACK)(LPSTR,ULONG,PVOID);
194 typedef BOOL(CALLBACK*PSYM_ENUMSYMBOLS_CALLBACK)(LPSTR,ULONG,ULONG,PVOID);
195 typedef BOOL(CALLBACK*PENUMLOADED_MODULES_CALLBACK)(LPSTR,ULONG,ULONG,PVOID);
196 typedef BOOL(CALLBACK*PSYMBOL_REGISTERED_CALLBACK)(HANDLE,ULONG,PVOID,PVOID);
206 typedef struct _IMAGEHLP_SYMBOL {
213 } IMAGEHLP_SYMBOL,*PIMAGEHLP_SYMBOL;
214 typedef struct _IMAGEHLP_MODULE {
224 CHAR LoadedImageName[256];
225 } IMAGEHLP_MODULE,*PIMAGEHLP_MODULE;
226 typedef struct _IMAGEHLP_LINE {
232 } IMAGEHLP_LINE,*PIMAGEHLP_LINE;
233 typedef struct _IMAGEHLP_DEFERRED_SYMBOL_LOAD {
238 CHAR FileName[MAX_PATH];
240 } IMAGEHLP_DEFERRED_SYMBOL_LOAD,*PIMAGEHLP_DEFERRED_SYMBOL_LOAD;
241 typedef struct _IMAGEHLP_DUPLICATE_SYMBOL {
244 PIMAGEHLP_SYMBOL Symbol;
245 ULONG SelectedSymbol;
246 } IMAGEHLP_DUPLICATE_SYMBOL,*PIMAGEHLP_DUPLICATE_SYMBOL;
247 typedef PVOID DIGEST_HANDLE;
248 typedef BOOL(WINAPI*DIGEST_FUNCTION)(DIGEST_HANDLE refdata,PBYTE pData,DWORD dwLength);
250 PIMAGE_NT_HEADERS _IMAGEHLPAPI CheckSumMappedFile(LPVOID,DWORD,LPDWORD,LPDWORD);
251 DWORD _IMAGEHLPAPI MapFileAndCheckSumA(LPSTR,LPDWORD,LPDWORD);
252 DWORD _IMAGEHLPAPI MapFileAndCheckSumW(PWSTR,LPDWORD,LPDWORD);
253 BOOL _IMAGEHLPAPI TouchFileTimes(HANDLE,LPSYSTEMTIME);
254 BOOL _IMAGEHLPAPI SplitSymbols(LPSTR,LPSTR,LPSTR,DWORD);
255 HANDLE _IMAGEHLPAPI FindDebugInfoFile(LPSTR,LPSTR,LPSTR);
256 HANDLE _IMAGEHLPAPI FindExecutableImage(LPSTR,LPSTR,LPSTR);
257 BOOL _IMAGEHLPAPI UpdateDebugInfoFile(LPSTR,LPSTR,LPSTR,PIMAGE_NT_HEADERS);
258 BOOL _IMAGEHLPAPI UpdateDebugInfoFileEx(LPSTR,LPSTR,LPSTR,PIMAGE_NT_HEADERS,DWORD);
259 BOOL _IMAGEHLPAPI BindImage(/*IN*/ LPSTR,/*IN*/ LPSTR,/*IN*/ LPSTR);
260 BOOL _IMAGEHLPAPI BindImageEx(/*IN*/ DWORD,/*IN*/ LPSTR,/*IN*/ LPSTR,/*IN*/ LPSTR,/*IN*/ PIMAGEHLP_STATUS_ROUTINE);
261 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);
263 PLOADED_IMAGE _IMAGEHLPAPI ImageLoad(LPSTR,LPSTR);
264 BOOL _IMAGEHLPAPI ImageUnload(PLOADED_IMAGE);
265 PIMAGE_NT_HEADERS _IMAGEHLPAPI ImageNtHeader(/*IN*/ PVOID);
266 PVOID _IMAGEHLPAPI ImageDirectoryEntryToData(/*IN*/ PVOID,/*IN*/ BOOLEAN,/*IN*/ USHORT,/*OUT*/ PULONG);
267 PIMAGE_SECTION_HEADER _IMAGEHLPAPI ImageRvaToSection(/*IN*/ PIMAGE_NT_HEADERS,/*IN*/ PVOID,/*IN*/ ULONG);
268 PVOID _IMAGEHLPAPI ImageRvaToVa(/*IN*/ PIMAGE_NT_HEADERS,/*IN*/ PVOID,/*IN*/ ULONG,/*IN OUT*/ PIMAGE_SECTION_HEADER*);
269 BOOL _IMAGEHLPAPI MapAndLoad(LPSTR,LPSTR,PLOADED_IMAGE,BOOL,BOOL);
270 BOOL _IMAGEHLPAPI GetImageConfigInformation(PLOADED_IMAGE,PIMAGE_LOAD_CONFIG_DIRECTORY);
271 DWORD _IMAGEHLPAPI GetImageUnusedHeaderBytes(PLOADED_IMAGE,LPDWORD);
272 BOOL _IMAGEHLPAPI SetImageConfigInformation(PLOADED_IMAGE,PIMAGE_LOAD_CONFIG_DIRECTORY);
273 BOOL _IMAGEHLPAPI UnMapAndLoad(PLOADED_IMAGE);
274 PIMAGE_DEBUG_INFORMATION _IMAGEHLPAPI MapDebugInformation(HANDLE,LPSTR,LPSTR,DWORD);
275 BOOL _IMAGEHLPAPI UnmapDebugInformation(PIMAGE_DEBUG_INFORMATION);
276 HANDLE _IMAGEHLPAPI FindExecutableImage(LPSTR,LPSTR,LPSTR);
277 BOOL _IMAGEHLPAPI SearchTreeForFile(LPSTR,LPSTR,LPSTR);
278 BOOL _IMAGEHLPAPI MakeSureDirectoryPathExists(LPCSTR);
279 DWORD _IMAGEHLPAPI WINAPI UnDecorateSymbolName(LPCSTR,LPSTR,DWORD, DWORD);
282 StackWalk(DWORD,HANDLE,HANDLE,LPSTACKFRAME,LPVOID,PREAD_PROCESS_MEMORY_ROUTINE,PFUNCTION_TABLE_ACCESS_ROUTINE,PGET_MODULE_BASE_ROUTINE,PTRANSLATE_ADDRESS_ROUTINE);
283 LPAPI_VERSION _IMAGEHLPAPI ImagehlpApiVersion(VOID);
284 LPAPI_VERSION _IMAGEHLPAPI ImagehlpApiVersionEx(LPAPI_VERSION);
285 DWORD _IMAGEHLPAPI GetTimestampForLoadedLibrary(HMODULE);
286 BOOL _IMAGEHLPAPI RemovePrivateCvSymbolic(PCHAR,PCHAR*,ULONG*);
287 VOID _IMAGEHLPAPI RemoveRelocations(PCHAR);
288 DWORD _IMAGEHLPAPI SymSetOptions(/*IN*/ DWORD);
289 DWORD _IMAGEHLPAPI SymGetOptions(VOID);
290 BOOL _IMAGEHLPAPI SymCleanup(/*IN*/ HANDLE);
291 BOOL _IMAGEHLPAPI SymEnumerateModules(/*IN*/ HANDLE,/*IN*/ PSYM_ENUMMODULES_CALLBACK,/*IN*/ PVOID);
292 BOOL _IMAGEHLPAPI SymEnumerateSymbols(/*IN*/ HANDLE,/*IN*/ DWORD,/*IN*/ PSYM_ENUMSYMBOLS_CALLBACK,/*IN*/ PVOID);
293 BOOL _IMAGEHLPAPI EnumerateLoadedModules(/*IN*/ HANDLE,/*IN*/ PENUMLOADED_MODULES_CALLBACK,/*IN*/ PVOID);
294 LPVOID _IMAGEHLPAPI SymFunctionTableAccess(HANDLE,DWORD);
295 BOOL _IMAGEHLPAPI SymGetModuleInfo(/*IN*/ HANDLE,/*IN*/ DWORD,/*OUT*/ PIMAGEHLP_MODULE);
296 DWORD _IMAGEHLPAPI SymGetModuleBase(/*IN*/ HANDLE,/*IN*/ DWORD);
297 BOOL _IMAGEHLPAPI SymGetSymFromAddr(/*IN*/ HANDLE,/*IN*/ DWORD,/*OUT*/ PDWORD,/*OUT*/ PIMAGEHLP_SYMBOL);
298 BOOL _IMAGEHLPAPI SymGetSymFromName(/*IN*/ HANDLE,/*IN*/ LPSTR,/*OUT*/ PIMAGEHLP_SYMBOL);
299 BOOL _IMAGEHLPAPI SymGetSymNext(/*IN*/ HANDLE,/*IN OUT*/ PIMAGEHLP_SYMBOL);
300 BOOL _IMAGEHLPAPI SymGetSymPrev(/*IN*/ HANDLE,/*IN OUT*/ PIMAGEHLP_SYMBOL);
301 BOOL _IMAGEHLPAPI SymGetLineFromAddr(/*IN*/ HANDLE,/*IN*/ DWORD,/*OUT*/ PDWORD,/*OUT*/ PIMAGEHLP_LINE);
302 BOOL _IMAGEHLPAPI SymGetLineFromName(/*IN*/ HANDLE,/*IN*/ LPSTR,/*IN*/ LPSTR,/*IN*/ DWORD,/*OUT*/ PLONG,/*IN OUT*/ PIMAGEHLP_LINE);
303 BOOL _IMAGEHLPAPI SymGetLineNext(/*IN*/ HANDLE,/*IN OUT*/ PIMAGEHLP_LINE);
304 BOOL _IMAGEHLPAPI SymGetLinePrev(/*IN*/ HANDLE,/*IN OUT*/ PIMAGEHLP_LINE);
305 BOOL _IMAGEHLPAPI SymMatchFileName(/*IN*/ LPSTR,/*IN*/ LPSTR,/*OUT*/ LPSTR*,/*OUT*/ LPSTR*);
306 BOOL _IMAGEHLPAPI SymInitialize(/*IN*/ HANDLE,/*IN*/ LPSTR,/*IN*/ BOOL);
307 BOOL _IMAGEHLPAPI SymGetSearchPath(/*IN*/ HANDLE,/*OUT*/ LPSTR,/*IN*/ DWORD);
308 BOOL _IMAGEHLPAPI SymSetSearchPath(/*IN*/ HANDLE,/*IN*/ LPSTR);
309 BOOL _IMAGEHLPAPI SymLoadModule(/*IN*/ HANDLE,/*IN*/ HANDLE,/*IN*/ PSTR,/*IN*/ PSTR,/*IN*/ DWORD,/*IN*/ DWORD);
310 BOOL _IMAGEHLPAPI SymUnloadModule(/*IN*/ HANDLE,/*IN*/ DWORD);
311 BOOL _IMAGEHLPAPI SymUnDName(/*IN*/ PIMAGEHLP_SYMBOL,/*OUT*/ LPSTR,/*IN*/ DWORD);
312 BOOL _IMAGEHLPAPI SymRegisterCallback(/*IN*/ HANDLE,/*IN*/ PSYMBOL_REGISTERED_CALLBACK,/*IN*/ PVOID);
313 BOOL _IMAGEHLPAPI ImageGetDigestStream(/*IN*/ HANDLE,/*IN*/ DWORD,/*IN*/ DIGEST_FUNCTION,/*IN*/ DIGEST_HANDLE);
314 BOOL _IMAGEHLPAPI ImageAddCertificate(/*IN*/ HANDLE,/*IN*/ LPWIN_CERTIFICATE,/*OUT*/ PDWORD);
315 BOOL _IMAGEHLPAPI ImageRemoveCertificate(/*IN*/ HANDLE,/*IN*/ DWORD);
316 BOOL _IMAGEHLPAPI ImageEnumerateCertificates(/*IN*/ HANDLE,/*IN*/ WORD,/*OUT*/ PDWORD,/*IN OUT*/ PDWORD /*OPTIONAL*/,/*IN OUT*/ DWORD /*OPTIONAL*/);
317 BOOL _IMAGEHLPAPI ImageGetCertificateData(/*IN*/ HANDLE,/*IN*/ DWORD,/*OUT*/ LPWIN_CERTIFICATE,/*IN OUT*/ PDWORD);
318 BOOL _IMAGEHLPAPI ImageGetCertificateHeader(/*IN*/ HANDLE,/*IN*/ DWORD,/*IN OUT*/ LPWIN_CERTIFICATE);
319 BOOL _IMAGEHLPAPI CopyPdb(CHAR const*,CHAR const*,BOOL);
320 BOOL _IMAGEHLPAPI RemovePrivateCvSymbolicEx(PCHAR,ULONG,PCHAR*,ULONG*);
322 #endif /* RC_INVOKED */
324 #define MapFileAndCheckSum __AW(MapFileAndCheckSum)
330 #endif /* _IMAGEHLP_H */