Reactos
1/*
2 * Declarations for DBGHELP
3 *
4 * Copyright (C) 2003 Eric Pouech
5 *
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.
10 *
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.
15 *
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., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
19 */
20
21#ifndef __WINE_DBGHELP_H
22#define __WINE_DBGHELP_H
23
24/* A set of documentation macros (see also imagehlp.h) */
25#ifndef __deref_out
26# define __deref_out
27#endif
28#ifndef __deref_out_opt
29# define __deref_out_opt
30#endif
31#ifndef __deref_opt_out
32# define __deref_opt_out
33#endif
34#ifndef __in
35# define __in
36#endif
37#ifndef __in_opt
38# define __in_opt
39#endif
40#ifndef __in_bcount
41# define __in_bcount(x)
42#endif
43#ifndef __in_bcount_opt
44# define __in_bcount_opt(x)
45#endif
46#ifndef __in_ecount
47# define __in_ecount(x)
48#endif
49#ifndef __inout
50# define __inout
51#endif
52#ifndef __inout_opt
53# define __inout_opt
54#endif
55#ifndef __inout_bcount
56# define __inout_bcount(x)
57#endif
58#ifndef __inout_ecount
59# define __inout_ecount(x)
60#endif
61#ifndef __out
62# define __out
63#endif
64#ifndef __out_opt
65# define __out_opt
66#endif
67#ifndef __out_bcount
68# define __out_bcount(x)
69#endif
70#ifndef __out_bcount_opt
71# define __out_bcount_opt(x)
72#endif
73#ifndef __out_ecount
74# define __out_ecount(x)
75#endif
76#ifndef __out_ecount_opt
77# define __out_ecount_opt(x)
78#endif
79#ifndef __out_xcount
80# define __out_xcount(x)
81#endif
82
83
84#ifdef __cplusplus
85extern "C" {
86#endif /* defined(__cplusplus) */
87
88#ifdef _WIN64
89#ifndef _IMAGEHLP64
90#define _IMAGEHLP64
91#endif
92#endif
93
94#define IMAGEAPI WINAPI
95#define DBHLPAPI IMAGEAPI
96
97typedef struct _LOADED_IMAGE
98{
99 PSTR ModuleName;
100 HANDLE hFile;
101 PUCHAR MappedAddress;
102#ifdef _IMAGEHLP64
103 PIMAGE_NT_HEADERS64 FileHeader;
104#else
105 PIMAGE_NT_HEADERS32 FileHeader;
106#endif
107 PIMAGE_SECTION_HEADER LastRvaSection;
108 ULONG NumberOfSections;
109 PIMAGE_SECTION_HEADER Sections;
110 ULONG Characteristics;
111 BOOLEAN fSystemImage;
112 BOOLEAN fDOSImage;
113 BOOLEAN fReadOnly;
114 UCHAR Version;
115 LIST_ENTRY Links;
116 ULONG SizeOfImage;
117} LOADED_IMAGE, *PLOADED_IMAGE;
118
119/*************************
120 * IMAGEHLP equiv *
121 *************************/
122
123typedef enum
124{
125 AddrMode1616,
126 AddrMode1632,
127 AddrModeReal,
128 AddrModeFlat
129} ADDRESS_MODE;
130
131#if !defined(_IMAGEHLP_SOURCE_) && defined(_IMAGEHLP64)
132#define ADDRESS ADDRESS64
133#define LPADDRESS LPADDRESS64
134#else
135typedef struct _tagADDRESS
136{
137 DWORD Offset;
138 WORD Segment;
139 ADDRESS_MODE Mode;
140} ADDRESS, *LPADDRESS;
141#endif
142
143typedef struct _tagADDRESS64
144{
145 DWORD64 Offset;
146 WORD Segment;
147 ADDRESS_MODE Mode;
148} ADDRESS64, *LPADDRESS64;
149
150#define SYMF_OMAP_GENERATED 0x00000001
151#define SYMF_OMAP_MODIFIED 0x00000002
152#define SYMF_USER_GENERATED 0x00000004
153#define SYMF_REGISTER 0x00000008
154#define SYMF_REGREL 0x00000010
155#define SYMF_FRAMEREL 0x00000020
156#define SYMF_PARAMETER 0x00000040
157#define SYMF_LOCAL 0x00000080
158#define SYMF_CONSTANT 0x00000100
159#define SYMF_EXPORT 0x00000200
160#define SYMF_FORWARDER 0x00000400
161#define SYMF_FUNCTION 0x00000800
162#define SYMF_VIRTUAL 0x00001000
163#define SYMF_THUNK 0x00002000
164#define SYMF_TLSREL 0x00004000
165
166typedef enum
167{
168 SymNone = 0,
169 SymCoff,
170 SymCv,
171 SymPdb,
172 SymExport,
173 SymDeferred,
174 SymSym,
175 SymDia,
176 SymVirtual,
177 NumSymTypes
178} SYM_TYPE;
179
180#ifdef _NO_CVCONST_H
181enum SymTagEnum
182{
183 SymTagNull,
184 SymTagExe,
185 SymTagCompiland,
186 SymTagCompilandDetails,
187 SymTagCompilandEnv,
188 SymTagFunction,
189 SymTagBlock,
190 SymTagData,
191 SymTagAnnotation,
192 SymTagLabel,
193 SymTagPublicSymbol,
194 SymTagUDT,
195 SymTagEnum,
196 SymTagFunctionType,
197 SymTagPointerType,
198 SymTagArrayType,
199 SymTagBaseType,
200 SymTagTypedef,
201 SymTagBaseClass,
202 SymTagFriend,
203 SymTagFunctionArgType,
204 SymTagFuncDebugStart,
205 SymTagFuncDebugEnd,
206 SymTagUsingNamespace,
207 SymTagVTableShape,
208 SymTagVTable,
209 SymTagCustom,
210 SymTagThunk,
211 SymTagCustomType,
212 SymTagManagedType,
213 SymTagDimension,
214 SymTagCallSite,
215 SymTagInlineSite,
216 SymTagBaseInterface,
217 SymTagVectorType,
218 SymTagMatrixType,
219 SymTagHLSLType,
220 SymTagCaller,
221 SymTagCallee,
222 SymTagExport,
223 SymTagHeapAllocationSite,
224 SymTagCoffGroup,
225 SymTagMax
226};
227#endif // _NO_CVCONST_H
228
229#if !defined(_IMAGEHLP_SOURCE_) && defined(_IMAGEHLP64)
230#define IMAGEHLP_SYMBOL IMAGEHLP_SYMBOL64
231#define IMAGEHLP_SYMBOLW IMAGEHLP_SYMBOLW64
232#define PIMAGEHLP_SYMBOL PIMAGEHLP_SYMBOL64
233#define PIMAGEHLP_SYMBOLW PIMAGEHLP_SYMBOLW64
234#else
235typedef struct _IMAGEHLP_SYMBOL
236{
237 DWORD SizeOfStruct;
238 DWORD Address;
239 DWORD Size;
240 DWORD Flags;
241 DWORD MaxNameLength;
242 CHAR Name[1];
243} IMAGEHLP_SYMBOL, *PIMAGEHLP_SYMBOL;
244
245typedef struct _IMAGEHLP_SYMBOLW
246{
247 DWORD SizeOfStruct;
248 DWORD Address;
249 DWORD Size;
250 DWORD Flags;
251 DWORD MaxNameLength;
252 WCHAR Name[1];
253} IMAGEHLP_SYMBOLW, *PIMAGEHLP_SYMBOLW;
254#endif
255
256typedef struct _IMAGEHLP_SYMBOL64
257{
258 DWORD SizeOfStruct;
259 DWORD64 Address;
260 DWORD Size;
261 DWORD Flags;
262 DWORD MaxNameLength;
263 CHAR Name[1];
264} IMAGEHLP_SYMBOL64, *PIMAGEHLP_SYMBOL64;
265
266typedef struct _IMAGEHLP_SYMBOLW64
267{
268 DWORD SizeOfStruct;
269 DWORD64 Address;
270 DWORD Size;
271 DWORD Flags;
272 DWORD MaxNameLength;
273 WCHAR Name[1];
274} IMAGEHLP_SYMBOLW64, *PIMAGEHLP_SYMBOLW64;
275
276#if !defined(_IMAGEHLP_SOURCE_) && defined(_IMAGEHLP64)
277#define IMAGEHLP_MODULE IMAGEHLP_MODULE64
278#define PIMAGEHLP_MODULE PIMAGEHLP_MODULE64
279#define IMAGEHLP_MODULEW IMAGEHLP_MODULEW64
280#define PIMAGEHLP_MODULEW PIMAGEHLP_MODULEW64
281#else
282typedef struct _IMAGEHLP_MODULE
283{
284 DWORD SizeOfStruct;
285 DWORD BaseOfImage;
286 DWORD ImageSize;
287 DWORD TimeDateStamp;
288 DWORD CheckSum;
289 DWORD NumSyms;
290 SYM_TYPE SymType;
291 CHAR ModuleName[32];
292 CHAR ImageName[256];
293 CHAR LoadedImageName[256];
294} IMAGEHLP_MODULE, *PIMAGEHLP_MODULE;
295
296typedef struct _IMAGEHLP_MODULEW
297{
298 DWORD SizeOfStruct;
299 DWORD BaseOfImage;
300 DWORD ImageSize;
301 DWORD TimeDateStamp;
302 DWORD CheckSum;
303 DWORD NumSyms;
304 SYM_TYPE SymType;
305 WCHAR ModuleName[32];
306 WCHAR ImageName[256];
307 WCHAR LoadedImageName[256];
308} IMAGEHLP_MODULEW, *PIMAGEHLP_MODULEW;
309#endif
310
311typedef struct _IMAGEHLP_MODULE64
312{
313 DWORD SizeOfStruct;
314 DWORD64 BaseOfImage;
315 DWORD ImageSize;
316 DWORD TimeDateStamp;
317 DWORD CheckSum;
318 DWORD NumSyms;
319 SYM_TYPE SymType;
320 CHAR ModuleName[32];
321 CHAR ImageName[256];
322 CHAR LoadedImageName[256];
323 CHAR LoadedPdbName[256];
324 DWORD CVSig;
325 CHAR CVData[MAX_PATH*3];
326 DWORD PdbSig;
327 GUID PdbSig70;
328 DWORD PdbAge;
329 BOOL PdbUnmatched;
330 BOOL DbgUnmatched;
331 BOOL LineNumbers;
332 BOOL GlobalSymbols;
333 BOOL TypeInfo;
334 BOOL SourceIndexed;
335 BOOL Publics;
336} IMAGEHLP_MODULE64, *PIMAGEHLP_MODULE64;
337
338typedef struct _IMAGEHLP_MODULEW64
339{
340 DWORD SizeOfStruct;
341 DWORD64 BaseOfImage;
342 DWORD ImageSize;
343 DWORD TimeDateStamp;
344 DWORD CheckSum;
345 DWORD NumSyms;
346 SYM_TYPE SymType;
347 WCHAR ModuleName[32];
348 WCHAR ImageName[256];
349 WCHAR LoadedImageName[256];
350 WCHAR LoadedPdbName[256];
351 DWORD CVSig;
352 WCHAR CVData[MAX_PATH*3];
353 DWORD PdbSig;
354 GUID PdbSig70;
355 DWORD PdbAge;
356 BOOL PdbUnmatched;
357 BOOL DbgUnmatched;
358 BOOL LineNumbers;
359 BOOL GlobalSymbols;
360 BOOL TypeInfo;
361 BOOL SourceIndexed;
362 BOOL Publics;
363} IMAGEHLP_MODULEW64, *PIMAGEHLP_MODULEW64;
364
365#if !defined(_IMAGEHLP_SOURCE_) && defined(_IMAGEHLP64)
366#define IMAGEHLP_LINE IMAGEHLP_LINE64
367#define PIMAGEHLP_LINE PIMAGEHLP_LINE64
368#define IMAGEHLP_LINEW IMAGEHLP_LINEW64
369#define PIMAGEHLP_LINEW PIMAGEHLP_LINEW64
370#else
371typedef struct _IMAGEHLP_LINE
372{
373 DWORD SizeOfStruct;
374 PVOID Key;
375 DWORD LineNumber;
376 PCHAR FileName;
377 DWORD Address;
378} IMAGEHLP_LINE, *PIMAGEHLP_LINE;
379
380typedef struct _IMAGEHLP_LINEW
381{
382 DWORD SizeOfStruct;
383 PVOID Key;
384 DWORD LineNumber;
385 PWSTR FileName;
386 DWORD Address;
387} IMAGEHLP_LINEW, *PIMAGEHLP_LINEW;
388#endif
389
390typedef struct _IMAGEHLP_LINE64
391{
392 DWORD SizeOfStruct;
393 PVOID Key;
394 DWORD LineNumber;
395 PCHAR FileName;
396 DWORD64 Address;
397} IMAGEHLP_LINE64, *PIMAGEHLP_LINE64;
398
399typedef struct _IMAGEHLP_LINEW64
400{
401 DWORD SizeOfStruct;
402 PVOID Key;
403 DWORD LineNumber;
404 PWSTR FileName;
405 DWORD64 Address;
406} IMAGEHLP_LINEW64, *PIMAGEHLP_LINEW64;
407
408typedef struct _SOURCEFILE
409{
410 DWORD64 ModBase;
411 PCHAR FileName;
412} SOURCEFILE, *PSOURCEFILE;
413
414typedef struct _SOURCEFILEW
415{
416 DWORD64 ModBase;
417 PWSTR FileName;
418} SOURCEFILEW, *PSOURCEFILEW;
419
420#define CBA_DEFERRED_SYMBOL_LOAD_START 0x00000001
421#define CBA_DEFERRED_SYMBOL_LOAD_COMPLETE 0x00000002
422#define CBA_DEFERRED_SYMBOL_LOAD_FAILURE 0x00000003
423#define CBA_SYMBOLS_UNLOADED 0x00000004
424#define CBA_DUPLICATE_SYMBOL 0x00000005
425#define CBA_READ_MEMORY 0x00000006
426#define CBA_DEFERRED_SYMBOL_LOAD_CANCEL 0x00000007
427#define CBA_SET_OPTIONS 0x00000008
428#define CBA_EVENT 0x00000010
429#define CBA_DEFERRED_SYMBOL_LOAD_PARTIAL 0x00000020
430#define CBA_DEBUG_INFO 0x10000000
431
432typedef struct _IMAGEHLP_CBA_READ_MEMORY
433{
434 DWORD64 addr;
435 PVOID buf;
436 DWORD bytes;
437 DWORD *bytesread;
438} IMAGEHLP_CBA_READ_MEMORY, *PIMAGEHLP_CBA_READ_MEMORY;
439
440enum
441{
442 sevInfo = 0,
443 sevProblem,
444 sevAttn,
445 sevFatal,
446 sevMax
447};
448
449#define EVENT_SRCSPEW_START 100
450#define EVENT_SRCSPEW 100
451#define EVENT_SRCSPEW_END 199
452
453typedef struct _IMAGEHLP_CBA_EVENT
454{
455 DWORD severity;
456 DWORD code;
457 PCHAR desc;
458 PVOID object;
459} IMAGEHLP_CBA_EVENT, *PIMAGEHLP_CBA_EVENT;
460
461typedef struct _IMAGEHLP_CBA_EVENTW
462{
463 DWORD severity;
464 DWORD code;
465 PCWSTR desc;
466 PVOID object;
467} IMAGEHLP_CBA_EVENTW, *PIMAGEHLP_CBA_EVENTW;
468
469#if !defined(_IMAGEHLP_SOURCE_) && defined(_IMAGEHLP64)
470#define IMAGEHLP_DEFERRED_SYMBOL_LOAD IMAGEHLP_DEFERRED_SYMBOL_LOAD64
471#define PIMAGEHLP_DEFERRED_SYMBOL_LOAD PIMAGEHLP_DEFERRED_SYMBOL_LOAD64
472#else
473typedef struct _IMAGEHLP_DEFERRED_SYMBOL_LOAD
474{
475 DWORD SizeOfStruct;
476 DWORD BaseOfImage;
477 DWORD CheckSum;
478 DWORD TimeDateStamp;
479 CHAR FileName[MAX_PATH];
480 BOOLEAN Reparse;
481 HANDLE hFile;
482} IMAGEHLP_DEFERRED_SYMBOL_LOAD, *PIMAGEHLP_DEFERRED_SYMBOL_LOAD;
483#endif
484
485typedef struct _IMAGEHLP_DEFERRED_SYMBOL_LOAD64
486{
487 DWORD SizeOfStruct;
488 DWORD64 BaseOfImage;
489 DWORD CheckSum;
490 DWORD TimeDateStamp;
491 CHAR FileName[MAX_PATH];
492 BOOLEAN Reparse;
493 HANDLE hFile;
494 DWORD Flags;
495} IMAGEHLP_DEFERRED_SYMBOL_LOAD64, *PIMAGEHLP_DEFERRED_SYMBOL_LOAD64;
496
497typedef struct _IMAGEHLP_DEFERRED_SYMBOL_LOADW64
498{
499 DWORD SizeOfStruct;
500 DWORD64 BaseOfImage;
501 DWORD CheckSum;
502 DWORD TimeDateStamp;
503 WCHAR FileName[MAX_PATH + 1];
504 BOOLEAN Reparse;
505 HANDLE hFile;
506 DWORD Flags;
507} IMAGEHLP_DEFERRED_SYMBOL_LOADW64, *PIMAGEHLP_DEFERRED_SYMBOL_LOADW64;
508
509#if !defined(_IMAGEHLP_SOURCE_) && defined(_IMAGEHLP64)
510#define IMAGEHLP_DUPLICATE_SYMBOL IMAGEHLP_DUPLICATE_SYMBOL64
511#define PIMAGEHLP_DUPLICATE_SYMBOL PIMAGEHLP_DUPLICATE_SYMBOL64
512#else
513typedef struct _IMAGEHLP_DUPLICATE_SYMBOL
514{
515 DWORD SizeOfStruct;
516 DWORD NumberOfDups;
517 PIMAGEHLP_SYMBOL Symbol;
518 DWORD SelectedSymbol;
519} IMAGEHLP_DUPLICATE_SYMBOL, *PIMAGEHLP_DUPLICATE_SYMBOL;
520#endif
521
522typedef struct _IMAGEHLP_DUPLICATE_SYMBOL64
523{
524 DWORD SizeOfStruct;
525 DWORD NumberOfDups;
526 PIMAGEHLP_SYMBOL64 Symbol;
527 DWORD SelectedSymbol;
528} IMAGEHLP_DUPLICATE_SYMBOL64, *PIMAGEHLP_DUPLICATE_SYMBOL64;
529
530#define SYMOPT_CASE_INSENSITIVE 0x00000001
531#define SYMOPT_UNDNAME 0x00000002
532#define SYMOPT_DEFERRED_LOADS 0x00000004
533#define SYMOPT_NO_CPP 0x00000008
534#define SYMOPT_LOAD_LINES 0x00000010
535#define SYMOPT_OMAP_FIND_NEAREST 0x00000020
536#define SYMOPT_LOAD_ANYTHING 0x00000040
537#define SYMOPT_IGNORE_CVREC 0x00000080
538#define SYMOPT_NO_UNQUALIFIED_LOADS 0x00000100
539#define SYMOPT_FAIL_CRITICAL_ERRORS 0x00000200
540#define SYMOPT_EXACT_SYMBOLS 0x00000400
541#define SYMOPT_WILD_UNDERSCORE 0x00000800
542#define SYMOPT_USE_DEFAULTS 0x00001000
543#define SYMOPT_ALLOW_ABSOLUTE_SYMBOLS 0x00000800
544#define SYMOPT_IGNORE_NT_SYMPATH 0x00001000
545#define SYMOPT_INCLUDE_32BIT_MODULES 0x00002000
546#define SYMOPT_PUBLICS_ONLY 0x00004000
547#define SYMOPT_NO_PUBLICS 0x00008000
548#define SYMOPT_AUTO_PUBLICS 0x00010000
549#define SYMOPT_NO_IMAGE_SEARCH 0x00020000
550#define SYMOPT_SECURE 0x00040000
551#define SYMOPT_NO_PROMPTS 0x00080000
552#define SYMOPT_OVERWRITE 0x00100000
553#define SYMOPT_IGNORE_IMAGEDIR 0x00200000
554#define SYMOPT_FLAT_DIRECTORY 0x00400000
555#define SYMOPT_FAVOR_COMPRESSED 0x00800000
556#define SYMOPT_ALLOW_ZERO_ADDRESS 0x01000000
557#define SYMOPT_DISABLE_SYMSRV_AUTODETECT 0x02000000
558#define SYMOPT_READONLY_CACHE 0x04000000
559#define SYMOPT_SYMPATH_LAST 0x08000000
560#define SYMOPT_DISABLE_FAST_SYMBOLS 0x10000000
561#define SYMOPT_DISABLE_SYMSRV_TIMEOUT 0x20000000
562#define SYMOPT_DISABLE_SRVSTAR_ON_STARTUP 0x40000000
563#define SYMOPT_DEBUG 0x80000000
564
565typedef struct _IMAGEHLP_STACK_FRAME
566{
567 ULONG64 InstructionOffset;
568 ULONG64 ReturnOffset;
569 ULONG64 FrameOffset;
570 ULONG64 StackOffset;
571 ULONG64 BackingStoreOffset;
572 ULONG64 FuncTableEntry;
573 ULONG64 Params[4];
574 ULONG64 Reserved[5];
575 BOOL Virtual;
576 ULONG Reserved2;
577} IMAGEHLP_STACK_FRAME, *PIMAGEHLP_STACK_FRAME;
578
579typedef VOID IMAGEHLP_CONTEXT, *PIMAGEHLP_CONTEXT;
580
581#define DBHHEADER_DEBUGDIRS 0x1
582typedef struct _DBGHELP_MODLOAD_DATA
583{
584 DWORD ssize;
585 DWORD ssig;
586 PVOID data;
587 DWORD size;
588 DWORD flags;
589} MODLOAD_DATA, *PMODLOAD_DATA;
590
591/*************************
592 * MiniDUMP *
593 *************************/
594
595#include <pshpack4.h>
596/* DebugHelp */
597
598#define MINIDUMP_SIGNATURE 0x504D444D /* 'MDMP' */
599#define MINIDUMP_VERSION (42899)
600
601typedef DWORD RVA;
602typedef ULONG64 RVA64;
603
604typedef enum _MINIDUMP_TYPE
605{
606 MiniDumpNormal = 0x0000,
607 MiniDumpWithDataSegs = 0x0001,
608 MiniDumpWithFullMemory = 0x0002,
609 MiniDumpWithHandleData = 0x0004,
610 MiniDumpFilterMemory = 0x0008,
611 MiniDumpScanMemory = 0x0010,
612 MiniDumpWithUnloadedModules = 0x0020,
613 MiniDumpWithIndirectlyReferencedMemory = 0x0040,
614 MiniDumpFilterModulePaths = 0x0080,
615 MiniDumpWithProcessThreadData = 0x0100,
616 MiniDumpWithPrivateReadWriteMemory = 0x0200,
617 MiniDumpWithoutOptionalData = 0x0400,
618 MiniDumpWithFullMemoryInfo = 0x0800,
619 MiniDumpWithThreadInfo = 0x1000,
620 MiniDumpWithCodeSegs = 0x2000
621} MINIDUMP_TYPE;
622
623typedef enum _MINIDUMP_CALLBACK_TYPE
624{
625 ModuleCallback,
626 ThreadCallback,
627 ThreadExCallback,
628 IncludeThreadCallback,
629 IncludeModuleCallback,
630 MemoryCallback,
631} MINIDUMP_CALLBACK_TYPE;
632
633typedef struct _MINIDUMP_THREAD_CALLBACK
634{
635 ULONG ThreadId;
636 HANDLE ThreadHandle;
637 CONTEXT Context;
638 ULONG SizeOfContext;
639 ULONG64 StackBase;
640 ULONG64 StackEnd;
641} MINIDUMP_THREAD_CALLBACK, *PMINIDUMP_THREAD_CALLBACK;
642
643typedef struct _MINIDUMP_THREAD_EX_CALLBACK
644{
645 ULONG ThreadId;
646 HANDLE ThreadHandle;
647 CONTEXT Context;
648 ULONG SizeOfContext;
649 ULONG64 StackBase;
650 ULONG64 StackEnd;
651 ULONG64 BackingStoreBase;
652 ULONG64 BackingStoreEnd;
653} MINIDUMP_THREAD_EX_CALLBACK, *PMINIDUMP_THREAD_EX_CALLBACK;
654
655typedef struct _MINIDUMP_INCLUDE_THREAD_CALLBACK
656{
657 ULONG ThreadId;
658} MINIDUMP_INCLUDE_THREAD_CALLBACK, *PMINIDUMP_INCLUDE_THREAD_CALLBACK;
659
660typedef enum _THREAD_WRITE_FLAGS
661{
662 ThreadWriteThread = 0x0001,
663 ThreadWriteStack = 0x0002,
664 ThreadWriteContext = 0x0004,
665 ThreadWriteBackingStore = 0x0008,
666 ThreadWriteInstructionWindow = 0x0010,
667 ThreadWriteThreadData = 0x0020,
668 ThreadWriteThreadInfo = 0x0040
669} THREAD_WRITE_FLAGS;
670
671typedef struct _MINIDUMP_MODULE_CALLBACK
672{
673 PWCHAR FullPath;
674 ULONG64 BaseOfImage;
675 ULONG SizeOfImage;
676 ULONG CheckSum;
677 ULONG TimeDateStamp;
678 VS_FIXEDFILEINFO VersionInfo;
679 PVOID CvRecord;
680 ULONG SizeOfCvRecord;
681 PVOID MiscRecord;
682 ULONG SizeOfMiscRecord;
683} MINIDUMP_MODULE_CALLBACK, *PMINIDUMP_MODULE_CALLBACK;
684
685typedef struct _MINIDUMP_INCLUDE_MODULE_CALLBACK
686{
687 ULONG64 BaseOfImage;
688} MINIDUMP_INCLUDE_MODULE_CALLBACK, *PMINIDUMP_INCLUDE_MODULE_CALLBACK;
689
690typedef enum _MODULE_WRITE_FLAGS
691{
692 ModuleWriteModule = 0x0001,
693 ModuleWriteDataSeg = 0x0002,
694 ModuleWriteMiscRecord = 0x0004,
695 ModuleWriteCvRecord = 0x0008,
696 ModuleReferencedByMemory = 0x0010,
697 ModuleWriteTlsData = 0x0020,
698 ModuleWriteCodeSegs = 0x0040,
699} MODULE_WRITE_FLAGS;
700
701typedef struct _MINIDUMP_CALLBACK_INPUT
702{
703 ULONG ProcessId;
704 HANDLE ProcessHandle;
705 ULONG CallbackType;
706 union
707 {
708 MINIDUMP_THREAD_CALLBACK Thread;
709 MINIDUMP_THREAD_EX_CALLBACK ThreadEx;
710 MINIDUMP_MODULE_CALLBACK Module;
711 MINIDUMP_INCLUDE_THREAD_CALLBACK IncludeThread;
712 MINIDUMP_INCLUDE_MODULE_CALLBACK IncludeModule;
713 } DUMMYUNIONNAME;
714} MINIDUMP_CALLBACK_INPUT, *PMINIDUMP_CALLBACK_INPUT;
715
716typedef struct _MINIDUMP_CALLBACK_OUTPUT
717{
718 union
719 {
720 ULONG ModuleWriteFlags;
721 ULONG ThreadWriteFlags;
722 struct
723 {
724 ULONG64 MemoryBase;
725 ULONG MemorySize;
726 } DUMMYSTRUCTNAME;
727 } DUMMYUNIONNAME;
728} MINIDUMP_CALLBACK_OUTPUT, *PMINIDUMP_CALLBACK_OUTPUT;
729
730typedef BOOL
731(WINAPI* MINIDUMP_CALLBACK_ROUTINE)(
732 _Inout_ PVOID,
733 _In_ const PMINIDUMP_CALLBACK_INPUT,
734 _Inout_ PMINIDUMP_CALLBACK_OUTPUT);
735
736typedef struct _MINIDUMP_CALLBACK_INFORMATION
737{
738 MINIDUMP_CALLBACK_ROUTINE CallbackRoutine;
739 void* CallbackParam;
740} MINIDUMP_CALLBACK_INFORMATION, *PMINIDUMP_CALLBACK_INFORMATION;
741
742typedef struct _MINIDUMP_LOCATION_DESCRIPTOR
743{
744 ULONG DataSize;
745 RVA Rva;
746} MINIDUMP_LOCATION_DESCRIPTOR;
747
748typedef struct _MINIDUMP_LOCATION_DESCRIPTOR64
749{
750 ULONG64 DataSize;
751 RVA64 Rva;
752} MINIDUMP_LOCATION_DESCRIPTOR64;
753
754typedef struct _MINIDUMP_DIRECTORY
755{
756 ULONG StreamType;
757 MINIDUMP_LOCATION_DESCRIPTOR Location;
758} MINIDUMP_DIRECTORY, *PMINIDUMP_DIRECTORY;
759
760typedef struct _MINIDUMP_EXCEPTION
761{
762 ULONG ExceptionCode;
763 ULONG ExceptionFlags;
764 ULONG64 ExceptionRecord;
765 ULONG64 ExceptionAddress;
766 ULONG NumberParameters;
767 ULONG __unusedAlignment;
768 ULONG64 ExceptionInformation[EXCEPTION_MAXIMUM_PARAMETERS];
769} MINIDUMP_EXCEPTION, *PMINIDUMP_EXCEPTION;
770
771typedef struct _MINIDUMP_EXCEPTION_INFORMATION
772{
773 DWORD ThreadId;
774 PEXCEPTION_POINTERS ExceptionPointers;
775 BOOL ClientPointers;
776} MINIDUMP_EXCEPTION_INFORMATION, *PMINIDUMP_EXCEPTION_INFORMATION;
777
778typedef struct MINIDUMP_EXCEPTION_STREAM
779{
780 ULONG ThreadId;
781 ULONG __alignment;
782 MINIDUMP_EXCEPTION ExceptionRecord;
783 MINIDUMP_LOCATION_DESCRIPTOR ThreadContext;
784} MINIDUMP_EXCEPTION_STREAM, *PMINIDUMP_EXCEPTION_STREAM;
785
786typedef struct _MINIDUMP_HEADER
787{
788 DWORD Signature;
789 DWORD Version;
790 DWORD NumberOfStreams;
791 RVA StreamDirectoryRva;
792 DWORD CheckSum;
793 union
794 {
795 DWORD Reserved;
796 DWORD TimeDateStamp;
797 } DUMMYUNIONNAME;
798 ULONG64 Flags;
799} MINIDUMP_HEADER, *PMINIDUMP_HEADER;
800
801typedef struct _MINIDUMP_MEMORY_DESCRIPTOR
802{
803 ULONG64 StartOfMemoryRange;
804 MINIDUMP_LOCATION_DESCRIPTOR Memory;
805} MINIDUMP_MEMORY_DESCRIPTOR, *PMINIDUMP_MEMORY_DESCRIPTOR;
806
807typedef struct _MINIDUMP_MEMORY_LIST
808{
809 ULONG NumberOfMemoryRanges;
810 MINIDUMP_MEMORY_DESCRIPTOR MemoryRanges[1]; /* FIXME: 0-sized array not supported */
811} MINIDUMP_MEMORY_LIST, *PMINIDUMP_MEMORY_LIST;
812
813typedef struct _MINIDUMP_MEMORY_DESCRIPTOR64
814{
815 ULONG64 StartOfMemoryRange;
816 ULONG64 DataSize;
817} MINIDUMP_MEMORY_DESCRIPTOR64, *PMINIDUMP_MEMORY_DESCRIPTOR64;
818
819typedef struct _MINIDUMP_MEMORY64_LIST
820{
821 ULONG64 NumberOfMemoryRanges;
822 RVA64 BaseRva;
823 MINIDUMP_MEMORY_DESCRIPTOR64 MemoryRanges[1]; /* FIXME: 0-sized array not supported */
824} MINIDUMP_MEMORY64_LIST, *PMINIDUMP_MEMORY64_LIST;
825
826#define MINIDUMP_MISC1_PROCESS_ID 0x00000001
827#define MINIDUMP_MISC1_PROCESS_TIMES 0x00000002
828
829typedef struct _MINIDUMP_MISC_INFO
830{
831 ULONG SizeOfInfo;
832 ULONG Flags1;
833 ULONG ProcessId;
834 ULONG ProcessCreateTime;
835 ULONG ProcessUserTime;
836 ULONG ProcessKernelTime;
837} MINIDUMP_MISC_INFO, *PMINIDUMP_MISC_INFO;
838
839typedef struct _MINIDUMP_MODULE
840{
841 ULONG64 BaseOfImage;
842 ULONG SizeOfImage;
843 ULONG CheckSum;
844 ULONG TimeDateStamp;
845 RVA ModuleNameRva;
846 VS_FIXEDFILEINFO VersionInfo;
847 MINIDUMP_LOCATION_DESCRIPTOR CvRecord;
848 MINIDUMP_LOCATION_DESCRIPTOR MiscRecord;
849 ULONG64 Reserved0;
850 ULONG64 Reserved1;
851} MINIDUMP_MODULE, *PMINIDUMP_MODULE;
852
853typedef struct _MINIDUMP_MODULE_LIST
854{
855 ULONG NumberOfModules;
856 MINIDUMP_MODULE Modules[1]; /* FIXME: 0-sized array not supported */
857} MINIDUMP_MODULE_LIST, *PMINIDUMP_MODULE_LIST;
858
859typedef struct _MINIDUMP_STRING
860{
861 ULONG Length;
862 WCHAR Buffer[1]; /* FIXME: O-sized array not supported */
863} MINIDUMP_STRING, *PMINIDUMP_STRING;
864
865typedef struct _MINIDUMP_SYSTEM_INFO
866{
867 USHORT ProcessorArchitecture;
868 USHORT ProcessorLevel;
869 USHORT ProcessorRevision;
870 union
871 {
872 USHORT Reserved0;
873 struct
874 {
875 UCHAR NumberOfProcessors;
876 UCHAR ProductType;
877 } DUMMYSTRUCTNAME;
878 } DUMMYUNIONNAME;
879
880 ULONG MajorVersion;
881 ULONG MinorVersion;
882 ULONG BuildNumber;
883 ULONG PlatformId;
884
885 RVA CSDVersionRva;
886 union
887 {
888 ULONG Reserved1;
889 struct
890 {
891 USHORT SuiteMask;
892 USHORT Reserved2;
893 } DUMMYSTRUCTNAME;
894 } DUMMYUNIONNAME1;
895 union _CPU_INFORMATION
896 {
897 struct
898 {
899 ULONG VendorId[3];
900 ULONG VersionInformation;
901 ULONG FeatureInformation;
902 ULONG AMDExtendedCpuFeatures;
903 } X86CpuInfo;
904 struct
905 {
906 ULONG64 ProcessorFeatures[2];
907 } OtherCpuInfo;
908 } Cpu;
909
910} MINIDUMP_SYSTEM_INFO, *PMINIDUMP_SYSTEM_INFO;
911
912typedef struct _MINIDUMP_THREAD
913{
914 ULONG ThreadId;
915 ULONG SuspendCount;
916 ULONG PriorityClass;
917 ULONG Priority;
918 ULONG64 Teb;
919 MINIDUMP_MEMORY_DESCRIPTOR Stack;
920 MINIDUMP_LOCATION_DESCRIPTOR ThreadContext;
921} MINIDUMP_THREAD, *PMINIDUMP_THREAD;
922
923typedef struct _MINIDUMP_THREAD_LIST
924{
925 ULONG NumberOfThreads;
926 MINIDUMP_THREAD Threads[1]; /* FIXME: no support of 0 sized array */
927} MINIDUMP_THREAD_LIST, *PMINIDUMP_THREAD_LIST;
928
929typedef struct _MINIDUMP_USER_STREAM
930{
931 ULONG Type;
932 ULONG BufferSize;
933 void* Buffer;
934} MINIDUMP_USER_STREAM, *PMINIDUMP_USER_STREAM;
935
936typedef struct _MINIDUMP_USER_STREAM_INFORMATION
937{
938 ULONG UserStreamCount;
939 PMINIDUMP_USER_STREAM UserStreamArray;
940} MINIDUMP_USER_STREAM_INFORMATION, *PMINIDUMP_USER_STREAM_INFORMATION;
941
942typedef enum _MINIDUMP_STREAM_TYPE
943{
944 UnusedStream = 0,
945 ReservedStream0 = 1,
946 ReservedStream1 = 2,
947 ThreadListStream = 3,
948 ModuleListStream = 4,
949 MemoryListStream = 5,
950 ExceptionStream = 6,
951 SystemInfoStream = 7,
952 ThreadExListStream = 8,
953 Memory64ListStream = 9,
954 CommentStreamA = 10,
955 CommentStreamW = 11,
956 HandleDataStream = 12,
957 FunctionTableStream = 13,
958 UnloadedModuleListStream = 14,
959 MiscInfoStream = 15,
960 MemoryInfoListStream = 16,
961 ThreadInfoListStream = 17,
962
963 LastReservedStream = 0xffff
964} MINIDUMP_STREAM_TYPE;
965
966BOOL
967WINAPI
968MiniDumpWriteDump(
969 _In_ HANDLE,
970 _In_ DWORD,
971 _In_ HANDLE,
972 _In_ MINIDUMP_TYPE,
973 _In_opt_ PMINIDUMP_EXCEPTION_INFORMATION,
974 _In_opt_ PMINIDUMP_USER_STREAM_INFORMATION,
975 _In_opt_ PMINIDUMP_CALLBACK_INFORMATION);
976
977BOOL
978WINAPI
979MiniDumpReadDumpStream(
980 _In_ PVOID,
981 _In_ ULONG,
982 _Outptr_result_maybenull_ PMINIDUMP_DIRECTORY*,
983 _Outptr_result_maybenull_ PVOID*,
984 _Out_opt_ ULONG*);
985
986#include <poppack.h>
987
988/*************************
989 * MODULE handling *
990 *************************/
991
992/* flags for SymLoadModuleEx */
993#define SLMFLAG_VIRTUAL 0x1
994#define SLMFLAG_NO_SYMBOLS 0x4
995
996typedef BOOL
997(CALLBACK *PENUMLOADED_MODULES_CALLBACK64)(
998 _In_ PCSTR,
999 _In_ DWORD64,
1000 _In_ ULONG,
1001 _In_opt_ PVOID);
1002
1003BOOL
1004WINAPI
1005EnumerateLoadedModules64(
1006 _In_ HANDLE,
1007 _In_ PENUMLOADED_MODULES_CALLBACK64,
1008 _In_opt_ PVOID);
1009
1010typedef BOOL
1011(CALLBACK *PENUMLOADED_MODULES_CALLBACKW64)(
1012 _In_ PCWSTR,
1013 _In_ DWORD64,
1014 _In_ ULONG,
1015 _In_opt_ PVOID);
1016
1017BOOL
1018WINAPI
1019EnumerateLoadedModulesW64(
1020 _In_ HANDLE,
1021 _In_ PENUMLOADED_MODULES_CALLBACKW64,
1022 _In_opt_ PVOID);
1023
1024typedef BOOL
1025(CALLBACK *PSYM_ENUMMODULES_CALLBACK64)(
1026 _In_ PCSTR,
1027 _In_ DWORD64,
1028 _In_opt_ PVOID);
1029
1030BOOL
1031WINAPI
1032SymEnumerateModules64(
1033 _In_ HANDLE,
1034 _In_ PSYM_ENUMMODULES_CALLBACK64,
1035 _In_opt_ PVOID);
1036
1037typedef BOOL
1038(CALLBACK *PSYM_ENUMMODULES_CALLBACKW64)(
1039 _In_ PCWSTR,
1040 _In_ DWORD64,
1041 _In_opt_ PVOID);
1042
1043BOOL
1044WINAPI
1045SymEnumerateModulesW64(
1046 _In_ HANDLE,
1047 _In_ PSYM_ENUMMODULES_CALLBACKW64,
1048 _In_opt_ PVOID);
1049
1050BOOL
1051WINAPI
1052SymGetModuleInfo64(
1053 _In_ HANDLE,
1054 _In_ DWORD64,
1055 _Out_ PIMAGEHLP_MODULE64);
1056
1057BOOL
1058WINAPI
1059SymGetModuleInfoW64(
1060 _In_ HANDLE,
1061 _In_ DWORD64,
1062 _Out_ PIMAGEHLP_MODULEW64);
1063
1064DWORD64 WINAPI SymGetModuleBase64(_In_ HANDLE, _In_ DWORD64);
1065
1066DWORD64
1067WINAPI
1068SymLoadModule64(
1069 _In_ HANDLE,
1070 _In_opt_ HANDLE,
1071 _In_opt_ PCSTR,
1072 _In_opt_ PCSTR,
1073 _In_ DWORD64,
1074 _In_ DWORD);
1075
1076DWORD64
1077WINAPI
1078SymLoadModuleEx(
1079 _In_ HANDLE,
1080 _In_opt_ HANDLE,
1081 _In_opt_ PCSTR,
1082 _In_opt_ PCSTR,
1083 _In_ DWORD64,
1084 _In_ DWORD,
1085 _In_opt_ PMODLOAD_DATA,
1086 _In_opt_ DWORD);
1087
1088DWORD64
1089WINAPI
1090SymLoadModuleExW(
1091 _In_ HANDLE,
1092 _In_opt_ HANDLE,
1093 _In_opt_ PCWSTR,
1094 _In_opt_ PCWSTR,
1095 _In_ DWORD64,
1096 _In_ DWORD,
1097 _In_opt_ PMODLOAD_DATA,
1098 _In_opt_ DWORD);
1099
1100BOOL WINAPI SymUnloadModule64(_In_ HANDLE, _In_ DWORD64);
1101
1102/*************************
1103 * Symbol Handling *
1104 *************************/
1105
1106#define IMAGEHLP_SYMBOL_INFO_VALUEPRESENT 1
1107#define IMAGEHLP_SYMBOL_INFO_REGISTER SYMF_REGISTER /* 0x08 */
1108#define IMAGEHLP_SYMBOL_INFO_REGRELATIVE SYMF_REGREL /* 0x10 */
1109#define IMAGEHLP_SYMBOL_INFO_FRAMERELATIVE SYMF_FRAMEREL /* 0x20 */
1110#define IMAGEHLP_SYMBOL_INFO_PARAMETER SYMF_PARAMETER /* 0x40 */
1111#define IMAGEHLP_SYMBOL_INFO_LOCAL SYMF_LOCAL /* 0x80 */
1112#define IMAGEHLP_SYMBOL_INFO_CONSTANT SYMF_CONSTANT /* 0x100 */
1113#define IMAGEHLP_SYMBOL_FUNCTION SYMF_FUNCTION /* 0x800 */
1114
1115#define SYMFLAG_VALUEPRESENT 0x00000001
1116#define SYMFLAG_REGISTER 0x00000008
1117#define SYMFLAG_REGREL 0x00000010
1118#define SYMFLAG_FRAMEREL 0x00000020
1119#define SYMFLAG_PARAMETER 0x00000040
1120#define SYMFLAG_LOCAL 0x00000080
1121#define SYMFLAG_CONSTANT 0x00000100
1122#define SYMFLAG_EXPORT 0x00000200
1123#define SYMFLAG_FORWARDER 0x00000400
1124#define SYMFLAG_FUNCTION 0x00000800
1125#define SYMFLAG_VIRTUAL 0x00001000
1126#define SYMFLAG_THUNK 0x00002000
1127#define SYMFLAG_TLSREL 0x00004000
1128#define SYMFLAG_SLOT 0x00008000
1129#define SYMFLAG_ILREL 0x00010000
1130#define SYMFLAG_METADATA 0x00020000
1131#define SYMFLAG_CLR_TOKEN 0x00040000
1132#define SYMFLAG_NULL 0x00080000
1133#define SYMFLAG_FUNC_NO_RETURN 0x00100000
1134#define SYMFLAG_SYNTHETIC_ZEROBASE 0x00200000
1135#define SYMFLAG_PUBLIC_CODE 0x00400000
1136
1137#define MAX_SYM_NAME 2000
1138
1139typedef struct _SYMBOL_INFO
1140{
1141 ULONG SizeOfStruct;
1142 ULONG TypeIndex;
1143 ULONG64 Reserved[2];
1144 ULONG Index;
1145 ULONG Size;
1146 ULONG64 ModBase;
1147 ULONG Flags;
1148 ULONG64 Value;
1149 ULONG64 Address;
1150 ULONG Register;
1151 ULONG Scope;
1152 ULONG Tag;
1153 ULONG NameLen;
1154 ULONG MaxNameLen;
1155 CHAR Name[1];
1156} SYMBOL_INFO, *PSYMBOL_INFO;
1157
1158typedef struct _SYMBOL_INFOW
1159{
1160 ULONG SizeOfStruct;
1161 ULONG TypeIndex;
1162 ULONG64 Reserved[2];
1163 ULONG Index;
1164 ULONG Size;
1165 ULONG64 ModBase;
1166 ULONG Flags;
1167 ULONG64 Value;
1168 ULONG64 Address;
1169 ULONG Register;
1170 ULONG Scope;
1171 ULONG Tag;
1172 ULONG NameLen;
1173 ULONG MaxNameLen;
1174 WCHAR Name[1];
1175} SYMBOL_INFOW, *PSYMBOL_INFOW;
1176
1177typedef struct _SYMBOL_INFO_PACKAGE
1178{
1179 SYMBOL_INFO si;
1180 CHAR name[MAX_SYM_NAME+1];
1181} SYMBOL_INFO_PACKAGE, *PSYMBOL_INFO_PACKAGE;
1182
1183typedef struct _SYMBOL_INFO_PACKAGEW
1184{
1185 SYMBOL_INFOW si;
1186 WCHAR name[MAX_SYM_NAME+1];
1187} SYMBOL_INFO_PACKAGEW, *PSYMBOL_INFO_PACKAGEW;
1188
1189typedef enum _IMAGEHLP_SYMBOL_TYPE_INFO
1190{
1191 TI_GET_SYMTAG,
1192 TI_GET_SYMNAME,
1193 TI_GET_LENGTH,
1194 TI_GET_TYPE,
1195 TI_GET_TYPEID,
1196 TI_GET_BASETYPE,
1197 TI_GET_ARRAYINDEXTYPEID,
1198 TI_FINDCHILDREN,
1199 TI_GET_DATAKIND,
1200 TI_GET_ADDRESSOFFSET,
1201 TI_GET_OFFSET,
1202 TI_GET_VALUE,
1203 TI_GET_COUNT,
1204 TI_GET_CHILDRENCOUNT,
1205 TI_GET_BITPOSITION,
1206 TI_GET_VIRTUALBASECLASS,
1207 TI_GET_VIRTUALTABLESHAPEID,
1208 TI_GET_VIRTUALBASEPOINTEROFFSET,
1209 TI_GET_CLASSPARENTID,
1210 TI_GET_NESTED,
1211 TI_GET_SYMINDEX,
1212 TI_GET_LEXICALPARENT,
1213 TI_GET_ADDRESS,
1214 TI_GET_THISADJUST,
1215 TI_GET_UDTKIND,
1216 TI_IS_EQUIV_TO,
1217 TI_GET_CALLING_CONVENTION,
1218} IMAGEHLP_SYMBOL_TYPE_INFO;
1219
1220#define IMAGEHLP_GET_TYPE_INFO_UNCACHED 0x00000001
1221#define IMAGEHLP_GET_TYPE_INFO_CHILDREN 0x00000002
1222typedef struct _IMAGEHLP_GET_TYPE_INFO_PARAMS
1223{
1224 ULONG SizeOfStruct;
1225 ULONG Flags;
1226 ULONG NumIds;
1227 PULONG TypeIds;
1228 ULONG64 TagFilter;
1229 ULONG NumReqs;
1230 IMAGEHLP_SYMBOL_TYPE_INFO* ReqKinds;
1231 PULONG_PTR ReqOffsets;
1232 PULONG ReqSizes;
1233 ULONG_PTR ReqStride;
1234 ULONG_PTR BufferSize;
1235 PVOID Buffer;
1236 ULONG EntriesMatched;
1237 ULONG EntriesFilled;
1238 ULONG64 TagsFound;
1239 ULONG64 AllReqsValid;
1240 ULONG NumReqsValid;
1241 PULONG64 ReqsValid;
1242} IMAGEHLP_GET_TYPE_INFO_PARAMS, *PIMAGEHLP_GET_TYPE_INFO_PARAMS;
1243
1244typedef struct _TI_FINDCHILDREN_PARAMS
1245{
1246 ULONG Count;
1247 ULONG Start;
1248 ULONG ChildId[1];
1249} TI_FINDCHILDREN_PARAMS;
1250
1251#define UNDNAME_COMPLETE (0x0000)
1252#define UNDNAME_NO_LEADING_UNDERSCORES (0x0001)
1253#define UNDNAME_NO_MS_KEYWORDS (0x0002)
1254#define UNDNAME_NO_FUNCTION_RETURNS (0x0004)
1255#define UNDNAME_NO_ALLOCATION_MODEL (0x0008)
1256#define UNDNAME_NO_ALLOCATION_LANGUAGE (0x0010)
1257#define UNDNAME_NO_MS_THISTYPE (0x0020)
1258#define UNDNAME_NO_CV_THISTYPE (0x0040)
1259#define UNDNAME_NO_THISTYPE (0x0060)
1260#define UNDNAME_NO_ACCESS_SPECIFIERS (0x0080)
1261#define UNDNAME_NO_THROW_SIGNATURES (0x0100)
1262#define UNDNAME_NO_MEMBER_TYPE (0x0200)
1263#define UNDNAME_NO_RETURN_UDT_MODEL (0x0400)
1264#define UNDNAME_32_BIT_DECODE (0x0800)
1265#define UNDNAME_NAME_ONLY (0x1000)
1266#define UNDNAME_NO_ARGUMENTS (0x2000)
1267#define UNDNAME_NO_SPECIAL_SYMS (0x4000)
1268
1269#define SYMSEARCH_MASKOBJS 0x01
1270#define SYMSEARCH_RECURSE 0x02
1271#define SYMSEARCH_GLOBALSONLY 0x04
1272
1273BOOL
1274WINAPI
1275SymGetTypeInfo(
1276 _In_ HANDLE,
1277 _In_ DWORD64,
1278 _In_ ULONG,
1279 _In_ IMAGEHLP_SYMBOL_TYPE_INFO,
1280 _Out_ PVOID);
1281
1282BOOL
1283WINAPI
1284SymGetTypeInfoEx(
1285 _In_ HANDLE,
1286 _In_ DWORD64,
1287 _Inout_ PIMAGEHLP_GET_TYPE_INFO_PARAMS);
1288
1289typedef BOOL
1290(CALLBACK *PSYM_ENUMERATESYMBOLS_CALLBACK)(
1291 _In_ PSYMBOL_INFO,
1292 _In_ ULONG,
1293 _In_opt_ PVOID);
1294
1295typedef BOOL
1296(CALLBACK *PSYM_ENUMERATESYMBOLS_CALLBACKW)(
1297 _In_ PSYMBOL_INFOW,
1298 _In_ ULONG,
1299 _In_opt_ PVOID);
1300
1301BOOL
1302WINAPI
1303SymEnumTypes(
1304 _In_ HANDLE,
1305 _In_ ULONG64,
1306 _In_ PSYM_ENUMERATESYMBOLS_CALLBACK,
1307 _In_opt_ PVOID);
1308
1309BOOL
1310WINAPI
1311SymEnumTypesW(
1312 _In_ HANDLE,
1313 _In_ ULONG64,
1314 _In_ PSYM_ENUMERATESYMBOLS_CALLBACKW,
1315 _In_opt_ PVOID);
1316
1317BOOL
1318WINAPI
1319SymFromAddr(
1320 _In_ HANDLE,
1321 _In_ DWORD64,
1322 _Out_opt_ DWORD64*,
1323 _Inout_ SYMBOL_INFO*);
1324
1325BOOL
1326WINAPI
1327SymFromAddrW(
1328 _In_ HANDLE,
1329 _In_ DWORD64,
1330 _Out_opt_ DWORD64*,
1331 _Inout_ SYMBOL_INFOW*);
1332
1333BOOL
1334WINAPI
1335SymFromToken(
1336 _In_ HANDLE,
1337 _In_ DWORD64,
1338 _In_ DWORD,
1339 _Inout_ PSYMBOL_INFO);
1340
1341BOOL
1342WINAPI
1343SymFromTokenW(
1344 _In_ HANDLE,
1345 _In_ DWORD64,
1346 _In_ DWORD,
1347 _Inout_ PSYMBOL_INFOW);
1348
1349BOOL WINAPI SymFromName(_In_ HANDLE, _In_ PCSTR, _Inout_ PSYMBOL_INFO);
1350BOOL WINAPI SymFromNameW(_In_ HANDLE, _In_ PCWSTR, _Inout_ PSYMBOL_INFOW);
1351
1352BOOL
1353WINAPI
1354SymGetSymFromAddr64(
1355 _In_ HANDLE,
1356 _In_ DWORD64,
1357 _Out_opt_ PDWORD64,
1358 _Inout_ PIMAGEHLP_SYMBOL64);
1359
1360BOOL
1361WINAPI
1362SymGetSymFromName64(
1363 _In_ HANDLE,
1364 _In_ PCSTR,
1365 _Inout_ PIMAGEHLP_SYMBOL64);
1366
1367BOOL
1368WINAPI
1369SymGetTypeFromName(
1370 _In_ HANDLE,
1371 _In_ ULONG64,
1372 _In_ PCSTR,
1373 _Inout_ PSYMBOL_INFO);
1374
1375BOOL
1376WINAPI
1377SymGetTypeFromNameW(
1378 _In_ HANDLE,
1379 _In_ ULONG64,
1380 _In_ PCWSTR,
1381 _Inout_ PSYMBOL_INFOW);
1382
1383BOOL WINAPI SymGetSymNext64(_In_ HANDLE, _Inout_ PIMAGEHLP_SYMBOL64);
1384BOOL WINAPI SymGetSymNextW64(_In_ HANDLE, _Inout_ PIMAGEHLP_SYMBOLW64);
1385BOOL WINAPI SymGetSymPrev64(_In_ HANDLE, _Inout_ PIMAGEHLP_SYMBOL64);
1386BOOL WINAPI SymGetSymPrevW64(_In_ HANDLE, _Inout_ PIMAGEHLP_SYMBOLW64);
1387
1388BOOL
1389WINAPI
1390SymEnumSym(
1391 _In_ HANDLE,
1392 _In_ ULONG64,
1393 _In_ PSYM_ENUMERATESYMBOLS_CALLBACK,
1394 _In_opt_ PVOID);
1395
1396BOOL
1397WINAPI
1398SymEnumSymbols(
1399 _In_ HANDLE,
1400 _In_ ULONG64,
1401 _In_opt_ PCSTR,
1402 _In_ PSYM_ENUMERATESYMBOLS_CALLBACK,
1403 _In_opt_ PVOID);
1404
1405BOOL
1406WINAPI
1407SymEnumSymbolsW(
1408 _In_ HANDLE,
1409 _In_ ULONG64,
1410 _In_opt_ PCWSTR,
1411 _In_ PSYM_ENUMERATESYMBOLS_CALLBACKW,
1412 _In_opt_ PVOID);
1413
1414typedef BOOL
1415(CALLBACK *PSYM_ENUMSYMBOLS_CALLBACK64)(
1416 _In_ PCSTR,
1417 _In_ DWORD64,
1418 _In_ ULONG,
1419 _In_opt_ PVOID);
1420
1421typedef BOOL
1422(CALLBACK *PSYM_ENUMSYMBOLS_CALLBACK64W)(
1423 _In_ PCWSTR,
1424 _In_ DWORD64,
1425 _In_ ULONG,
1426 _In_opt_ PVOID);
1427
1428BOOL
1429WINAPI
1430SymEnumerateSymbols64(
1431 _In_ HANDLE,
1432 _In_ ULONG64,
1433 _In_ PSYM_ENUMSYMBOLS_CALLBACK64,
1434 _In_opt_ PVOID);
1435
1436BOOL
1437WINAPI
1438SymEnumerateSymbolsW64(
1439 _In_ HANDLE,
1440 _In_ ULONG64,
1441 _In_ PSYM_ENUMSYMBOLS_CALLBACK64W,
1442 _In_opt_ PVOID);
1443
1444BOOL
1445WINAPI
1446SymEnumSymbolsForAddr(
1447 _In_ HANDLE,
1448 _In_ DWORD64,
1449 _In_ PSYM_ENUMERATESYMBOLS_CALLBACK,
1450 _In_opt_ PVOID);
1451
1452BOOL
1453WINAPI
1454SymEnumSymbolsForAddrW(
1455 _In_ HANDLE,
1456 _In_ DWORD64,
1457 _In_ PSYM_ENUMERATESYMBOLS_CALLBACKW,
1458 _In_opt_ PVOID);
1459
1460typedef BOOL
1461(CALLBACK *PSYMBOL_REGISTERED_CALLBACK64)(
1462 _In_ HANDLE,
1463 _In_ ULONG,
1464 _In_opt_ ULONG64,
1465 _In_opt_ ULONG64);
1466
1467BOOL
1468WINAPI
1469SymRegisterCallback64(
1470 _In_ HANDLE,
1471 _In_ PSYMBOL_REGISTERED_CALLBACK64,
1472 _In_ ULONG64);
1473
1474BOOL
1475WINAPI
1476SymRegisterCallbackW64(
1477 _In_ HANDLE,
1478 _In_ PSYMBOL_REGISTERED_CALLBACK64,
1479 _In_ ULONG64);
1480
1481BOOL
1482WINAPI
1483SymUnDName64(
1484 _In_ PIMAGEHLP_SYMBOL64,
1485 _Out_writes_(UnDecNameLength) PSTR,
1486 _In_ DWORD UnDecNameLength);
1487
1488BOOL WINAPI SymMatchString(_In_ PCSTR, _In_ PCSTR, _In_ BOOL);
1489BOOL WINAPI SymMatchStringA(_In_ PCSTR, _In_ PCSTR, _In_ BOOL);
1490BOOL WINAPI SymMatchStringW(_In_ PCWSTR, _In_ PCWSTR, _In_ BOOL);
1491
1492BOOL
1493WINAPI
1494SymSearch(
1495 _In_ HANDLE,
1496 _In_ ULONG64,
1497 _In_opt_ DWORD,
1498 _In_opt_ DWORD,
1499 _In_opt_ PCSTR,
1500 _In_opt_ DWORD64,
1501 _In_ PSYM_ENUMERATESYMBOLS_CALLBACK,
1502 _In_opt_ PVOID,
1503 _In_ DWORD);
1504
1505BOOL
1506WINAPI
1507SymSearchW(
1508 _In_ HANDLE,
1509 _In_ ULONG64,
1510 _In_opt_ DWORD,
1511 _In_opt_ DWORD,
1512 _In_opt_ PCWSTR,
1513 _In_opt_ DWORD64,
1514 _In_ PSYM_ENUMERATESYMBOLS_CALLBACKW,
1515 _In_opt_ PVOID,
1516 _In_ DWORD);
1517
1518DWORD
1519WINAPI
1520UnDecorateSymbolName(
1521 _In_ PCSTR,
1522 _Out_writes_(maxStringLength) PSTR,
1523 _In_ DWORD maxStringLength,
1524 _In_ DWORD);
1525
1526DWORD
1527WINAPI
1528UnDecorateSymbolNameW(
1529 _In_ PCWSTR,
1530 _Out_writes_(maxStringLength) PWSTR,
1531 _In_ DWORD maxStringLength,
1532 _In_ DWORD);
1533
1534BOOL
1535WINAPI
1536SymGetScope(
1537 _In_ HANDLE,
1538 _In_ ULONG64,
1539 _In_ DWORD,
1540 _Inout_ PSYMBOL_INFO);
1541
1542BOOL
1543WINAPI
1544SymGetScopeW(
1545 _In_ HANDLE,
1546 _In_ ULONG64,
1547 _In_ DWORD,
1548 _Inout_ PSYMBOL_INFOW);
1549
1550BOOL
1551WINAPI
1552SymFromIndex(
1553 _In_ HANDLE,
1554 _In_ ULONG64,
1555 _In_ DWORD,
1556 _Inout_ PSYMBOL_INFO);
1557
1558BOOL
1559WINAPI
1560SymFromIndexW(
1561 _In_ HANDLE,
1562 _In_ ULONG64,
1563 _In_ DWORD,
1564 _Inout_ PSYMBOL_INFOW);
1565
1566BOOL
1567WINAPI
1568SymAddSymbol(
1569 _In_ HANDLE,
1570 _In_ ULONG64,
1571 _In_ PCSTR,
1572 _In_ DWORD64,
1573 _In_ DWORD,
1574 _In_ DWORD);
1575
1576BOOL
1577WINAPI
1578SymAddSymbolW(
1579 _In_ HANDLE,
1580 _In_ ULONG64,
1581 _In_ PCWSTR,
1582 _In_ DWORD64,
1583 _In_ DWORD,
1584 _In_ DWORD);
1585
1586BOOL
1587WINAPI
1588SymDeleteSymbol(
1589 _In_ HANDLE,
1590 _In_ ULONG64,
1591 _In_opt_ PCSTR,
1592 _In_ DWORD64,
1593 _In_ DWORD);
1594
1595BOOL
1596WINAPI
1597SymDeleteSymbolW(
1598 _In_ HANDLE,
1599 _In_ ULONG64,
1600 _In_opt_ PCWSTR,
1601 _In_ DWORD64,
1602 _In_ DWORD);
1603
1604/*************************
1605 * Source Files *
1606 *************************/
1607
1608typedef BOOL
1609(CALLBACK *PSYM_ENUMSOURCEFILES_CALLBACK)(
1610 _In_ PSOURCEFILE,
1611 _In_opt_ PVOID);
1612
1613typedef BOOL
1614(CALLBACK *PSYM_ENUMSOURCEFILES_CALLBACKW)(
1615 _In_ PSOURCEFILEW,
1616 _In_opt_ PVOID);
1617
1618BOOL
1619WINAPI
1620SymEnumSourceFiles(
1621 _In_ HANDLE,
1622 _In_ ULONG64,
1623 _In_opt_ PCSTR,
1624 _In_ PSYM_ENUMSOURCEFILES_CALLBACK,
1625 _In_opt_ PVOID);
1626
1627BOOL
1628WINAPI
1629SymEnumSourceFilesW(
1630 _In_ HANDLE,
1631 _In_ ULONG64,
1632 _In_opt_ PCWSTR,
1633 _In_ PSYM_ENUMSOURCEFILES_CALLBACKW,
1634 _In_opt_ PVOID);
1635
1636BOOL
1637WINAPI
1638SymGetLineFromAddr64(
1639 _In_ HANDLE,
1640 _In_ DWORD64,
1641 _Out_ PDWORD,
1642 _Out_ PIMAGEHLP_LINE64);
1643
1644BOOL
1645WINAPI
1646SymGetLineFromAddrW64(
1647 _In_ HANDLE,
1648 _In_ DWORD64,
1649 _Out_ PDWORD,
1650 _Out_ PIMAGEHLP_LINEW64);
1651
1652BOOL WINAPI SymGetLinePrev64(_In_ HANDLE, _Inout_ PIMAGEHLP_LINE64);
1653BOOL WINAPI SymGetLinePrevW64(_In_ HANDLE, _Inout_ PIMAGEHLP_LINEW64);
1654BOOL WINAPI SymGetLineNext64(_In_ HANDLE, _Inout_ PIMAGEHLP_LINE64);
1655BOOL WINAPI SymGetLineNextW64(_In_ HANDLE, _Inout_ PIMAGEHLP_LINEW64);
1656
1657BOOL
1658WINAPI
1659SymGetLineFromName64(
1660 _In_ HANDLE,
1661 _In_opt_ PCSTR,
1662 _In_opt_ PCSTR,
1663 _In_ DWORD,
1664 _Out_ PLONG,
1665 _Inout_ PIMAGEHLP_LINE64);
1666
1667BOOL
1668WINAPI
1669SymGetLineFromNameW64(
1670 _In_ HANDLE,
1671 _In_opt_ PCWSTR,
1672 _In_opt_ PCWSTR,
1673 _In_ DWORD,
1674 _Out_ PLONG,
1675 _Inout_ PIMAGEHLP_LINEW64);
1676
1677ULONG
1678WINAPI
1679SymGetFileLineOffsets64(
1680 _In_ HANDLE,
1681 _In_opt_ PCSTR,
1682 _In_ PCSTR,
1683 _Out_writes_(BufferLines) PDWORD64,
1684 _In_ ULONG BufferLines);
1685
1686BOOL
1687WINAPI
1688SymGetSourceFile(
1689 _In_ HANDLE,
1690 _In_ ULONG64,
1691 _In_opt_ PCSTR,
1692 _In_ PCSTR,
1693 _Out_writes_(Size) PSTR,
1694 _In_ DWORD Size);
1695
1696BOOL
1697WINAPI
1698SymGetSourceFileW(
1699 _In_ HANDLE,
1700 _In_ ULONG64,
1701 _In_opt_ PCWSTR,
1702 _In_ PCWSTR,
1703 _Out_writes_(Size) PWSTR,
1704 _In_ DWORD Size);
1705
1706BOOL
1707WINAPI
1708SymGetSourceFileToken(
1709 _In_ HANDLE,
1710 _In_ ULONG64,
1711 _In_ PCSTR,
1712 _Outptr_ PVOID*,
1713 _Out_ DWORD*);
1714
1715BOOL
1716WINAPI
1717SymGetSourceFileTokenW(
1718 _In_ HANDLE,
1719 _In_ ULONG64,
1720 _In_ PCWSTR,
1721 _Outptr_ PVOID*,
1722 _Out_ DWORD*);
1723
1724BOOL
1725WINAPI
1726SymGetSourceFileFromToken(
1727 _In_ HANDLE,
1728 _In_ PVOID,
1729 _In_opt_ PCSTR,
1730 _Out_writes_(Size) PSTR,
1731 _In_ DWORD Size);
1732
1733BOOL
1734WINAPI
1735SymGetSourceFileFromTokenW(
1736 _In_ HANDLE,
1737 _In_ PVOID,
1738 _In_opt_ PCWSTR,
1739 _Out_writes_(Size) PWSTR,
1740 _In_ DWORD Size);
1741
1742BOOL
1743WINAPI
1744SymGetSourceVarFromToken(
1745 _In_ HANDLE,
1746 _In_ PVOID,
1747 _In_opt_ PCSTR,
1748 _In_ PCSTR,
1749 _Out_writes_(Size) PSTR,
1750 _In_ DWORD Size);
1751
1752BOOL
1753WINAPI
1754SymGetSourceVarFromTokenW(
1755 _In_ HANDLE,
1756 _In_ PVOID,
1757 _In_opt_ PCWSTR,
1758 _In_ PCWSTR,
1759 _Out_writes_(Size) PWSTR,
1760 _In_ DWORD Size);
1761
1762typedef struct _SRCCODEINFO
1763{
1764 DWORD SizeOfStruct;
1765 PVOID Key;
1766 DWORD64 ModBase;
1767 CHAR Obj[MAX_PATH+1];
1768 CHAR FileName[MAX_PATH+1];
1769 DWORD LineNumber;
1770 DWORD64 Address;
1771} SRCCODEINFO, *PSRCCODEINFO;
1772
1773typedef struct _SRCCODEINFOW
1774{
1775 DWORD SizeOfStruct;
1776 PVOID Key;
1777 DWORD64 ModBase;
1778 WCHAR Obj[MAX_PATH+1];
1779 WCHAR FileName[MAX_PATH+1];
1780 DWORD LineNumber;
1781 DWORD64 Address;
1782} SRCCODEINFOW, *PSRCCODEINFOW;
1783
1784typedef BOOL
1785(CALLBACK* PSYM_ENUMLINES_CALLBACK)(
1786 _In_ PSRCCODEINFO,
1787 _In_opt_ PVOID);
1788
1789typedef BOOL
1790(CALLBACK* PSYM_ENUMLINES_CALLBACKW)(
1791 _In_ PSRCCODEINFOW,
1792 _In_opt_ PVOID);
1793
1794BOOL
1795WINAPI
1796SymEnumLines(
1797 _In_ HANDLE,
1798 _In_ ULONG64,
1799 _In_opt_ PCSTR,
1800 _In_opt_ PCSTR,
1801 _In_ PSYM_ENUMLINES_CALLBACK,
1802 _In_opt_ PVOID);
1803
1804BOOL
1805WINAPI
1806SymEnumLinesW(
1807 _In_ HANDLE,
1808 _In_ ULONG64,
1809 _In_opt_ PCWSTR,
1810 _In_opt_ PCWSTR,
1811 _In_ PSYM_ENUMLINES_CALLBACKW,
1812 _In_opt_ PVOID);
1813
1814BOOL
1815WINAPI
1816SymEnumSourceLines(
1817 _In_ HANDLE,
1818 _In_ ULONG64,
1819 _In_opt_ PCSTR,
1820 _In_opt_ PCSTR,
1821 _In_opt_ DWORD,
1822 _In_ DWORD,
1823 _In_ PSYM_ENUMLINES_CALLBACK,
1824 _In_opt_ PVOID);
1825
1826BOOL
1827WINAPI
1828SymEnumSourceLinesW(
1829 _In_ HANDLE,
1830 _In_ ULONG64,
1831 _In_opt_ PCWSTR,
1832 _In_opt_ PCWSTR,
1833 _In_opt_ DWORD,
1834 _In_ DWORD,
1835 _In_ PSYM_ENUMLINES_CALLBACKW,
1836 _In_opt_ PVOID);
1837
1838/*************************
1839 * File & image handling *
1840 *************************/
1841
1842BOOL WINAPI SymInitialize(_In_ HANDLE, _In_opt_ PCSTR, _In_ BOOL);
1843BOOL WINAPI SymInitializeW(_In_ HANDLE, _In_opt_ PCWSTR, _In_ BOOL);
1844BOOL WINAPI SymCleanup(_In_ HANDLE);
1845
1846HANDLE
1847WINAPI
1848FindDebugInfoFile(
1849 _In_ PCSTR,
1850 _In_ PCSTR,
1851 _Out_writes_(MAX_PATH + 1) PSTR);
1852
1853typedef BOOL
1854(CALLBACK *PFIND_DEBUG_FILE_CALLBACK)(
1855 _In_ HANDLE,
1856 _In_ PCSTR,
1857 _In_ PVOID);
1858
1859typedef BOOL
1860(CALLBACK *PFIND_DEBUG_FILE_CALLBACKW)(
1861 _In_ HANDLE,
1862 _In_ PCWSTR,
1863 _In_ PVOID);
1864
1865HANDLE
1866WINAPI
1867FindDebugInfoFileEx(
1868 _In_ PCSTR,
1869 _In_ PCSTR,
1870 _Out_writes_(MAX_PATH + 1) PSTR,
1871 _In_opt_ PFIND_DEBUG_FILE_CALLBACK,
1872 _In_opt_ PVOID);
1873
1874HANDLE
1875WINAPI
1876FindDebugInfoFileExW(
1877 _In_ PCWSTR,
1878 _In_ PCWSTR,
1879 _Out_writes_(MAX_PATH + 1) PWSTR,
1880 _In_opt_ PFIND_DEBUG_FILE_CALLBACKW,
1881 _In_opt_ PVOID);
1882
1883HANDLE
1884WINAPI
1885SymFindDebugInfoFile(
1886 _In_ HANDLE,
1887 _In_ PCSTR,
1888 _Out_writes_(MAX_PATH + 1) PSTR,
1889 _In_opt_ PFIND_DEBUG_FILE_CALLBACK,
1890 _In_opt_ PVOID);
1891
1892HANDLE
1893WINAPI
1894SymFindDebugInfoFileW(
1895 _In_ HANDLE,
1896 _In_ PCWSTR,
1897 _Out_writes_(MAX_PATH + 1) PWSTR,
1898 _In_opt_ PFIND_DEBUG_FILE_CALLBACKW,
1899 _In_opt_ PVOID);
1900
1901typedef BOOL
1902(CALLBACK *PFINDFILEINPATHCALLBACK)(
1903 _In_ PCSTR,
1904 _In_ PVOID);
1905
1906typedef BOOL
1907(CALLBACK *PFINDFILEINPATHCALLBACKW)(
1908 _In_ PCWSTR,
1909 _In_ PVOID);
1910
1911BOOL WINAPI FindFileInPath(HANDLE, PCSTR, PCSTR, PVOID, DWORD, DWORD, DWORD,
1912 PSTR, PFINDFILEINPATHCALLBACK, PVOID);
1913
1914BOOL
1915WINAPI
1916SymFindFileInPath(
1917 _In_ HANDLE,
1918 _In_opt_ PCSTR,
1919 _In_ PCSTR,
1920 _In_opt_ PVOID,
1921 _In_ DWORD,
1922 _In_ DWORD,
1923 _In_ DWORD,
1924 _Out_writes_(MAX_PATH + 1) PSTR,
1925 _In_opt_ PFINDFILEINPATHCALLBACK,
1926 _In_opt_ PVOID);
1927
1928BOOL
1929WINAPI
1930SymFindFileInPathW(
1931 _In_ HANDLE,
1932 _In_opt_ PCWSTR,
1933 _In_ PCWSTR,
1934 _In_opt_ PVOID,
1935 _In_ DWORD,
1936 _In_ DWORD,
1937 _In_ DWORD,
1938 _Out_writes_(MAX_PATH + 1) PWSTR,
1939 _In_opt_ PFINDFILEINPATHCALLBACKW,
1940 _In_opt_ PVOID);
1941
1942HANDLE
1943WINAPI
1944FindExecutableImage(
1945 _In_ PCSTR,
1946 _In_ PCSTR,
1947 _Out_writes_(MAX_PATH + 1) PSTR);
1948
1949typedef BOOL
1950(CALLBACK *PFIND_EXE_FILE_CALLBACK)(
1951 _In_ HANDLE,
1952 _In_ PCSTR,
1953 _In_opt_ PVOID);
1954
1955typedef BOOL
1956(CALLBACK *PFIND_EXE_FILE_CALLBACKW)(
1957 _In_ HANDLE,
1958 _In_ PCWSTR,
1959 _In_opt_ PVOID);
1960
1961HANDLE
1962WINAPI
1963FindExecutableImageEx(
1964 _In_ PCSTR,
1965 _In_ PCSTR,
1966 _Out_writes_(MAX_PATH + 1) PSTR,
1967 _In_opt_ PFIND_EXE_FILE_CALLBACK,
1968 _In_opt_ PVOID);
1969
1970HANDLE
1971WINAPI
1972FindExecutableImageExW(
1973 _In_ PCWSTR,
1974 _In_ PCWSTR,
1975 _Out_writes_(MAX_PATH + 1) PWSTR,
1976 _In_opt_ PFIND_EXE_FILE_CALLBACKW,
1977 _In_opt_ PVOID);
1978
1979HANDLE
1980WINAPI
1981SymFindExecutableImage(
1982 _In_ HANDLE,
1983 _In_ PCSTR,
1984 _Out_writes_(MAX_PATH + 1) PSTR,
1985 _In_ PFIND_EXE_FILE_CALLBACK,
1986 _In_ PVOID);
1987
1988HANDLE
1989WINAPI
1990SymFindExecutableImageW(
1991 _In_ HANDLE,
1992 _In_ PCWSTR,
1993 _Out_writes_(MAX_PATH + 1) PWSTR,
1994 _In_ PFIND_EXE_FILE_CALLBACKW,
1995 _In_ PVOID);
1996
1997PIMAGE_NT_HEADERS WINAPI ImageNtHeader(_In_ PVOID);
1998
1999PVOID
2000WINAPI
2001ImageDirectoryEntryToDataEx(
2002 _In_ PVOID,
2003 _In_ BOOLEAN,
2004 _In_ USHORT,
2005 _Out_ PULONG,
2006 _Out_opt_ PIMAGE_SECTION_HEADER *);
2007
2008PVOID
2009WINAPI
2010ImageDirectoryEntryToData(
2011 _In_ PVOID,
2012 _In_ BOOLEAN,
2013 _In_ USHORT,
2014 _Out_ PULONG);
2015
2016PIMAGE_SECTION_HEADER
2017WINAPI
2018ImageRvaToSection(
2019 _In_ PIMAGE_NT_HEADERS,
2020 _In_ PVOID,
2021 _In_ ULONG);
2022
2023PVOID
2024WINAPI
2025ImageRvaToVa(
2026 _In_ PIMAGE_NT_HEADERS,
2027 _In_ PVOID,
2028 _In_ ULONG,
2029 _In_opt_ PIMAGE_SECTION_HEADER*);
2030
2031BOOL
2032WINAPI
2033SymGetSearchPath(
2034 _In_ HANDLE,
2035 _Out_writes_(SearchPathLength) PSTR,
2036 _In_ DWORD SearchPathLength);
2037
2038BOOL
2039WINAPI
2040SymGetSearchPathW(
2041 _In_ HANDLE,
2042 _Out_writes_(SearchPathLength) PWSTR,
2043 _In_ DWORD SearchPathLength);
2044
2045BOOL WINAPI SymSetSearchPath(_In_ HANDLE, _In_opt_ PCSTR);
2046BOOL WINAPI SymSetSearchPathW(_In_ HANDLE, _In_opt_ PCWSTR);
2047DWORD WINAPI GetTimestampForLoadedLibrary(_In_ HMODULE);
2048BOOL WINAPI MakeSureDirectoryPathExists(_In_ PCSTR);
2049
2050BOOL
2051WINAPI
2052SearchTreeForFile(
2053 _In_ PCSTR,
2054 _In_ PCSTR,
2055 _Out_writes_(MAX_PATH + 1) PSTR);
2056
2057BOOL
2058WINAPI
2059SearchTreeForFileW(
2060 _In_ PCWSTR,
2061 _In_ PCWSTR,
2062 _Out_writes_(MAX_PATH + 1) PWSTR);
2063
2064typedef BOOL
2065(CALLBACK *PENUMDIRTREE_CALLBACK)(
2066 _In_ PCSTR,
2067 _In_opt_ PVOID);
2068
2069typedef BOOL
2070(CALLBACK *PENUMDIRTREE_CALLBACKW)(
2071 _In_ PCWSTR,
2072 _In_opt_ PVOID);
2073
2074BOOL
2075WINAPI
2076EnumDirTree(
2077 _In_opt_ HANDLE,
2078 _In_ PCSTR,
2079 _In_ PCSTR,
2080 _Out_writes_opt_(MAX_PATH + 1) PSTR,
2081 _In_opt_ PENUMDIRTREE_CALLBACK,
2082 _In_opt_ PVOID);
2083
2084BOOL
2085WINAPI
2086EnumDirTreeW(
2087 _In_opt_ HANDLE,
2088 _In_ PCWSTR,
2089 _In_ PCWSTR,
2090 _Out_writes_opt_(MAX_PATH + 1) PWSTR,
2091 _In_opt_ PENUMDIRTREE_CALLBACKW,
2092 _In_opt_ PVOID);
2093
2094BOOL
2095WINAPI
2096SymMatchFileName(
2097 _In_ PCSTR,
2098 _In_ PCSTR,
2099 _Outptr_opt_ PSTR*,
2100 _Outptr_opt_ PSTR*);
2101
2102BOOL
2103WINAPI
2104SymMatchFileNameW(
2105 _In_ PCWSTR,
2106 _In_ PCWSTR,
2107 _Outptr_opt_ PWSTR*,
2108 _Outptr_opt_ PWSTR*);
2109
2110PCHAR WINAPI SymSetHomeDirectory(_In_opt_ HANDLE, _In_opt_ PCSTR);
2111PWSTR WINAPI SymSetHomeDirectoryW(_In_opt_ HANDLE, _In_opt_ PCWSTR);
2112
2113PCHAR
2114WINAPI
2115SymGetHomeDirectory(
2116 _In_ DWORD,
2117 _Out_writes_(size) PSTR,
2118 _In_ size_t size);
2119
2120PWSTR
2121WINAPI
2122SymGetHomeDirectoryW(
2123 _In_ DWORD,
2124 _Out_writes_(size) PWSTR,
2125 _In_ size_t size);
2126
2127#define hdBase 0
2128#define hdSym 1
2129#define hdSrc 2
2130#define hdMax 3
2131
2132/*************************
2133 * Context management *
2134 *************************/
2135
2136BOOL
2137WINAPI
2138SymSetContext(
2139 _In_ HANDLE,
2140 _In_ PIMAGEHLP_STACK_FRAME,
2141 _In_opt_ PIMAGEHLP_CONTEXT);
2142
2143
2144/*************************
2145 * Stack management *
2146 *************************/
2147
2148#if !defined(_IMAGEHLP_SOURCE_) && defined(_IMAGEHLP64)
2149#define KDHELP KDHELP64
2150#define PKDHELP PKDHELP64
2151#else
2152typedef struct _KDHELP
2153{
2154 DWORD Thread;
2155 DWORD ThCallbackStack;
2156 DWORD NextCallback;
2157 DWORD FramePointer;
2158 DWORD KiCallUserMode;
2159 DWORD KeUserCallbackDispatcher;
2160 DWORD SystemRangeStart;
2161} KDHELP, *PKDHELP;
2162#endif
2163
2164typedef struct _KDHELP64
2165{
2166 DWORD64 Thread;
2167 DWORD ThCallbackStack;
2168 DWORD ThCallbackBStore;
2169 DWORD NextCallback;
2170 DWORD FramePointer;
2171 DWORD64 KiCallUserMode;
2172 DWORD64 KeUserCallbackDispatcher;
2173 DWORD64 SystemRangeStart;
2174 DWORD64 Reserved[8];
2175} KDHELP64, *PKDHELP64;
2176
2177#if !defined(_IMAGEHLP_SOURCE_) && defined(_IMAGEHLP64)
2178#define STACKFRAME STACKFRAME64
2179#define LPSTACKFRAME LPSTACKFRAME64
2180#else
2181typedef struct _STACKFRAME
2182{
2183 ADDRESS AddrPC;
2184 ADDRESS AddrReturn;
2185 ADDRESS AddrFrame;
2186 ADDRESS AddrStack;
2187 PVOID FuncTableEntry;
2188 DWORD Params[4];
2189 BOOL Far;
2190 BOOL Virtual;
2191 DWORD Reserved[3];
2192 KDHELP KdHelp;
2193 ADDRESS AddrBStore;
2194} STACKFRAME, *LPSTACKFRAME;
2195#endif
2196
2197typedef struct _STACKFRAME64
2198{
2199 ADDRESS64 AddrPC;
2200 ADDRESS64 AddrReturn;
2201 ADDRESS64 AddrFrame;
2202 ADDRESS64 AddrStack;
2203 ADDRESS64 AddrBStore;
2204 PVOID FuncTableEntry;
2205 DWORD64 Params[4];
2206 BOOL Far;
2207 BOOL Virtual;
2208 DWORD64 Reserved[3];
2209 KDHELP64 KdHelp;
2210} STACKFRAME64, *LPSTACKFRAME64;
2211
2212typedef BOOL
2213(CALLBACK *PREAD_PROCESS_MEMORY_ROUTINE64)(
2214 _In_ HANDLE,
2215 _In_ DWORD64,
2216 _Out_writes_bytes_(nSize) PVOID,
2217 _In_ DWORD nSize,
2218 _Out_ PDWORD);
2219
2220typedef PVOID
2221(CALLBACK *PFUNCTION_TABLE_ACCESS_ROUTINE64)(
2222 _In_ HANDLE,
2223 _In_ DWORD64);
2224
2225typedef DWORD64
2226(CALLBACK *PGET_MODULE_BASE_ROUTINE64)(
2227 _In_ HANDLE,
2228 _In_ DWORD64);
2229
2230typedef DWORD64
2231(CALLBACK *PTRANSLATE_ADDRESS_ROUTINE64)(
2232 _In_ HANDLE,
2233 _In_ HANDLE,
2234 _In_ LPADDRESS64);
2235
2236BOOL
2237WINAPI
2238StackWalk64(
2239 _In_ DWORD,
2240 _In_ HANDLE,
2241 _In_ HANDLE,
2242 _Inout_ LPSTACKFRAME64,
2243 _Inout_ PVOID,
2244 _In_opt_ PREAD_PROCESS_MEMORY_ROUTINE64,
2245 _In_opt_ PFUNCTION_TABLE_ACCESS_ROUTINE64,
2246 _In_opt_ PGET_MODULE_BASE_ROUTINE64,
2247 _In_opt_ PTRANSLATE_ADDRESS_ROUTINE64);
2248
2249PVOID WINAPI SymFunctionTableAccess64(_In_ HANDLE, _In_ DWORD64);
2250
2251typedef PVOID
2252(CALLBACK *PSYMBOL_FUNCENTRY_CALLBACK64)(
2253 _In_ HANDLE,
2254 _In_ ULONG64,
2255 _In_ ULONG64);
2256
2257BOOL
2258WINAPI
2259SymRegisterFunctionEntryCallback64(
2260 _In_ HANDLE,
2261 _In_ PSYMBOL_FUNCENTRY_CALLBACK64,
2262 _In_ ULONG64);
2263
2264/*************************
2265 * Version, global stuff *
2266 *************************/
2267
2268#define API_VERSION_NUMBER 9
2269
2270typedef struct API_VERSION
2271{
2272 USHORT MajorVersion;
2273 USHORT MinorVersion;
2274 USHORT Revision;
2275 USHORT Reserved;
2276} API_VERSION, *LPAPI_VERSION;
2277
2278LPAPI_VERSION WINAPI ImagehlpApiVersion(void);
2279LPAPI_VERSION WINAPI ImagehlpApiVersionEx(_In_ LPAPI_VERSION);
2280
2281typedef struct _IMAGE_DEBUG_INFORMATION
2282{
2283 LIST_ENTRY List;
2284 DWORD ReservedSize;
2285 PVOID ReservedMappedBase;
2286 USHORT ReservedMachine;
2287 USHORT ReservedCharacteristics;
2288 DWORD ReservedCheckSum;
2289 DWORD ImageBase;
2290 DWORD SizeOfImage;
2291 DWORD ReservedNumberOfSections;
2292 PIMAGE_SECTION_HEADER ReservedSections;
2293 DWORD ReservedExportedNamesSize;
2294 PSTR ReservedExportedNames;
2295 DWORD ReservedNumberOfFunctionTableEntries;
2296 PIMAGE_FUNCTION_ENTRY ReservedFunctionTableEntries;
2297 DWORD ReservedLowestFunctionStartingAddress;
2298 DWORD ReservedHighestFunctionEndingAddress;
2299 DWORD ReservedNumberOfFpoTableEntries;
2300 PFPO_DATA ReservedFpoTableEntries;
2301 DWORD SizeOfCoffSymbols;
2302 PIMAGE_COFF_SYMBOLS_HEADER CoffSymbols;
2303 DWORD ReservedSizeOfCodeViewSymbols;
2304 PVOID ReservedCodeViewSymbols;
2305 PSTR ImageFilePath;
2306 PSTR ImageFileName;
2307 PSTR ReservedDebugFilePath;
2308 DWORD ReservedTimeDateStamp;
2309 BOOL ReservedRomImage;
2310 PIMAGE_DEBUG_DIRECTORY ReservedDebugDirectory;
2311 DWORD ReservedNumberOfDebugDirectories;
2312 DWORD ReservedOriginalFunctionTableBaseAddress;
2313 DWORD Reserved[ 2 ];
2314} IMAGE_DEBUG_INFORMATION, *PIMAGE_DEBUG_INFORMATION;
2315
2316typedef enum
2317{
2318 SYMOPT_EX_DISABLEACCESSTIMEUPDATE,
2319 SYMOPT_EX_MAX,
2320
2321#ifdef __WINESRC__
2322 SYMOPT_EX_WINE_NATIVE_MODULES = 1000,
2323#endif
2324} IMAGEHLP_EXTENDED_OPTIONS;
2325
2326PIMAGE_DEBUG_INFORMATION
2327WINAPI
2328MapDebugInformation(
2329 _In_opt_ HANDLE,
2330 _In_ PCSTR,
2331 _In_opt_ PCSTR,
2332 _In_ ULONG);
2333
2334BOOL WINAPI UnmapDebugInformation(_Out_ PIMAGE_DEBUG_INFORMATION);
2335
2336DWORD WINAPI SymGetOptions(void);
2337DWORD WINAPI SymSetOptions(_In_ DWORD);
2338
2339BOOL WINAPI SymGetExtendedOption(_In_ IMAGEHLP_EXTENDED_OPTIONS option);
2340BOOL WINAPI SymSetExtendedOption(_In_ IMAGEHLP_EXTENDED_OPTIONS option, _In_ BOOL value);
2341
2342BOOL WINAPI SymSetParentWindow(_In_ HWND);
2343
2344BOOL
2345IMAGEAPI
2346SymSrvIsStore(
2347 _In_opt_ HANDLE hProcess,
2348 _In_ PCSTR path);
2349
2350BOOL
2351IMAGEAPI
2352SymSrvIsStoreW(
2353 _In_opt_ HANDLE hProcess,
2354 _In_ PCWSTR path);
2355
2356/*************************
2357 * Version, global stuff *
2358 *************************/
2359
2360typedef BOOL (WINAPI* PSYMBOLSERVERPROC)(PCSTR, PCSTR, PVOID, DWORD, DWORD, PSTR);
2361typedef BOOL (WINAPI* PSYMBOLSERVERPROCA)(PCSTR, PCSTR, PVOID, DWORD, DWORD, PSTR);
2362typedef BOOL (WINAPI* PSYMBOLSERVERPROCW)(PCWSTR, PCWSTR, PVOID, DWORD, DWORD, PWSTR);
2363typedef BOOL (WINAPI* PSYMBOLSERVEROPENPROC)(void);
2364typedef BOOL (WINAPI* PSYMBOLSERVERCLOSEPROC)(void);
2365typedef BOOL (WINAPI* PSYMBOLSERVERSETOPTIONSPROC)(UINT_PTR, ULONG64);
2366typedef BOOL (CALLBACK* PSYMBOLSERVERCALLBACKPROC)(UINT_PTR, ULONG64, ULONG64);
2367typedef UINT_PTR (WINAPI* PSYMBOLSERVERGETOPTIONSPROC)(void);
2368typedef BOOL (WINAPI* PSYMBOLSERVERPINGPROC)(PCSTR);
2369typedef BOOL (WINAPI* PSYMBOLSERVERPINGPROCA)(PCSTR);
2370typedef BOOL (WINAPI* PSYMBOLSERVERPINGPROCW)(PCWSTR);
2371
2372#define SSRVOPT_CALLBACK 0x0001
2373#define SSRVOPT_DWORD 0x0002
2374#define SSRVOPT_DWORDPTR 0x0004
2375#define SSRVOPT_GUIDPTR 0x0008
2376#define SSRVOPT_OLDGUIDPTR 0x0010
2377#define SSRVOPT_UNATTENDED 0x0020
2378#define SSRVOPT_NOCOPY 0x0040
2379#define SSRVOPT_PARENTWIN 0x0080
2380#define SSRVOPT_PARAMTYPE 0x0100
2381#define SSRVOPT_SECURE 0x0200
2382#define SSRVOPT_TRACE 0x0400
2383#define SSRVOPT_SETCONTEXT 0x0800
2384#define SSRVOPT_PROXY 0x1000
2385#define SSRVOPT_DOWNSTREAM_STORE 0x2000
2386#define SSRVOPT_RESET ((ULONG_PTR)-1)
2387
2388#define SSRVACTION_TRACE 1
2389#define SSRVACTION_QUERYCANCEL 2
2390#define SSRVACTION_EVENT 3
2391
2392/* 32-bit functions */
2393
2394#if !defined(_IMAGEHLP_SOURCE_) && defined(_IMAGEHLP64)
2395
2396#define PENUMLOADED_MODULES_CALLBACK PENUMLOADED_MODULES_CALLBACK64
2397#define PFUNCTION_TABLE_ACCESS_ROUTINE PFUNCTION_TABLE_ACCESS_ROUTINE64
2398#define PGET_MODULE_BASE_ROUTINE PGET_MODULE_BASE_ROUTINE64
2399#define PREAD_PROCESS_MEMORY_ROUTINE PREAD_PROCESS_MEMORY_ROUTINE64
2400#define PSYMBOL_FUNCENTRY_CALLBACK PSYMBOL_FUNCENTRY_CALLBACK64
2401#define PSYMBOL_REGISTERED_CALLBACK PSYMBOL_REGISTERED_CALLBACK64
2402#define PSYM_ENUMMODULES_CALLBACK PSYM_ENUMMODULES_CALLBACK64
2403#define PSYM_ENUMSYMBOLS_CALLBACK PSYM_ENUMSYMBOLS_CALLBACK64
2404#define PSYM_ENUMSYMBOLS_CALLBACKW PSYM_ENUMSYMBOLS_CALLBACKW64
2405#define PTRANSLATE_ADDRESS_ROUTINE PTRANSLATE_ADDRESS_ROUTINE64
2406
2407#define EnumerateLoadedModules EnumerateLoadedModules64
2408#define StackWalk StackWalk64
2409#define SymEnumerateModules SymEnumerateModules64
2410#define SymEnumerateSymbols SymEnumerateSymbols64
2411#define SymEnumerateSymbolsW SymEnumerateSymbolsW64
2412#define SymFunctionTableAccess SymFunctionTableAccess64
2413#define SymGetLineFromAddr SymGetLineFromAddr64
2414#define SymGetLineFromAddrW SymGetLineFromAddrW64
2415#define SymGetLineFromName SymGetLineFromName64
2416#define SymGetLineNext SymGetLineNext64
2417#define SymGetLineNextW SymGetLineNextW64
2418#define SymGetLinePrev SymGetLinePrev64
2419#define SymGetLinePrevW SymGetLinePrevW64
2420#define SymGetModuleBase SymGetModuleBase64
2421#define SymGetModuleInfo SymGetModuleInfo64
2422#define SymGetModuleInfoW SymGetModuleInfoW64
2423#define SymGetSymFromAddr SymGetSymFromAddr64
2424#define SymGetSymFromName SymGetSymFromName64
2425#define SymGetSymNext SymGetSymNext64
2426#define SymGetSymNextW SymGetSymNextW64
2427#define SymGetSymPrev SymGetSymPrev64
2428#define SymGetSymPrevW SymGetSymPrevW64
2429#define SymLoadModule SymLoadModule64
2430#define SymRegisterCallback SymRegisterCallback64
2431#define SymRegisterFunctionEntryCallback SymRegisterFunctionEntryCallback64
2432#define SymUnDName SymUnDName64
2433#define SymUnloadModule SymUnloadModule64
2434
2435#else
2436
2437typedef BOOL
2438(CALLBACK *PENUMLOADED_MODULES_CALLBACK)(
2439 _In_ PCSTR,
2440 _In_ ULONG,
2441 _In_ ULONG,
2442 _In_opt_ PVOID);
2443
2444typedef PVOID
2445(CALLBACK *PFUNCTION_TABLE_ACCESS_ROUTINE)(
2446 _In_ HANDLE,
2447 _In_ DWORD);
2448
2449typedef DWORD
2450(CALLBACK *PGET_MODULE_BASE_ROUTINE)(
2451 _In_ HANDLE,
2452 _In_ DWORD);
2453
2454typedef BOOL
2455(CALLBACK *PREAD_PROCESS_MEMORY_ROUTINE)(
2456 _In_ HANDLE,
2457 _In_ DWORD,
2458 _Out_writes_bytes_(nSize) PVOID,
2459 _In_ DWORD nSize,
2460 _Out_ PDWORD);
2461
2462typedef BOOL
2463(CALLBACK *PSYM_ENUMMODULES_CALLBACK)(
2464 _In_ PCSTR,
2465 _In_ ULONG,
2466 _In_opt_ PVOID);
2467
2468typedef BOOL
2469(CALLBACK *PSYM_ENUMSYMBOLS_CALLBACK)(
2470 _In_ PCSTR,
2471 _In_ ULONG,
2472 _In_ ULONG,
2473 _In_opt_ PVOID);
2474
2475typedef BOOL
2476(CALLBACK *PSYM_ENUMSYMBOLS_CALLBACKW)(
2477 _In_ PCWSTR,
2478 _In_ ULONG,
2479 _In_ ULONG,
2480 _In_opt_ PVOID);
2481
2482typedef BOOL
2483(CALLBACK *PSYMBOL_REGISTERED_CALLBACK)(
2484 _In_ HANDLE,
2485 _In_ ULONG,
2486 _In_opt_ PVOID,
2487 _In_opt_ PVOID);
2488
2489typedef PVOID
2490(CALLBACK *PSYMBOL_FUNCENTRY_CALLBACK)(
2491 _In_ HANDLE,
2492 _In_ DWORD,
2493 _In_opt_ PVOID);
2494
2495typedef DWORD
2496(CALLBACK *PTRANSLATE_ADDRESS_ROUTINE)(
2497 _In_ HANDLE,
2498 _In_ HANDLE,
2499 _Out_ LPADDRESS);
2500
2501BOOL
2502WINAPI
2503EnumerateLoadedModules(
2504 _In_ HANDLE,
2505 _In_ PENUMLOADED_MODULES_CALLBACK,
2506 _In_opt_ PVOID);
2507
2508BOOL
2509WINAPI
2510StackWalk(
2511 _In_ DWORD,
2512 _In_ HANDLE,
2513 _In_ HANDLE,
2514 _Inout_ LPSTACKFRAME,
2515 _Inout_ PVOID,
2516 _In_opt_ PREAD_PROCESS_MEMORY_ROUTINE,
2517 _In_opt_ PFUNCTION_TABLE_ACCESS_ROUTINE,
2518 _In_opt_ PGET_MODULE_BASE_ROUTINE,
2519 _In_opt_ PTRANSLATE_ADDRESS_ROUTINE);
2520
2521BOOL
2522WINAPI
2523SymEnumerateModules(
2524 _In_ HANDLE,
2525 _In_ PSYM_ENUMMODULES_CALLBACK,
2526 _In_opt_ PVOID);
2527
2528BOOL
2529WINAPI
2530SymEnumerateSymbols(
2531 _In_ HANDLE,
2532 _In_ ULONG,
2533 _In_ PSYM_ENUMSYMBOLS_CALLBACK,
2534 _In_opt_ PVOID);
2535
2536BOOL
2537WINAPI
2538SymEnumerateSymbolsW(
2539 _In_ HANDLE,
2540 _In_ ULONG,
2541 _In_ PSYM_ENUMSYMBOLS_CALLBACKW,
2542 _In_opt_ PVOID);
2543
2544PVOID WINAPI SymFunctionTableAccess(_In_ HANDLE, _In_ DWORD);
2545
2546BOOL
2547WINAPI
2548SymGetLineFromAddr(
2549 _In_ HANDLE,
2550 _In_ DWORD,
2551 _Out_ PDWORD,
2552 _Out_ PIMAGEHLP_LINE);
2553
2554BOOL
2555WINAPI
2556SymGetLineFromAddrW(
2557 _In_ HANDLE,
2558 _In_ DWORD,
2559 _Out_ PDWORD,
2560 _Out_ PIMAGEHLP_LINEW);
2561
2562BOOL
2563WINAPI
2564SymGetLineFromName(
2565 _In_ HANDLE,
2566 _In_opt_ PCSTR,
2567 _In_opt_ PCSTR,
2568 _In_ DWORD,
2569 _Out_ PLONG,
2570 _Inout_ PIMAGEHLP_LINE);
2571
2572BOOL WINAPI SymGetLineNext(_In_ HANDLE, _Inout_ PIMAGEHLP_LINE);
2573BOOL WINAPI SymGetLineNextW(_In_ HANDLE, _Inout_ PIMAGEHLP_LINEW);
2574BOOL WINAPI SymGetLinePrev(_In_ HANDLE, _Inout_ PIMAGEHLP_LINE);
2575BOOL WINAPI SymGetLinePrevW(_In_ HANDLE, _Inout_ PIMAGEHLP_LINEW);
2576DWORD WINAPI SymGetModuleBase(_In_ HANDLE, _In_ DWORD);
2577
2578BOOL
2579WINAPI
2580SymGetModuleInfo(
2581 _In_ HANDLE,
2582 _In_ DWORD,
2583 _Out_ PIMAGEHLP_MODULE);
2584
2585BOOL
2586WINAPI
2587SymGetModuleInfoW(
2588 _In_ HANDLE,
2589 _In_ DWORD,
2590 _Out_ PIMAGEHLP_MODULEW);
2591
2592BOOL
2593WINAPI
2594SymGetSymFromAddr(
2595 _In_ HANDLE,
2596 _In_ DWORD,
2597 _Out_opt_ PDWORD,
2598 _Inout_ PIMAGEHLP_SYMBOL);
2599
2600BOOL
2601WINAPI
2602SymGetSymFromName(
2603 _In_ HANDLE,
2604 _In_ PCSTR,
2605 _Inout_ PIMAGEHLP_SYMBOL);
2606
2607BOOL WINAPI SymGetSymNext(_In_ HANDLE, _Inout_ PIMAGEHLP_SYMBOL);
2608BOOL WINAPI SymGetSymNextW(_In_ HANDLE, _Inout_ PIMAGEHLP_SYMBOLW);
2609BOOL WINAPI SymGetSymPrev(_In_ HANDLE, _Inout_ PIMAGEHLP_SYMBOL);
2610BOOL WINAPI SymGetSymPrevW(_In_ HANDLE, _Inout_ PIMAGEHLP_SYMBOLW);
2611
2612DWORD
2613WINAPI
2614SymLoadModule(
2615 _In_ HANDLE,
2616 _In_opt_ HANDLE,
2617 _In_opt_ PCSTR,
2618 _In_opt_ PCSTR,
2619 _In_ DWORD,
2620 _In_ DWORD);
2621
2622BOOL
2623WINAPI
2624SymRegisterCallback(
2625 _In_ HANDLE,
2626 _In_ PSYMBOL_REGISTERED_CALLBACK,
2627 _In_opt_ PVOID);
2628
2629BOOL
2630WINAPI
2631SymRegisterFunctionEntryCallback(
2632 _In_ HANDLE,
2633 _In_ PSYMBOL_FUNCENTRY_CALLBACK,
2634 _In_opt_ PVOID);
2635
2636BOOL WINAPI SymRefreshModuleList(_In_ HANDLE);
2637
2638BOOL
2639WINAPI
2640SymUnDName(
2641 _In_ PIMAGEHLP_SYMBOL,
2642 _Out_writes_(UnDecNameLength) PSTR,
2643 _In_ DWORD UnDecNameLength);
2644
2645BOOL WINAPI SymUnloadModule(_In_ HANDLE, _In_ DWORD);
2646
2647#endif
2648
2649#ifdef __cplusplus
2650} /* extern "C" */
2651#endif /* defined(__cplusplus) */
2652
2653#endif /* __WINE_DBGHELP_H */