root/trunk/win32/imagehlp.d

Revision 155, 12.2 kB (checked in by Don Clugston, 2 years ago)

Committed on behalf of Stewart.

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