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