1 /**
2  * ...
3  *
4  * Copyright: Copyright Benjamin Thaut 2010 - 2011.
5  * License: Distributed under the
6  *      $(LINK2 http://www.boost.org/LICENSE_1_0.txt, Boost Software License 1.0).
7  *    (See accompanying file LICENSE)
8  * Authors:   Benjamin Thaut, Sean Kelly
9  * Source:    $(DRUNTIMESRC core/sys/windows/_dbghelp_types.d)
10  */
11 
12 /// Automatically imported and edited from the druntime module
13 /// core.sys.windows.dbghelp_types for the auto-generated win32 package.
14 module win32.dbghelp_types;
15 //version (Windows):
16 @system:
17 
18 version (ANSI) {} else version = Unicode;
19 
20 import win32.windef;
21 import win32.imagehlp /+: ADDRESS_MODE+/;
22 
23 public import win32.winnt : TCHAR;
24 
25 /*
26 enum ADDRESS_MODE : DWORD
27 {
28     AddrMode1616 = 0,
29     AddrMode1632 = 1,
30     AddrModeReal = 2,
31     AddrModeFlat = 3,
32 }
33 */
34 enum : DWORD
35 {
36     SYMOPT_DEFERRED_LOAD        = 0x00000004,
37     SYMOPT_FAIL_CRITICAL_ERRORS = 0x00000200,
38     SYMOPT_LOAD_LINES           = 0x00000010,
39     SYMOPT_DEBUG                = 0x80000000,
40 }
41 
42 enum : ULONG
43 {
44     CBA_READ_MEMORY             = 0x00000006,
45     CBA_DEBUG_INFO              = 0x10000000,
46 }
47 
48 public import win32.basetyps : GUID;
49 
50 struct ADDRESS64
51 {
52     DWORD64      Offset;
53     WORD         Segment;
54     ADDRESS_MODE Mode;
55 }
56 
57 struct KDHELP64
58 {
59     DWORD64 Thread;
60     DWORD   ThCallbackStack;
61     DWORD   ThCallbackBStore;
62     DWORD   NextCallback;
63     DWORD   FramePointer;
64     DWORD64 KiCallUserMode;
65     DWORD64 KeUserCallbackDispatcher;
66     DWORD64 SystemRangeStart;
67     DWORD64 KiUserExceptionDispatcher;
68     DWORD64 StackBase;
69     DWORD64 StackLimit;
70     DWORD64[5] Reserved;
71 }
72 
73 struct STACKFRAME64
74 {
75     ADDRESS64  AddrPC;
76     ADDRESS64  AddrReturn;
77     ADDRESS64  AddrFrame;
78     ADDRESS64  AddrStack;
79     ADDRESS64  AddrBStore;
80     PVOID      FuncTableEntry;
81     DWORD64[4] Params;
82     BOOL       Far;
83     BOOL       Virtual;
84     DWORD64[3] Reserved;
85     KDHELP64   KdHelp;
86 }
87 
88 public import win32.winnt : IMAGE_FILE_MACHINE_I386, IMAGE_FILE_MACHINE_IA64, IMAGE_FILE_MACHINE_AMD64;
89 
90 struct IMAGEHLP_LINEA64
91 {
92     DWORD   SizeOfStruct;
93     PVOID   Key;
94     DWORD   LineNumber;
95     PCSTR   FileName;
96     DWORD64 Address;
97 }
98 struct IMAGEHLP_LINEW64
99 {
100     DWORD   SizeOfStruct;
101     PVOID   Key;
102     DWORD   LineNumber;
103     PWSTR FileName;
104     DWORD64 Address;
105 }
106 
107 enum SYM_TYPE : int
108 {
109     SymNone = 0,
110     SymCoff,
111     SymCv,
112     SymPdb,
113     SymExport,
114     SymDeferred,
115     SymSym,
116     SymDia,
117     SymVirtual,
118     NumSymTypes,
119 }
120 
121 struct IMAGEHLP_MODULEA64
122 {
123     DWORD      SizeOfStruct;
124     DWORD64    BaseOfImage;
125     DWORD      ImageSize;
126     DWORD      TimeDateStamp;
127     DWORD      CheckSum;
128     DWORD      NumSyms;
129     SYM_TYPE   SymType;
130     CHAR[32]   ModuleName = 0;
131     CHAR[256]  ImageName = 0;
132     CHAR[256]  LoadedImageName = 0;
133     // new elements: 07-Jun-2002
134     version (none)
135     {
136         CHAR[256]  LoadedPdbName = 0;
137         DWORD      CVSig;
138         CHAR[MAX_PATH*3] CVData = 0;
139         DWORD      PdbSig;
140         GUID       PdbSig70;
141         DWORD      PdbAge;
142         BOOL       PdbUnmatched;
143         BOOL       DbgUnmachted;
144         BOOL       LineNumbers;
145         BOOL       GlobalSymbols;
146         BOOL       TypeInfo;
147     }
148     // new elements: 17-Dec-2003
149     version (none)
150     {
151         BOOL       SourceIndexed;
152         BOOL       Publics;
153     }
154 }
155 struct IMAGEHLP_MODULEW64
156 {
157     DWORD      SizeOfStruct;
158     DWORD64    BaseOfImage;
159     DWORD      ImageSize;
160     DWORD      TimeDateStamp;
161     DWORD      CheckSum;
162     DWORD      NumSyms;
163     SYM_TYPE   SymType;
164     WCHAR[32]  ModuleName = 0;
165     WCHAR[256] ImageName = 0;
166     WCHAR[256] LoadedImageName = 0;
167     // new elements: 07-Jun-2002
168     version (none)
169     {
170         WCHAR[256] LoadedPdbName = 0;
171         DWORD      CVSig;
172         WCHAR[MAX_PATH*3] CVData = 0;
173         DWORD      PdbSig;
174         GUID       PdbSig70;
175         DWORD      PdbAge;
176         BOOL       PdbUnmatched;
177         BOOL       DbgUnmachted;
178         BOOL       LineNumbers;
179         BOOL       GlobalSymbols;
180         BOOL       TypeInfo;
181     }
182     // new elements: 17-Dec-2003
183     version (none)
184     {
185         BOOL       SourceIndexed;
186         BOOL       Publics;
187     }
188 }
189 
190 struct IMAGEHLP_SYMBOLA64
191 {
192     DWORD    SizeOfStruct;
193     DWORD64  Address;
194     DWORD    Size;
195     DWORD    Flags;
196     DWORD    MaxNameLength;
197     CHAR[1] Name = 0;
198 }
199 struct IMAGEHLP_SYMBOLW64
200 {
201     DWORD    SizeOfStruct;
202     DWORD64  Address;
203     DWORD    Size;
204     DWORD    Flags;
205     DWORD    MaxNameLength;
206     WCHAR[1] Name = 0;
207 }
208 
209 
210 struct IMAGEHLP_CBA_READ_MEMORY
211 {
212     DWORD64 addr;
213     PVOID   buf;
214     DWORD   bytes;
215     DWORD   *bytesread;
216 }
217 
218 struct API_VERSION
219 {
220     USHORT MajorVersion;
221     USHORT MinorVersion;
222     USHORT Revision;
223     USHORT Reserved;
224 }
225 
226 version (Unicode)
227 {
228     alias IMAGEHLP_LINEW64 IMAGEHLP_LINE64;
229     alias IMAGEHLP_MODULEW64 IMAGEHLP_MODULE64;
230     alias IMAGEHLP_SYMBOLW64 IMAGEHLP_SYMBOL64;
231 }
232 else
233 {
234     alias IMAGEHLP_LINEA64 IMAGEHLP_LINE64;
235     alias IMAGEHLP_MODULEA64 IMAGEHLP_MODULE64;
236     alias IMAGEHLP_SYMBOLA64 IMAGEHLP_SYMBOL64;
237 }