[FREELDR] Merge boot-drive and partition functionalities together (#6760)
[reactos.git] / ntoskrnl / kdbg / kdb.h
1 #pragma once
2 #include "internal/kd.h"
3
4 /* DEFINES *******************************************************************/
5
6 /* formerly located in kdbg/kdb_symbols.c */
7 #define TAG_KDBS 'SBDK'
8 #define TAG_KDBG 'GBDK'
9
10 /* TYPES *********************************************************************/
11
12 /* from kdb.c */
13 typedef struct _KDB_KTRAP_FRAME
14 {
15 KTRAP_FRAME Tf;
16 ULONG Cr0;
17 ULONG Cr1; /* reserved/unused */
18 ULONG Cr2;
19 ULONG Cr3;
20 ULONG Cr4;
21 } KDB_KTRAP_FRAME, *PKDB_KTRAP_FRAME;
22
23 typedef enum _KDB_BREAKPOINT_TYPE
24 {
25 KdbBreakPointNone = 0,
26 KdbBreakPointSoftware,
27 KdbBreakPointHardware,
28 KdbBreakPointTemporary
29 } KDB_BREAKPOINT_TYPE;
30
31 typedef enum _KDB_ACCESS_TYPE
32 {
33 KdbAccessRead,
34 KdbAccessWrite,
35 KdbAccessReadWrite,
36 KdbAccessExec
37 } KDB_ACCESS_TYPE;
38
39 typedef struct _KDB_BREAKPOINT
40 {
41 KDB_BREAKPOINT_TYPE Type; /* Type of breakpoint */
42 BOOLEAN Enabled; /* Whether the bp is enabled */
43 ULONG_PTR Address; /* Address of the breakpoint */
44 BOOLEAN Global; /* Whether the breakpoint is global or local to a process */
45 PEPROCESS Process; /* Owning process */
46 PCHAR ConditionExpression;
47 PVOID Condition;
48 union {
49 /* KdbBreakPointSoftware */
50 UCHAR SavedInstruction;
51 /* KdbBreakPointHardware */
52 struct {
53 UCHAR DebugReg : 2;
54 UCHAR Size : 3;
55 KDB_ACCESS_TYPE AccessType;
56 } Hw;
57 } Data;
58 } KDB_BREAKPOINT, *PKDB_BREAKPOINT;
59
60 typedef enum _KDB_ENTER_CONDITION
61 {
62 KdbDoNotEnter,
63 KdbEnterAlways,
64 KdbEnterFromKmode,
65 KdbEnterFromUmode
66 } KDB_ENTER_CONDITION;
67
68 /* These values MUST be nonzero. They're used as bit masks. */
69 typedef enum _KDB_OUTPUT_SETTINGS
70 {
71 KD_DEBUG_KDSERIAL = 1,
72 KD_DEBUG_KDNOECHO = 2
73 } KDB_OUTPUT_SETTINGS;
74
75 /* FUNCTIONS *****************************************************************/
76
77 /* from i386/i386-dis.c */
78
79 LONG
80 KdbpDisassemble(
81 IN ULONG Address,
82 IN ULONG IntelSyntax);
83
84 LONG
85 KdbpGetInstLength(
86 IN ULONG Address);
87
88 /* from i386/kdb_help.S */
89
90 VOID NTAPI
91 KdbpStackSwitchAndCall(
92 IN PVOID NewStack,
93 IN VOID (*Function)(VOID));
94
95 /* from kdb_cli.c */
96
97 extern PCHAR KdbInitFileBuffer;
98
99 VOID
100 KdbpCliInit(VOID);
101
102 VOID
103 KdbpCliMainLoop(
104 IN BOOLEAN EnteredOnSingleStep);
105
106 VOID
107 KdbpCliModuleLoaded(
108 IN PUNICODE_STRING Name);
109
110 VOID
111 KdbpCliInterpretInitFile(VOID);
112
113 VOID
114 KdbpPrint(
115 IN PCHAR Format,
116 IN ... OPTIONAL);
117
118 BOOLEAN
119 NTAPI
120 KdbpGetHexNumber(
121 IN PCHAR pszNum,
122 OUT ULONG_PTR *pulValue);
123
124 /* from kdb_expr.c */
125
126 BOOLEAN
127 KdbpRpnEvaluateExpression(
128 IN PCHAR Expression,
129 IN PKDB_KTRAP_FRAME TrapFrame,
130 OUT PULONGLONG Result,
131 OUT PLONG ErrOffset OPTIONAL,
132 OUT PCHAR ErrMsg OPTIONAL);
133
134 PVOID
135 KdbpRpnParseExpression(
136 IN PCHAR Expression,
137 OUT PLONG ErrOffset OPTIONAL,
138 OUT PCHAR ErrMsg OPTIONAL);
139
140 BOOLEAN
141 KdbpRpnEvaluateParsedExpression(
142 IN PVOID Expression,
143 IN PKDB_KTRAP_FRAME TrapFrame,
144 OUT PULONGLONG Result,
145 OUT PLONG ErrOffset OPTIONAL,
146 OUT PCHAR ErrMsg OPTIONAL);
147
148 /* from kdb_symbols.c */
149
150 BOOLEAN
151 KdbpSymFindModule(
152 IN PVOID Address OPTIONAL,
153 IN LPCWSTR Name OPTIONAL,
154 IN INT Index OPTIONAL,
155 OUT PLDR_DATA_TABLE_ENTRY* pLdrEntry);
156
157 /* from kdb.c */
158
159 extern PEPROCESS KdbCurrentProcess;
160 extern PETHREAD KdbCurrentThread;
161 extern LONG KdbLastBreakPointNr;
162 extern ULONG KdbNumSingleSteps;
163 extern BOOLEAN KdbSingleStepOver;
164 extern PKDB_KTRAP_FRAME KdbCurrentTrapFrame;
165 extern ULONG KdbDebugState;
166
167 LONG
168 KdbpGetNextBreakPointNr(
169 IN ULONG Start OPTIONAL);
170
171 BOOLEAN
172 KdbpGetBreakPointInfo(
173 IN ULONG BreakPointNr,
174 OUT ULONG_PTR *Address OPTIONAL,
175 OUT KDB_BREAKPOINT_TYPE *Type OPTIONAL,
176 OUT UCHAR *Size OPTIONAL,
177 OUT KDB_ACCESS_TYPE *AccessType OPTIONAL,
178 OUT UCHAR *DebugReg OPTIONAL,
179 OUT BOOLEAN *Enabled OPTIONAL,
180 OUT BOOLEAN *Global OPTIONAL,
181 OUT PEPROCESS *Process OPTIONAL,
182 OUT PCHAR *ConditionExpression OPTIONAL);
183
184 NTSTATUS
185 KdbpInsertBreakPoint(
186 IN ULONG_PTR Address,
187 IN KDB_BREAKPOINT_TYPE Type,
188 IN UCHAR Size OPTIONAL,
189 IN KDB_ACCESS_TYPE AccessType OPTIONAL,
190 IN PCHAR ConditionExpression OPTIONAL,
191 IN BOOLEAN Global,
192 OUT PLONG BreakPointNr OPTIONAL);
193
194 BOOLEAN
195 KdbpDeleteBreakPoint(
196 IN LONG BreakPointNr OPTIONAL,
197 IN OUT PKDB_BREAKPOINT BreakPoint OPTIONAL);
198
199 BOOLEAN
200 KdbpEnableBreakPoint(
201 IN LONG BreakPointNr OPTIONAL,
202 IN OUT PKDB_BREAKPOINT BreakPoint OPTIONAL);
203
204 BOOLEAN
205 KdbpDisableBreakPoint(
206 IN LONG BreakPointNr OPTIONAL,
207 IN OUT PKDB_BREAKPOINT BreakPoint OPTIONAL);
208
209 BOOLEAN
210 KdbpGetEnterCondition(
211 IN LONG ExceptionNr,
212 IN BOOLEAN FirstChance,
213 OUT KDB_ENTER_CONDITION *Condition);
214
215 BOOLEAN
216 KdbpSetEnterCondition(
217 IN LONG ExceptionNr,
218 IN BOOLEAN FirstChance,
219 IN KDB_ENTER_CONDITION Condition);
220
221 BOOLEAN
222 KdbpAttachToThread(
223 PVOID ThreadId);
224
225 BOOLEAN
226 KdbpAttachToProcess(
227 PVOID ProcessId);
228
229 VOID
230 NTAPI
231 KdbpGetCommandLineSettings(PCHAR p1);
232
233 KD_CONTINUE_TYPE
234 KdbEnterDebuggerException(PEXCEPTION_RECORD ExceptionRecord,
235 KPROCESSOR_MODE PreviousMode,
236 PCONTEXT Context,
237 PKTRAP_FRAME TrapFrame,
238 BOOLEAN FirstChance);
239 /* other functions */
240
241 NTSTATUS
242 KdbpSafeReadMemory(OUT PVOID Dest,
243 IN PVOID Src,
244 IN ULONG Bytes);
245
246 NTSTATUS
247 KdbpSafeWriteMemory(OUT PVOID Dest,
248 IN PVOID Src,
249 IN ULONG Bytes);
250
251 #define KdbpGetCharKeyboard(ScanCode) KdbpTryGetCharKeyboard(ScanCode, 0)
252 CHAR
253 KdbpTryGetCharKeyboard(PULONG ScanCode, ULONG Retry);
254
255 #define KdbpGetCharSerial() KdbpTryGetCharSerial(0)
256 CHAR
257 KdbpTryGetCharSerial(ULONG Retry);
258
259 VOID
260 KdbEnter(VOID);
261 VOID
262 DbgRDebugInit(VOID);
263 VOID
264 DbgShowFiles(VOID);
265 VOID
266 DbgEnableFile(PCH Filename);
267 VOID
268 DbgDisableFile(PCH Filename);
269 VOID
270 KbdDisableMouse(VOID);
271 VOID
272 KbdEnableMouse(VOID);