xref: /netbsd-src/external/gpl3/gcc/dist/libphobos/libdruntime/core/sys/windows/imagehlp.d (revision 0a3071956a3a9fdebdbf7f338cf2d439b45fc728)
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 module core.sys.windows.imagehlp;
version(Windows)11 version (Windows):
12 @system:
13 
14 version (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 
22 import core.sys.windows.winbase, core.sys.windows.windef;
23 
24 // FIXME: check types of constants
25 
26 enum API_VERSION_NUMBER = 7;
27 
28 enum BIND_NO_BOUND_IMPORTS  = 1;
29 enum BIND_NO_UPDATE         = 2;
30 enum BIND_ALL_IMAGES        = 4;
31 enum BIND_CACHE_IMPORT_DLLS = 8;
32 
33 enum {
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 
41 enum CERT_PE_IMAGE_DIGEST_DEBUG_INFO      = 1;
42 enum CERT_PE_IMAGE_DIGEST_RESOURCES       = 2;
43 enum CERT_PE_IMAGE_DIGEST_ALL_IMPORT_INFO = 4;
44 enum CERT_PE_IMAGE_DIGEST_NON_PE_INFO     = 8;
45 
46 enum CERT_SECTION_TYPE_ANY = 255;
47 
48 enum {
49     CHECKSUM_SUCCESS = 0,
50     CHECKSUM_OPEN_FAILURE,
51     CHECKSUM_MAP_FAILURE,
52     CHECKSUM_MAPVIEW_FAILURE,
53     CHECKSUM_UNICODE_FAILURE
54 }
55 
56 enum IMAGE_SEPARATION = 65536;
57 
58 enum SPLITSYM_REMOVE_PRIVATE    = 1;
59 enum SPLITSYM_EXTRACT_ALL       = 2;
60 enum SPLITSYM_SYMBOLPATH_IS_SRC = 4;
61 
62 enum SYMF_OMAP_GENERATED = 1;
63 enum SYMF_OMAP_MODIFIED  = 2;
64 
65 enum SYMOPT_CASE_INSENSITIVE  =  1;
66 enum SYMOPT_UNDNAME           =  2;
67 enum SYMOPT_DEFERRED_LOADS    =  4;
68 enum SYMOPT_NO_CPP            =  8;
69 //const SYMOPT_LOAD_LINES        = 16;
70 //const SYMOPT_OMAP_FIND_NEAREST = 32;
71 public import core.sys.windows.dbghelp_types :
72     SYMOPT_DEFERRED_LOAD,
73     SYMOPT_FAIL_CRITICAL_ERRORS,
74     SYMOPT_LOAD_LINES,
75     SYMOPT_DEBUG;
76 
77 enum UNDNAME_COMPLETE               =     0;
78 enum UNDNAME_NO_LEADING_UNDERSCORES =     1;
79 enum UNDNAME_NO_MS_KEYWORDS         =     2;
80 enum UNDNAME_NO_FUNCTION_RETURNS    =     4;
81 enum UNDNAME_NO_ALLOCATION_MODEL    =     8;
82 enum UNDNAME_NO_ALLOCATION_LANGUAGE =    16;
83 enum UNDNAME_NO_MS_THISTYPE         =    32;
84 enum UNDNAME_NO_CV_THISTYPE         =    64;
85 enum UNDNAME_NO_THISTYPE            =    96;
86 enum UNDNAME_NO_ACCESS_SPECIFIERS   =   128;
87 enum UNDNAME_NO_THROW_SIGNATURES    =   256;
88 enum UNDNAME_NO_MEMBER_TYPE         =   512;
89 enum UNDNAME_NO_RETURN_UDT_MODEL    =  1024;
90 enum UNDNAME_32_BIT_DECODE          =  2048;
91 enum UNDNAME_NAME_ONLY              =  4096;
92 enum UNDNAME_NO_ARGUMENTS           =  8192;
93 enum UNDNAME_NO_SPECIAL_SYMS        = 16384;
94 
95 enum 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 
112 struct 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 }
126 alias LOADED_IMAGE* PLOADED_IMAGE;
127 
128 struct 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 }
160 alias IMAGE_DEBUG_INFORMATION* PIMAGE_DEBUG_INFORMATION;
161 
162 enum ADDRESS_MODE {
163     AddrMode1616,
164     AddrMode1632,
165     AddrModeReal,
166     AddrModeFlat
167 }
168 
169 struct ADDRESS {
170     DWORD        Offset;
171     WORD         Segment;
172     ADDRESS_MODE Mode;
173 }
174 alias ADDRESS* LPADDRESS;
175 
176 struct 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 }
190 alias KDHELP* PKDHELP;
191 
192 struct 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 }
205 alias STACKFRAME* LPSTACKFRAME;
206 
207 /*
208 struct API_VERSION {
209     USHORT MajorVersion;
210     USHORT MinorVersion;
211     USHORT Revision;
212     USHORT Reserved;
213 }
214 */
215 public import core.sys.windows.dbghelp_types : API_VERSION;
216 alias API_VERSION* LPAPI_VERSION;
217 
218 enum SYM_TYPE {
219     SymNone,
220     SymCoff,
221     SymCv,
222     SymPdb,
223     SymExport,
224     SymDeferred,
225     SymSym
226 }
227 
228 struct IMAGEHLP_SYMBOL {
229     DWORD   SizeOfStruct;
230     DWORD   Address;
231     DWORD   Size;
232     DWORD   Flags;
233     DWORD   MaxNameLength;
234     CHAR[1] Name = 0;
235 }
236 alias IMAGEHLP_SYMBOL* PIMAGEHLP_SYMBOL;
237 
238 struct 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 }
250 alias IMAGEHLP_MODULE* PIMAGEHLP_MODULE;
251 
252 struct IMAGEHLP_LINE {
253     DWORD SizeOfStruct;
254     DWORD Key;
255     DWORD LineNumber;
256     PCHAR FileName;
257     DWORD Address;
258 }
259 alias IMAGEHLP_LINE* PIMAGEHLP_LINE;
260 
261 struct 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 }
269 alias IMAGEHLP_DEFERRED_SYMBOL_LOAD* PIMAGEHLP_DEFERRED_SYMBOL_LOAD;
270 
271 struct IMAGEHLP_DUPLICATE_SYMBOL {
272     DWORD            SizeOfStruct;
273     DWORD            NumberOfDups;
274     PIMAGEHLP_SYMBOL Symbol;
275     ULONG            SelectedSymbol;
276 }
277 alias IMAGEHLP_DUPLICATE_SYMBOL* PIMAGEHLP_DUPLICATE_SYMBOL;
278 
279 mixin DECLARE_HANDLE!("DIGEST_HANDLE");
280 
281 extern (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 
version(Unicode)376 version (Unicode) {
377     alias MapFileAndCheckSumW MapFileAndCheckSum;
378 } else {
379     alias MapFileAndCheckSumA MapFileAndCheckSum;
380 }
381