OSDN Git Service

Insert removed author attribution.
[mingw/mingw-org-wsl.git] / include / imagehlp.h
1 /**
2  * @file imagehlp.h
3  * @copy 2012 MinGW.org project
4  *
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:
11  * 
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
14  * Software.
15  * 
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.
23  */
24 /* Written by Mumit Khan <khan@nanotech.wisc.edu> */
25 #ifndef _IMAGEHLP_H
26 #define _IMAGEHLP_H
27 #pragma GCC system_header
28 #include <_mingw.h>
29
30 #ifdef __cplusplus
31 extern "C" {
32 #endif
33
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
83
84 #define _IMAGEHLPAPI DECLSPEC_IMPORT WINAPI
85
86 #ifndef RC_INVOKED
87
88 typedef enum _IMAGEHLP_STATUS_REASON {
89         BindOutOfMemory,
90         BindRvaToVaFailed,
91         BindNoRoomInImage,
92         BindImportModuleFailed,
93         BindImportProcedureFailed,
94         BindImportModule,
95         BindImportProcedure,
96         BindForwarder,
97         BindForwarderNOT,
98         BindImageModified,
99         BindExpandFileHeaders,
100         BindImageComplete,
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 {
106         LPSTR ModuleName;
107         HANDLE hFile;
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;
115         BOOLEAN fDOSImage;
116         LIST_ENTRY Links;
117         ULONG SizeOfImage;
118 } LOADED_IMAGE,*PLOADED_IMAGE;
119 typedef struct _IMAGE_DEBUG_INFORMATION {
120         LIST_ENTRY List;
121         DWORD Size;
122         PVOID MappedBase;
123         USHORT Machine;
124         USHORT Characteristics;
125         DWORD CheckSum;
126         DWORD ImageBase;
127         DWORD SizeOfImage;
128         DWORD NumberOfSections;
129         PIMAGE_SECTION_HEADER Sections;
130         DWORD ExportedNamesSize;
131         LPSTR ExportedNames;
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;
142         LPSTR ImageFilePath;
143         LPSTR ImageFileName;
144         LPSTR DebugFilePath;
145         DWORD TimeDateStamp;
146         BOOL RomImage;
147         PIMAGE_DEBUG_DIRECTORY DebugDirectory;
148         DWORD NumberOfDebugDirectories;
149         DWORD Reserved[3];
150 } IMAGE_DEBUG_INFORMATION,*PIMAGE_DEBUG_INFORMATION;
151 typedef enum {
152         AddrMode1616,
153         AddrMode1632,
154         AddrModeReal,
155         AddrModeFlat
156 } ADDRESS_MODE;
157 typedef struct _tagADDRESS {
158         DWORD Offset;
159         WORD Segment;
160         ADDRESS_MODE Mode;
161 } ADDRESS,*LPADDRESS;
162 typedef struct _KDHELP {
163         DWORD Thread;
164         DWORD ThCallbackStack;
165         DWORD NextCallback;
166         DWORD FramePointer;
167         DWORD KiCallUserMode;
168         DWORD KeUserCallbackDispatcher;
169         DWORD SystemRangeStart;
170 } KDHELP,*PKDHELP;
171 typedef struct _tagSTACKFRAME {
172         ADDRESS AddrPC; 
173         ADDRESS AddrReturn; 
174         ADDRESS AddrFrame; 
175         ADDRESS AddrStack; 
176         LPVOID FuncTableEntry; 
177         DWORD Params[4]; 
178         BOOL Far; 
179         BOOL Virtual; 
180         DWORD Reserved[3];
181         KDHELP KdHelp;
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 {
188         USHORT MajorVersion;
189         USHORT MinorVersion;
190         USHORT Revision;
191         USHORT Reserved;
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);
197 typedef enum {
198         SymNone,
199         SymCoff,
200         SymCv,
201         SymPdb,
202         SymExport,
203         SymDeferred,
204         SymSym 
205 } SYM_TYPE;
206 typedef struct _IMAGEHLP_SYMBOL {
207         DWORD SizeOfStruct; 
208         DWORD Address; 
209         DWORD Size; 
210         DWORD Flags; 
211         DWORD MaxNameLength; 
212         CHAR Name[1]; 
213 } IMAGEHLP_SYMBOL,*PIMAGEHLP_SYMBOL;
214 typedef struct _IMAGEHLP_MODULE {
215         DWORD SizeOfStruct; 
216         DWORD BaseOfImage; 
217         DWORD ImageSize; 
218         DWORD TimeDateStamp; 
219         DWORD CheckSum; 
220         DWORD NumSyms; 
221         SYM_TYPE SymType; 
222         CHAR ModuleName[32]; 
223         CHAR ImageName[256]; 
224         CHAR LoadedImageName[256]; 
225 } IMAGEHLP_MODULE,*PIMAGEHLP_MODULE;
226 typedef struct _IMAGEHLP_LINE {
227         DWORD SizeOfStruct; 
228         DWORD Key; 
229         DWORD LineNumber; 
230         PCHAR FileName; 
231         DWORD Address; 
232 } IMAGEHLP_LINE,*PIMAGEHLP_LINE;
233 typedef struct _IMAGEHLP_DEFERRED_SYMBOL_LOAD {
234         DWORD SizeOfStruct; 
235         DWORD BaseOfImage; 
236         DWORD CheckSum; 
237         DWORD TimeDateStamp; 
238         CHAR FileName[MAX_PATH]; 
239         BOOLEAN Reparse; 
240 } IMAGEHLP_DEFERRED_SYMBOL_LOAD,*PIMAGEHLP_DEFERRED_SYMBOL_LOAD;
241 typedef struct _IMAGEHLP_DUPLICATE_SYMBOL {
242         DWORD SizeOfStruct; 
243         DWORD NumberOfDups; 
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);
249
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);
262
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); 
280 BOOL
281 _IMAGEHLPAPI
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*);
321
322 #endif /* RC_INVOKED */
323
324 #define MapFileAndCheckSum __AW(MapFileAndCheckSum)
325
326 #ifdef __cplusplus
327 }
328 #endif
329
330 #endif /* _IMAGEHLP_H */
331