Added some RPC definitions.
[wine] / include / imagehlp.h
1 /*
2  *      imagehlp.h   -       Declarations for IMAGEHLP
3  */
4
5 #ifndef __WINE_IMAGEHLP_H
6 #define __WINE_IMAGEHLP_H
7
8 #include "windef.h"
9 #include "winbase.h"
10
11 #ifdef __cplusplus
12 extern "C" {
13 #endif /* defined(__cplusplus) */
14
15 /***********************************************************************
16  * Types
17  */
18
19 typedef PVOID DIGEST_HANDLE; 
20
21 /***********************************************************************
22  * Enums/Defines
23  */
24
25 typedef enum _IMAGEHLP_STATUS_REASON {
26   BindOutOfMemory,
27   BindRvaToVaFailed,
28   BindNoRoomInImage,
29   BindImportModuleFailed,
30   BindImportProcedureFailed,
31   BindImportModule,
32   BindImportProcedure,
33   BindForwarder,
34   BindForwarderNOT,
35   BindImageModified,
36   BindExpandFileHeaders,
37   BindImageComplete,
38   BindMismatchedSymbols,
39   BindSymbolsNotUpdated
40 } IMAGEHLP_STATUS_REASON;
41
42 #define BIND_NO_BOUND_IMPORTS  0x00000001
43 #define BIND_NO_UPDATE         0x00000002
44 #define BIND_ALL_IMAGES        0x00000004
45 #define BIND_CACHE_IMPORT_DLLS 0x00000008
46
47 #define CERT_PE_IMAGE_DIGEST_DEBUG_INFO      0x01
48 #define CERT_PE_IMAGE_DIGEST_RESOURCES       0x02
49 #define CERT_PE_IMAGE_DIGEST_ALL_IMPORT_INFO 0x04
50 #define CERT_PE_IMAGE_DIGEST_NON_PE_INFO     0x08
51
52 #define CERT_SECTION_TYPE_ANY 0xFF
53
54 #define WIN_CERT_REVISION_1_0 0x0100
55 #define WIN_CERT_REVISION_2_0 0x0200
56
57 #define WIN_CERT_TYPE_X509             0x0001 /* X.509 Certificate */
58 #define WIN_CERT_TYPE_PKCS_SIGNED_DATA 0x0002 /* PKCS SignedData */
59 #define WIN_CERT_TYPE_RESERVED_1       0x0003 /* Reserved */
60
61 #define SPLITSYM_REMOVE_PRIVATE    0x00000001
62 #define SPLITSYM_EXTRACT_ALL       0x00000002
63 #define SPLITSYM_SYMBOLPATH_IS_SRC 0x00000004
64
65 #define FRAME_FPO    0
66 #define FRAME_TRAP   1
67 #define FRAME_TSS    2
68 #define FRAME_NONFPO 3
69
70 #define CHECKSUM_SUCCESS         0
71 #define CHECKSUM_OPEN_FAILURE    1
72 #define CHECKSUM_MAP_FAILURE     2
73 #define CHECKSUM_MAPVIEW_FAILURE 3
74 #define CHECKSUM_UNICODE_FAILURE 4
75
76 typedef enum _ADRESS_MODE {
77   AddrMode1616,
78   AddrMode1632,
79   AddrModeReal,
80   AddrModeFlat
81 } ADDRESS_MODE;
82
83 #define SYMOPT_CASE_INSENSITIVE  0x00000001
84 #define SYMOPT_UNDNAME           0x00000002
85 #define SYMOPT_DEFERRED_LOADS    0x00000004
86 #define SYMOPT_NO_CPP            0x00000008
87 #define SYMOPT_LOAD_LINES        0x00000010
88 #define SYMOPT_OMAP_FIND_NEAREST 0x00000020
89
90 #define SYMF_OMAP_GENERATED   0x00000001
91 #define SYMF_OMAP_MODIFIED    0x00000002
92
93 typedef enum {
94   SymNone,
95   SymCoff,
96   SymCv,
97   SymPdb,
98   SymExport,
99   SymDeferred,
100   SymSym        /* .sym file */
101 } SYM_TYPE;
102
103 #define UNDNAME_COMPLETE               0x0000
104 #define UNDNAME_NO_LEADING_UNDERSCORES 0x0001
105 #define UNDNAME_NO_MS_KEYWORDS         0x0002
106 #define UNDNAME_NO_FUNCTION_RETURNS    0x0004
107 #define UNDNAME_NO_ALLOCATION_MODEL    0x0008
108 #define UNDNAME_NO_ALLOCATION_LANGUAGE 0x0010
109 #define UNDNAME_NO_MS_THISTYPE         0x0020
110 #define UNDNAME_NO_CV_THISTYPE         0x0040
111 #define UNDNAME_NO_THISTYPE            0x0060
112 #define UNDNAME_NO_ACCESS_SPECIFIERS   0x0080
113 #define UNDNAME_NO_THROW_SIGNATURES    0x0100
114 #define UNDNAME_NO_MEMBER_TYPE         0x0200
115 #define UNDNAME_NO_RETURN_UDT_MODEL    0x0400
116 #define UNDNAME_32_BIT_DECODE          0x0800
117 #define UNDNAME_NAME_ONLY              0x1000
118 #define UNDNAME_NO_ARGUMENTS           0x2000
119 #define UNDNAME_NO_SPECIAL_SYMS        0x4000
120
121 #define CBA_DEFERRED_SYMBOL_LOAD_START          0x00000001
122 #define CBA_DEFERRED_SYMBOL_LOAD_COMPLETE       0x00000002
123 #define CBA_DEFERRED_SYMBOL_LOAD_FAILURE        0x00000003
124 #define CBA_SYMBOLS_UNLOADED                    0x00000004
125 #define CBA_DUPLICATE_SYMBOL                    0x00000005
126
127 /***********************************************************************
128  * Structures
129  */
130
131 typedef struct _LOADED_IMAGE {
132   LPSTR                   ModuleName;
133   HANDLE                hFile;
134   PUCHAR                  MappedAddress;
135   PIMAGE_NT_HEADERS     FileHeader;
136   PIMAGE_SECTION_HEADER LastRvaSection;
137   ULONG                   NumberOfSections;
138   PIMAGE_SECTION_HEADER Sections;
139   ULONG                   Characteristics;
140   BOOLEAN                 fSystemImage;
141   BOOLEAN                 fDOSImage;
142   LIST_ENTRY            Links;
143   ULONG                   SizeOfImage;
144 } LOADED_IMAGE, *PLOADED_IMAGE;
145
146 typedef struct _WIN_CERTIFICATE {
147   DWORD dwLength;
148   WORD  wRevision;                   /*  WIN_CERT_REVISON_xxx */ 
149   WORD  wCertificateType;            /*  WIN_CERT_TYPE_xxx */
150   BYTE  bCertificate[ANYSIZE_ARRAY];
151 } WIN_CERTIFICATE, *PWIN_CERTIFICATE;
152
153 typedef struct _API_VERSION {
154   USHORT  MajorVersion;
155   USHORT  MinorVersion;
156   USHORT  Revision;
157   USHORT  Reserved;
158 } API_VERSION, *PAPI_VERSION;
159
160 typedef struct _IMAGE_DEBUG_INFORMATION {
161   LIST_ENTRY List;
162   DWORD        Size;
163   PVOID        MappedBase;
164   USHORT       Machine;
165   USHORT       Characteristics;
166   DWORD        CheckSum;
167   DWORD        ImageBase;
168   DWORD        SizeOfImage;
169   
170   DWORD NumberOfSections;
171   PIMAGE_SECTION_HEADER Sections;
172
173   DWORD ExportedNamesSize;
174   LPSTR ExportedNames;
175
176   DWORD NumberOfFunctionTableEntries;
177   PIMAGE_FUNCTION_ENTRY FunctionTableEntries;
178   DWORD LowestFunctionStartingAddress;
179   DWORD HighestFunctionEndingAddress;
180
181   DWORD NumberOfFpoTableEntries;
182   PFPO_DATA FpoTableEntries;
183
184   DWORD SizeOfCoffSymbols;
185   PIMAGE_COFF_SYMBOLS_HEADER CoffSymbols;
186
187   DWORD SizeOfCodeViewSymbols;
188   PVOID CodeViewSymbols;
189
190   LPSTR ImageFilePath;
191   LPSTR ImageFileName;
192   LPSTR DebugFilePath;
193
194   DWORD TimeDateStamp;
195
196   BOOL RomImage;
197   PIMAGE_DEBUG_DIRECTORY DebugDirectory;
198   DWORD  NumberOfDebugDirectories;
199
200   DWORD Reserved[3];
201 } IMAGE_DEBUG_INFORMATION, *PIMAGE_DEBUG_INFORMATION;
202
203 typedef struct _ADDRESS {
204     DWORD          Offset;
205     WORD           Segment;
206     ADDRESS_MODE Mode;
207 } ADDRESS, *PADDRESS;
208
209 typedef struct _KDHELP {
210   DWORD Thread;
211   DWORD ThCallbackStack;
212   DWORD NextCallback;
213   DWORD FramePointer;
214   DWORD KiCallUserMode;
215   DWORD KeUserCallbackDispatcher;
216   DWORD SystemRangeStart;
217 } KDHELP, *PKDHELP;
218
219 typedef struct _STACKFRAME {
220   ADDRESS AddrPC;
221   ADDRESS AddrReturn;
222   ADDRESS AddrFrame;
223   ADDRESS AddrStack;
224   PVOID     FuncTableEntry;
225   DWORD     Params[4];
226   BOOL    Far;
227   BOOL    Virtual;
228   DWORD     Reserved[3];
229   KDHELP  KdHelp;
230 } STACKFRAME, *PSTACKFRAME;
231
232 typedef struct _IMAGEHLP_SYMBOL {
233   DWORD SizeOfStruct;
234   DWORD Address;
235   DWORD Size;
236   DWORD Flags;
237   DWORD MaxNameLength;
238   CHAR  Name[ANYSIZE_ARRAY];
239 } IMAGEHLP_SYMBOL, *PIMAGEHLP_SYMBOL;
240
241 typedef struct _IMAGEHLP_MODULE {
242   DWORD      SizeOfStruct;
243   DWORD      BaseOfImage;
244   DWORD      ImageSize;
245   DWORD      TimeDateStamp;
246   DWORD      CheckSum;
247   DWORD      NumSyms;
248   SYM_TYPE   SymType;
249   CHAR       ModuleName[32];
250   CHAR       ImageName[256];
251   CHAR       LoadedImageName[256];
252 } IMAGEHLP_MODULE, *PIMAGEHLP_MODULE;
253
254 typedef struct _IMAGEHLP_LINE {
255   DWORD SizeOfStruct;
256   DWORD Key;
257   DWORD LineNumber;
258   PCHAR FileName;
259   DWORD Address;
260 } IMAGEHLP_LINE, *PIMAGEHLP_LINE;
261
262 typedef struct _IMAGEHLP_DEFERRED_SYMBOL_LOAD {
263   DWORD   SizeOfStruct;
264   DWORD   BaseOfImage;
265   DWORD   CheckSum;
266   DWORD   TimeDateStamp;
267   CHAR    FileName[MAX_PATH];
268   BOOLEAN Reparse;
269 } IMAGEHLP_DEFERRED_SYMBOL_LOAD, *PIMAGEHLP_DEFERRED_SYMBOL_LOAD;
270
271 typedef struct _IMAGEHLP_DUPLICATE_SYMBOL {
272   DWORD              SizeOfStruct;
273   DWORD              NumberOfDups;
274   PIMAGEHLP_SYMBOL Symbol;
275   ULONG              SelectedSymbol;
276 } IMAGEHLP_DUPLICATE_SYMBOL, *PIMAGEHLP_DUPLICATE_SYMBOL;
277
278 /***********************************************************************
279  * Callbacks
280  */
281
282 typedef BOOL CALLBACK (*PIMAGEHLP_STATUS_ROUTINE)(
283   IMAGEHLP_STATUS_REASON Reason, LPSTR ImageName, LPSTR DllName,
284   ULONG Va, ULONG Parameter
285 );
286
287 typedef BOOL CALLBACK (*PSYM_ENUMMODULES_CALLBACK)(
288   LPSTR ModuleName, ULONG BaseOfDll, PVOID UserContext
289 );
290
291 typedef BOOL CALLBACK (*PSYM_ENUMSYMBOLS_CALLBACK)(
292   LPSTR SymbolName, ULONG SymbolAddress, ULONG SymbolSize, 
293   PVOID UserContext
294 );
295
296 typedef BOOL CALLBACK (*PENUMLOADED_MODULES_CALLBACK)(
297   LPSTR ModuleName, ULONG ModuleBase, ULONG ModuleSize, 
298   PVOID UserContext
299 );
300
301 typedef BOOL CALLBACK (*PSYMBOL_REGISTERED_CALLBACK)(
302   HANDLE hProcess, ULONG ActionCode, PVOID CallbackData,
303   PVOID UserContext
304 );
305
306 typedef BOOL CALLBACK (*DIGEST_FUNCTION)(
307   DIGEST_HANDLE refdata, PBYTE pData, DWORD dwLength
308 );
309
310 typedef BOOL CALLBACK (*PREAD_PROCESS_MEMORY_ROUTINE)(
311   HANDLE  hProcess, PCVOID lpBaseAddress, PVOID lpBuffer,
312   DWORD nSize, PDWORD lpNumberOfBytesRead
313 );
314
315 typedef PVOID CALLBACK (*PFUNCTION_TABLE_ACCESS_ROUTINE)(
316   HANDLE hProcess, DWORD AddrBase
317 );
318
319 typedef DWORD CALLBACK (*PGET_MODULE_BASE_ROUTINE)(
320   HANDLE hProcess, DWORD ReturnAddress);
321
322 typedef DWORD CALLBACK (*PTRANSLATE_ADDRESS_ROUTINE)(
323   HANDLE hProcess, HANDLE hThread, PADDRESS lpaddr
324 );
325
326 /***********************************************************************
327  * Functions
328  */
329
330 BOOL WINAPI BindImage(
331   LPSTR ImageName, LPSTR DllPath, LPSTR SymbolPath
332 );
333 BOOL WINAPI BindImageEx(
334   DWORD Flags, LPSTR ImageName, LPSTR DllPath, LPSTR SymbolPath,
335   PIMAGEHLP_STATUS_ROUTINE StatusRoutine
336 );
337 PIMAGE_NT_HEADERS WINAPI CheckSumMappedFile(
338   LPVOID BaseAddress, DWORD FileLength, 
339   LPDWORD HeaderSum, LPDWORD CheckSum
340 );
341 BOOL WINAPI EnumerateLoadedModules(
342   HANDLE hProcess,
343   PENUMLOADED_MODULES_CALLBACK EnumLoadedModulesCallback,
344   PVOID UserContext
345 );
346 HANDLE WINAPI FindDebugInfoFile(
347   LPSTR FileName, LPSTR SymbolPath, LPSTR DebugFilePath
348 );
349 HANDLE WINAPI FindExecutableImage(
350   LPSTR FileName, LPSTR SymbolPath, LPSTR ImageFilePath
351 );
352 BOOL WINAPI GetImageConfigInformation(
353   PLOADED_IMAGE LoadedImage, 
354   PIMAGE_LOAD_CONFIG_DIRECTORY ImageConfigInformation
355 );
356 DWORD WINAPI GetImageUnusedHeaderBytes(
357   PLOADED_IMAGE LoadedImage,
358   LPDWORD SizeUnusedHeaderBytes
359 );
360 DWORD WINAPI GetTimestampForLoadedLibrary(
361   HMODULE Module
362 );
363 BOOL WINAPI ImageAddCertificate(
364   HANDLE FileHandle, PWIN_CERTIFICATE Certificate, PDWORD Index
365 );
366 PVOID WINAPI ImageDirectoryEntryToData(
367   PVOID Base, BOOLEAN MappedAsImage, USHORT DirectoryEntry, PULONG Size
368 );
369 BOOL WINAPI ImageEnumerateCertificates(
370   HANDLE FileHandle, WORD TypeFilter, PDWORD CertificateCount,
371   PDWORD Indices, DWORD IndexCount
372 );
373 BOOL WINAPI ImageGetCertificateData(
374   HANDLE FileHandle, DWORD CertificateIndex,
375   PWIN_CERTIFICATE Certificate, PDWORD RequiredLength
376 );
377 BOOL WINAPI ImageGetCertificateHeader(
378   HANDLE FileHandle, DWORD CertificateIndex,
379   PWIN_CERTIFICATE Certificateheader
380 );
381 BOOL WINAPI ImageGetDigestStream(
382   HANDLE FileHandle, DWORD DigestLevel,
383   DIGEST_FUNCTION DigestFunction, DIGEST_HANDLE DigestHandle
384 );
385 PLOADED_IMAGE WINAPI ImageLoad(
386   LPSTR DllName, LPSTR DllPath
387 );
388 PIMAGE_NT_HEADERS WINAPI ImageNtHeader(
389   PVOID Base
390 );
391 BOOL WINAPI ImageRemoveCertificate(
392   HANDLE FileHandle, DWORD Index
393 );
394 PIMAGE_SECTION_HEADER WINAPI ImageRvaToSection(
395   PIMAGE_NT_HEADERS NtHeaders, PVOID Base, ULONG Rva
396 );
397 PVOID WINAPI ImageRvaToVa(
398   PIMAGE_NT_HEADERS NtHeaders, PVOID Base, ULONG Rva,
399   PIMAGE_SECTION_HEADER *LastRvaSection
400 );
401 BOOL WINAPI ImageUnload(
402   PLOADED_IMAGE LoadedImage
403 );
404 PAPI_VERSION WINAPI ImagehlpApiVersion(
405   void 
406 );
407 PAPI_VERSION WINAPI ImagehlpApiVersionEx(
408   PAPI_VERSION AppVersion
409 );
410 BOOL WINAPI MakeSureDirectoryPathExists(
411   LPCSTR DirPath
412 );
413 BOOL WINAPI MapAndLoad(
414   LPSTR ImageName, LPSTR DllPath, PLOADED_IMAGE LoadedImage,
415   BOOL DotDll, BOOL ReadOnly
416 );
417 PIMAGE_DEBUG_INFORMATION WINAPI MapDebugInformation(
418   HANDLE FileHandle, LPSTR FileName,
419   LPSTR SymbolPath, DWORD ImageBase
420 );
421 DWORD WINAPI MapFileAndCheckSumA(
422   LPSTR Filename, LPDWORD HeaderSum, LPDWORD CheckSum
423 );
424 DWORD WINAPI MapFileAndCheckSumW(
425   LPWSTR Filename, LPDWORD HeaderSum, LPDWORD CheckSum
426 );
427 BOOL WINAPI ReBaseImage(
428   LPSTR CurrentImageName, LPSTR SymbolPath, BOOL fReBase,
429   BOOL fRebaseSysfileOk, BOOL fGoingDown, ULONG CheckImageSize,
430   ULONG *OldImageSize, ULONG *OldImageBase, ULONG *NewImageSize,
431   ULONG *NewImageBase, ULONG TimeStamp
432 );
433 BOOL WINAPI RemovePrivateCvSymbolic(
434   PCHAR DebugData, PCHAR *NewDebugData, ULONG *NewDebugSize
435 );
436 VOID WINAPI RemoveRelocations(
437   PCHAR ImageName
438 );
439 BOOL WINAPI SearchTreeForFile(
440   LPSTR RootPath, LPSTR InputPathName, LPSTR OutputPathBuffer
441 );
442 BOOL WINAPI SetImageConfigInformation(
443   PLOADED_IMAGE LoadedImage,
444   PIMAGE_LOAD_CONFIG_DIRECTORY ImageConfigInformation
445 );
446 BOOL WINAPI SplitSymbols(
447   LPSTR ImageName, LPSTR SymbolsPath, 
448   LPSTR SymbolFilePath, DWORD Flags
449 );
450 BOOL WINAPI StackWalk(
451   DWORD MachineType, HANDLE hProcess, HANDLE hThread,
452   PSTACKFRAME StackFrame, PVOID ContextRecord,
453   PREAD_PROCESS_MEMORY_ROUTINE ReadMemoryRoutine,
454   PFUNCTION_TABLE_ACCESS_ROUTINE FunctionTableAccessRoutine,
455   PGET_MODULE_BASE_ROUTINE GetModuleBaseRoutine,
456   PTRANSLATE_ADDRESS_ROUTINE TranslateAddress
457 );
458 BOOL WINAPI SymCleanup(
459   HANDLE hProcess
460 );
461 BOOL WINAPI SymEnumerateModules(
462   HANDLE hProcess, PSYM_ENUMMODULES_CALLBACK EnumModulesCallback,
463   PVOID UserContext
464 );
465 BOOL WINAPI SymEnumerateSymbols(
466   HANDLE hProcess, DWORD BaseOfDll,
467   PSYM_ENUMSYMBOLS_CALLBACK EnumSymbolsCallback, PVOID UserContext
468 );
469 PVOID WINAPI SymFunctionTableAccess(
470   HANDLE hProcess, DWORD AddrBase
471 );
472 DWORD WINAPI SymGetModuleBase(
473   HANDLE hProcess, DWORD dwAddr
474 );
475 BOOL WINAPI SymGetModuleInfo(
476   HANDLE hProcess, DWORD dwAddr,
477   PIMAGEHLP_MODULE ModuleInfo
478 );
479 DWORD WINAPI SymGetOptions(
480   void
481 );
482 BOOL WINAPI SymGetSearchPath(
483   HANDLE hProcess, LPSTR szSearchPath, DWORD SearchPathLength
484 );
485 BOOL WINAPI SymGetSymFromAddr(
486   HANDLE hProcess, DWORD dwAddr,
487   PDWORD pdwDisplacement, PIMAGEHLP_SYMBOL Symbol
488 );
489 BOOL WINAPI SymGetSymFromName(
490   HANDLE hProcess, LPSTR Name, PIMAGEHLP_SYMBOL Symbol
491 );
492 BOOL WINAPI SymGetSymNext(
493   HANDLE hProcess, PIMAGEHLP_SYMBOL Symbol
494 );
495 BOOL WINAPI SymGetSymPrev(
496   HANDLE hProcess, PIMAGEHLP_SYMBOL Symbol
497 );
498 BOOL WINAPI SymInitialize(
499   HANDLE hProcess, LPSTR UserSearchPath, BOOL fInvadeProcess
500 );
501 BOOL WINAPI SymLoadModule(
502   HANDLE hProcess, HANDLE hFile, LPSTR ImageName, LPSTR ModuleName,
503   DWORD BaseOfDll, DWORD SizeOfDll
504 );
505 BOOL WINAPI SymRegisterCallback(
506   HANDLE hProcess, PSYMBOL_REGISTERED_CALLBACK CallbackFunction,
507   PVOID UserContext
508 );
509 DWORD WINAPI SymSetOptions(
510   DWORD SymOptions
511 );
512 BOOL WINAPI SymSetSearchPath(
513   HANDLE hProcess, LPSTR szSearchPath
514 );
515 BOOL WINAPI SymUnDName(
516   PIMAGEHLP_SYMBOL sym, LPSTR UnDecName, DWORD UnDecNameLength
517 );
518 BOOL WINAPI SymUnloadModule(
519   HANDLE hProcess, DWORD BaseOfDll
520 );
521 BOOL WINAPI TouchFileTimes(
522   HANDLE FileHandle, LPSYSTEMTIME lpSystemTime
523 );
524 DWORD WINAPI UnDecorateSymbolName(
525   LPCSTR DecoratedName, LPSTR UnDecoratedName,
526   DWORD UndecoratedLength, DWORD Flags
527 );
528 BOOL WINAPI UnMapAndLoad(
529   PLOADED_IMAGE LoadedImage
530 );
531 BOOL WINAPI UnmapDebugInformation(
532   PIMAGE_DEBUG_INFORMATION DebugInfo
533 );
534 BOOL WINAPI UpdateDebugInfoFile(
535   LPSTR ImageFileName, LPSTR SymbolPath,
536   LPSTR DebugFilePath, PIMAGE_NT_HEADERS NtHeaders
537 );
538 BOOL WINAPI UpdateDebugInfoFileEx(
539   LPSTR ImageFileName, LPSTR SymbolPath, LPSTR DebugFilePath,
540   PIMAGE_NT_HEADERS NtHeaders, DWORD OldChecksum
541 );
542
543 /***********************************************************************
544  * Wine specific
545  */
546
547 extern HANDLE IMAGEHLP_hHeap;
548
549 #ifdef __cplusplus
550 } /* extern "C" */
551 #endif /* defined(__cplusplus) */
552
553 #endif  /* __WINE_IMAGEHLP_H */