2 * Declarations for DBGHELP
4 * Copyright (C) 2003 Eric Pouech
6 * This library is free software; you can redistribute it and/or
7 * modify it under the terms of the GNU Lesser General Public
8 * License as published by the Free Software Foundation; either
9 * version 2.1 of the License, or (at your option) any later version.
11 * This library is distributed in the hope that it will be useful,
12 * but WITHOUT ANY WARRANTY; without even the implied warranty of
13 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
14 * Lesser General Public License for more details.
16 * You should have received a copy of the GNU Lesser General Public
17 * License along with this library; if not, write to the Free Software
18 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
21 #ifndef __WINE_DBGHELP_H
22 #define __WINE_DBGHELP_H
30 #endif /* defined(__cplusplus) */
32 typedef struct _LOADED_IMAGE
37 PIMAGE_NT_HEADERS FileHeader;
38 PIMAGE_SECTION_HEADER LastRvaSection;
39 ULONG NumberOfSections;
40 PIMAGE_SECTION_HEADER Sections;
41 ULONG Characteristics;
46 } LOADED_IMAGE, *PLOADED_IMAGE;
48 /*************************
50 *************************/
60 typedef struct _tagADDRESS
65 } ADDRESS, *LPADDRESS;
67 #define SYMF_OMAP_GENERATED 0x00000001
68 #define SYMF_OMAP_MODIFIED 0x00000002
69 #define SYMF_USER_GENERATED 0x00000004
70 #define SYMF_REGISTER 0x00000008
71 #define SYMF_REGREL 0x00000010
72 #define SYMF_FRAMEREL 0x00000020
73 #define SYMF_PARAMETER 0x00000040
74 #define SYMF_LOCAL 0x00000080
75 #define SYMF_CONSTANT 0x00000100
76 #define SYMF_EXPORT 0x00000200
77 #define SYMF_FORWARDER 0x00000400
78 #define SYMF_FUNCTION 0x00000800
93 typedef struct _IMAGEHLP_SYMBOL
101 } IMAGEHLP_SYMBOL, *PIMAGEHLP_SYMBOL;
103 typedef struct _IMAGEHLP_MODULE
114 CHAR LoadedImageName[256];
115 } IMAGEHLP_MODULE, *PIMAGEHLP_MODULE;
117 typedef struct _IMAGEHLP_MODULEW {
125 WCHAR ModuleName[32];
126 WCHAR ImageName[256];
127 WCHAR LoadedImageName[256];
128 } IMAGEHLP_MODULEW, *PIMAGEHLP_MODULEW;
130 typedef struct _IMAGEHLP_LINE
137 } IMAGEHLP_LINE, *PIMAGEHLP_LINE;
139 typedef struct _SOURCEFILE
143 } SOURCEFILE, *PSOURCEFILE;
145 #define CBA_DEFERRED_SYMBOL_LOAD_START 0x00000001
146 #define CBA_DEFERRED_SYMBOL_LOAD_COMPLETE 0x00000002
147 #define CBA_DEFERRED_SYMBOL_LOAD_FAILURE 0x00000003
148 #define CBA_SYMBOLS_UNLOADED 0x00000004
149 #define CBA_DUPLICATE_SYMBOL 0x00000005
150 #define CBA_READ_MEMORY 0x00000006
151 #define CBA_DEFERRED_SYMBOL_LOAD_CANCEL 0x00000007
152 #define CBA_SET_OPTIONS 0x00000008
153 #define CBA_EVENT 0x00000010
154 #define CBA_DEBUG_INFO 0x10000000
156 typedef struct _IMAGEHLP_CBA_READ_MEMORY
162 } IMAGEHLP_CBA_READ_MEMORY, *PIMAGEHLP_CBA_READ_MEMORY;
172 typedef struct _IMAGEHLP_CBA_EVENT
178 } IMAGEHLP_CBA_EVENT, *PIMAGEHLP_CBA_EVENT;
180 typedef struct _IMAGEHLP_DEFERRED_SYMBOL_LOAD
186 CHAR FileName[MAX_PATH];
188 } IMAGEHLP_DEFERRED_SYMBOL_LOAD, *PIMAGEHLP_DEFERRED_SYMBOL_LOAD;
190 typedef struct _IMAGEHLP_DUPLICATE_SYMBOL
194 PIMAGEHLP_SYMBOL Symbol;
195 DWORD SelectedSymbol;
196 } IMAGEHLP_DUPLICATE_SYMBOL, *PIMAGEHLP_DUPLICATE_SYMBOL;
198 #define SYMOPT_CASE_INSENSITIVE 0x00000001
199 #define SYMOPT_UNDNAME 0x00000002
200 #define SYMOPT_DEFERRED_LOADS 0x00000004
201 #define SYMOPT_NO_CPP 0x00000008
202 #define SYMOPT_LOAD_LINES 0x00000010
203 #define SYMOPT_OMAP_FIND_NEAREST 0x00000020
204 #define SYMOPT_LOAD_ANYTHING 0x00000040
205 #define SYMOPT_IGNORE_CVREC 0x00000080
206 #define SYMOPT_NO_UNQUALIFIED_LOADS 0x00000100
207 #define SYMOPT_FAIL_CRITICAL_ERRORS 0x00000200
208 #define SYMOPT_EXACT_SYMBOLS 0x00000400
209 #define SYMOPT_WILD_UNDERSCORE 0x00000800
210 #define SYMOPT_USE_DEFAULTS 0x00001000
211 #define SYMOPT_INCLUDE_32BIT_MODULES 0x00002000
213 #define SYMOPT_DEBUG 0x80000000
215 typedef struct _IMAGEHLP_STACK_FRAME
217 ULONG InstructionOffset;
221 ULONG BackingStoreOffset;
222 ULONG FuncTableEntry;
227 } IMAGEHLP_STACK_FRAME, *PIMAGEHLP_STACK_FRAME;
229 typedef VOID IMAGEHLP_CONTEXT, *PIMAGEHLP_CONTEXT;
231 #define DBHHEADER_DEBUGDIRS 0x1
232 typedef struct _DBGHELP_MODLOAD_DATA
239 } MODLOAD_DATA, *PMODLOAD_DATA;
241 /*************************
243 *************************/
247 #define MINIDUMP_SIGNATURE 0x4D444D50 /* 'PMDM' */
248 #define MINIDUMP_VERSION (42899)
251 typedef ULONG64 RVA64;
253 typedef enum _MINIDUMP_TYPE
255 MiniDumpNormal = 0x0000,
256 MiniDumpWithDataSegs = 0x0001,
257 MiniDumpWithFullMemory = 0x0002,
258 MiniDumpWithHandleData = 0x0004,
259 MiniDumpFilterMemory = 0x0008,
260 MiniDumpScanMemory = 0x0010
263 typedef enum _MINIDUMP_CALLBACK_TYPE
268 IncludeThreadCallback,
269 IncludeModuleCallback,
270 } MINIDUMP_CALLBACK_TYPE;
272 typedef struct _MINIDUMP_THREAD_CALLBACK
280 } MINIDUMP_THREAD_CALLBACK, *PMINIDUMP_THREAD_CALLBACK;
282 typedef struct _MINIDUMP_THREAD_EX_CALLBACK
290 ULONGLONG BackingStoreBase;
291 ULONGLONG BackingStoreEnd;
292 } MINIDUMP_THREAD_EX_CALLBACK, *PMINIDUMP_THREAD_EX_CALLBACK;
294 typedef struct _MINIDUMP_INCLUDE_THREAD_CALLBACK
297 } MINIDUMP_INCLUDE_THREAD_CALLBACK, *PMINIDUMP_INCLUDE_THREAD_CALLBACK;
299 typedef enum _THREAD_WRITE_FLAGS
301 ThreadWriteThread = 0x0001,
302 ThreadWriteStack = 0x0002,
303 ThreadWriteContext = 0x0004,
304 ThreadWriteBackingStore = 0x0008,
305 ThreadWriteInstructionWindow = 0x0010
306 } THREAD_WRITE_FLAGS;
308 typedef struct _MINIDUMP_MODULE_CALLBACK
311 ULONGLONG BaseOfImage;
315 VS_FIXEDFILEINFO VersionInfo;
317 ULONG SizeOfCvRecord;
319 ULONG SizeOfMiscRecord;
320 } MINIDUMP_MODULE_CALLBACK, *PMINIDUMP_MODULE_CALLBACK;
322 typedef struct _MINIDUMP_INCLUDE_MODULE_CALLBACK
325 } MINIDUMP_INCLUDE_MODULE_CALLBACK, *PMINIDUMP_INCLUDE_MODULE_CALLBACK;
327 typedef enum _MODULE_WRITE_FLAGS
329 ModuleWriteModule = 0x0001,
330 ModuleWriteDataSeg = 0x0002,
331 ModuleWriteMiscRecord = 0x0004,
332 ModuleWriteCvRecord = 0x0008,
333 ModuleReferencedByMemory = 0x0010
334 } MODULE_WRITE_FLAGS;
336 typedef struct _MINIDUMP_CALLBACK_INPUT
339 HANDLE ProcessHandle;
343 MINIDUMP_THREAD_CALLBACK Thread;
344 MINIDUMP_THREAD_EX_CALLBACK ThreadEx;
345 MINIDUMP_MODULE_CALLBACK Module;
346 MINIDUMP_INCLUDE_THREAD_CALLBACK IncludeThread;
347 MINIDUMP_INCLUDE_MODULE_CALLBACK IncludeModule;
349 } MINIDUMP_CALLBACK_INPUT, *PMINIDUMP_CALLBACK_INPUT;
351 typedef struct _MINIDUMP_CALLBACK_OUTPUT
355 ULONG ModuleWriteFlags;
356 ULONG ThreadWriteFlags;
358 } MINIDUMP_CALLBACK_OUTPUT, *PMINIDUMP_CALLBACK_OUTPUT;
360 typedef BOOL (WINAPI* MINIDUMP_CALLBACK_ROUTINE)(PVOID CallbackParam,
361 const PMINIDUMP_CALLBACK_INPUT CallbackInput,
362 PMINIDUMP_CALLBACK_OUTPUT CallbackOutput);
364 typedef struct _MINIDUMP_CALLBACK_INFORMATION
366 MINIDUMP_CALLBACK_ROUTINE CallbackRoutine;
368 } MINIDUMP_CALLBACK_INFORMATION, *PMINIDUMP_CALLBACK_INFORMATION;
370 typedef struct _MINIDUMP_LOCATION_DESCRIPTOR
374 } MINIDUMP_LOCATION_DESCRIPTOR;
376 typedef struct _MINIDUMP_DIRECTORY
379 MINIDUMP_LOCATION_DESCRIPTOR Location;
380 } MINIDUMP_DIRECTORY, *PMINIDUMP_DIRECTORY;
382 typedef struct _MINIDUMP_EXCEPTION
385 ULONG ExceptionFlags;
386 ULONGLONG ExceptionRecord;
387 ULONGLONG ExceptionAddress;
388 ULONG NumberParameters;
389 ULONG __unusedAlignment;
390 ULONGLONG ExceptionInformation[EXCEPTION_MAXIMUM_PARAMETERS];
391 } MINIDUMP_EXCEPTION, *PMINIDUMP_EXCEPTION;
393 typedef struct _MINIDUMP_EXCEPTION_INFORMATION
396 PEXCEPTION_POINTERS ExceptionPointers;
398 } MINIDUMP_EXCEPTION_INFORMATION, *PMINIDUMP_EXCEPTION_INFORMATION;
400 typedef struct MINIDUMP_EXCEPTION_STREAM
404 MINIDUMP_EXCEPTION ExceptionRecord;
405 MINIDUMP_LOCATION_DESCRIPTOR ThreadContext;
406 } MINIDUMP_EXCEPTION_STREAM, *PMINIDUMP_EXCEPTION_STREAM;
408 typedef struct _MINIDUMP_HEADER
412 DWORD NumberOfStreams;
413 RVA StreamDirectoryRva;
421 } MINIDUMP_HEADER, *PMINIDUMP_HEADER;
423 typedef struct _MINIDUMP_MEMORY_DESCRIPTOR
425 ULONGLONG StartOfMemoryRange;
426 MINIDUMP_LOCATION_DESCRIPTOR Memory;
427 } MINIDUMP_MEMORY_DESCRIPTOR, *PMINIDUMP_MEMORY_DESCRIPTOR;
429 typedef struct _MINIDUMP_MODULE
431 ULONGLONG BaseOfImage;
436 VS_FIXEDFILEINFO VersionInfo;
437 MINIDUMP_LOCATION_DESCRIPTOR CvRecord;
438 MINIDUMP_LOCATION_DESCRIPTOR MiscRecord;
441 } MINIDUMP_MODULE, *PMINIDUMP_MODULE;
443 typedef struct _MINIDUMP_MODULE_LIST
445 ULONG NumberOfModules;
446 MINIDUMP_MODULE Modules[1]; /* FIXME: 0-sized array not supported */
447 } MINIDUMP_MODULE_LIST, *PMINIDUMP_MODULE_LIST;
449 typedef struct _MINIDUMP_USER_STREAM
454 } MINIDUMP_USER_STREAM, *PMINIDUMP_USER_STREAM;
456 typedef struct _MINIDUMP_USER_STREAM_INFORMATION
458 ULONG UserStreamCount;
459 PMINIDUMP_USER_STREAM UserStreamArray;
460 } MINIDUMP_USER_STREAM_INFORMATION, *PMINIDUMP_USER_STREAM_INFORMATION;
462 typedef enum _MINIDUMP_STREAM_TYPE
467 ThreadListStream = 3,
468 ModuleListStream = 4,
469 MemoryListStream = 5,
471 SystemInfoStream = 7,
472 ThreadExListStream = 8,
473 Memory64ListStream = 9,
476 HandleDataStream = 12,
477 FunctionTableStream = 13,
479 LastReservedStream = 0xffff
480 } MINIDUMP_STREAM_TYPE;
482 typedef struct _MINIDUMP_SYSTEM_INFO
484 USHORT ProcessorArchitecture;
485 USHORT ProcessorLevel;
486 USHORT ProcessorRevision;
496 union _CPU_INFORMATION
501 ULONG VersionInformation;
502 ULONG FeatureInformation;
503 ULONG AMDExtendedCpuFeatures;
507 ULONGLONG ProcessorFeatures[2];
511 } MINIDUMP_SYSTEM_INFO, *PMINIDUMP_SYSTEM_INFO;
513 typedef struct _MINIDUMP_THREAD
520 MINIDUMP_MEMORY_DESCRIPTOR Stack;
521 MINIDUMP_LOCATION_DESCRIPTOR ThreadContext;
522 } MINIDUMP_THREAD, *PMINIDUMP_THREAD;
524 typedef struct _MINIDUMP_THREAD_LIST
526 ULONG NumberOfThreads;
527 MINIDUMP_THREAD Threads[1]; /* FIXME: no support of 0 sized array */
528 } MINIDUMP_THREAD_LIST, *PMINIDUMP_THREAD_LIST;
530 /*************************
532 *************************/
533 typedef BOOL (CALLBACK *PENUMLOADED_MODULES_CALLBACK)(PSTR ModuleName, DWORD ModuleBase,
534 ULONG ModuleSize, PVOID UserContext);
535 extern BOOL WINAPI EnumerateLoadedModules(HANDLE hProcess,
536 PENUMLOADED_MODULES_CALLBACK EnumLoadedModulesCallback,
538 typedef BOOL (CALLBACK *PSYM_ENUMMODULES_CALLBACK)(PSTR ModuleName, DWORD BaseOfDll,
540 extern BOOL WINAPI SymEnumerateModules(HANDLE hProcess,
541 PSYM_ENUMMODULES_CALLBACK EnumModulesCallback,
543 extern BOOL WINAPI SymGetModuleInfo(HANDLE hProcess, DWORD dwAddr,
544 PIMAGEHLP_MODULE ModuleInfo);
545 extern BOOL WINAPI SymGetModuleInfoW(HANDLE hProcess, DWORD dwAddr,
546 PIMAGEHLP_MODULEW ModuleInfo);
547 extern DWORD WINAPI SymGetModuleBase(HANDLE hProcess, DWORD dwAddr);
548 extern DWORD WINAPI SymLoadModule(HANDLE hProcess, HANDLE hFile, PSTR ImageName,
549 PSTR ModuleName, DWORD BaseOfDll, DWORD SizeOfDll);
550 extern DWORD WINAPI SymLoadModuleEx(HANDLE hProcess, HANDLE hFile, PSTR ImageName,
551 PSTR ModuleName, DWORD BaseOfDll, DWORD DllSize,
552 PMODLOAD_DATA Data, DWORD Flags);
553 extern BOOL WINAPI SymUnloadModule(HANDLE hProcess, DWORD BaseOfDll);
555 /*************************
557 *************************/
559 #define IMAGEHLP_SYMBOL_INFO_VALUEPRESENT 1
560 #define IMAGEHLP_SYMBOL_INFO_REGISTER SYMF_REGISTER /* 0x08 */
561 #define IMAGEHLP_SYMBOL_INFO_REGRELATIVE SYMF_REGREL /* 0x10 */
562 #define IMAGEHLP_SYMBOL_INFO_FRAMERELATIVE SYMF_FRAMEREL /* 0x20 */
563 #define IMAGEHLP_SYMBOL_INFO_PARAMETER SYMF_PARAMETER /* 0x40 */
564 #define IMAGEHLP_SYMBOL_INFO_LOCAL SYMF_LOCAL /* 0x80 */
565 #define IMAGEHLP_SYMBOL_INFO_CONSTANT SYMF_CONSTANT /* 0x100 */
566 #define IMAGEHLP_SYMBOL_FUNCTION SYMF_FUNCTION /* 0x800 */
568 typedef struct _SYMBOL_INFO
585 } SYMBOL_INFO, *PSYMBOL_INFO;
587 typedef enum _IMAGEHLP_SYMBOL_TYPE_INFO
595 TI_GET_ARRAYINDEXTYPEID,
598 TI_GET_ADDRESSOFFSET,
602 TI_GET_CHILDRENCOUNT,
604 TI_GET_VIRTUALBASECLASS,
605 TI_GET_VIRTUALTABLESHAPEID,
606 TI_GET_VIRTUALBASEPOINTEROFFSET,
607 TI_GET_CLASSPARENTID,
610 TI_GET_LEXICALPARENT,
613 } IMAGEHLP_SYMBOL_TYPE_INFO;
615 typedef struct _TI_FINDCHILDREN_PARAMS
620 } TI_FINDCHILDREN_PARAMS;
622 BOOL WINAPI SymGetTypeInfo(HANDLE hProcess, DWORD ModBase, ULONG TypeId,
623 IMAGEHLP_SYMBOL_TYPE_INFO GetType, PVOID);
624 typedef BOOL (CALLBACK *PSYM_ENUMERATESYMBOLS_CALLBACK)(PSYMBOL_INFO pSymInfo,
625 ULONG SymbolSize, PVOID UserContext);
626 BOOL WINAPI SymEnumTypes(HANDLE hProcess, DWORD BaseOfDll,
627 PSYM_ENUMERATESYMBOLS_CALLBACK EnumSymbolsCallback,
629 BOOL WINAPI SymGetTypeFromName(HANDLE hProcess, DWORD BaseOfDll, LPSTR Name,
630 PSYMBOL_INFO Symbol);
632 /*************************
634 *************************/
635 typedef BOOL (CALLBACK *PSYM_ENUMSOURCFILES_CALLBACK)(PSOURCEFILE pSourceFile,
638 BOOL WINAPI SymEnumSourceFiles(HANDLE hProcess, ULONG ModBase, LPSTR Mask,
639 PSYM_ENUMSOURCFILES_CALLBACK cbSrcFiles,
642 /*************************
643 * File & image handling *
644 *************************/
645 HANDLE WINAPI FindDebugInfoFile(PSTR FileName, PSTR SymbolPath, PSTR DebugFilePath);
646 typedef BOOL (CALLBACK *PFIND_DEBUG_FILE_CALLBACK)(HANDLE FileHandle, PSTR FileName,
648 HANDLE WINAPI FindDebugInfoFileEx(PSTR FileName, PSTR SymbolPath, PSTR DebugFilePath,
649 PFIND_DEBUG_FILE_CALLBACK Callback, PVOID CallerData);
650 typedef BOOL (CALLBACK *PFINDFILEINPATHCALLBACK)(PSTR filename, PVOID context);
652 BOOL WINAPI SymFindFileInPath(HANDLE hProcess, LPSTR searchPath, LPSTR FileName,
653 PVOID id, DWORD two, DWORD three, DWORD flags,
654 LPSTR FilePath, PFINDFILEINPATHCALLBACK callback,
656 HANDLE WINAPI FindExecutableImage(PSTR FileName, PSTR SymbolPath, PSTR ImageFilePath);
657 typedef BOOL (CALLBACK *PFIND_EXE_FILE_CALLBACK)(HANDLE FileHandle, PSTR FileName,
659 HANDLE WINAPI FindExecutableImageEx(PSTR FileName, PSTR SymbolPath, PSTR ImageFilePath,
660 PFIND_EXE_FILE_CALLBACK Callback, PVOID CallerData);
661 PIMAGE_NT_HEADERS WINAPI ImageNtHeader(PVOID Base);
663 PVOID WINAPI ImageDirectoryEntryToDataEx(PVOID Base, BOOLEAN MappedAsImage,
664 USHORT DirectoryEntry, PULONG Size,
665 PIMAGE_SECTION_HEADER *FoundHeader);
666 PVOID WINAPI ImageDirectoryEntryToData(PVOID Base, BOOLEAN MappedAsImage,
667 USHORT DirectoryEntry, PULONG Size);
668 PIMAGE_SECTION_HEADER WINAPI ImageRvaToSection(PIMAGE_NT_HEADERS NtHeaders,
669 PVOID Base, ULONG Rva);
670 PVOID WINAPI ImageRvaToVa(PIMAGE_NT_HEADERS NtHeaders, PVOID Base,
671 ULONG Rva, OUT PIMAGE_SECTION_HEADER *LastRvaSection);
675 #endif /* defined(__cplusplus) */
677 #endif /* __WINE_DBGHELP_H */