daf536bc12f3c72404010b4b8952c0461244b69b
[reactos.git] / reactos / include / ndk / dbgktypes.h
1 /*++ NDK Version: 0098
2
3 Copyright (c) Alex Ionescu. All rights reserved.
4
5 Header Name:
6
7 dbgktypes.h
8
9 Abstract:
10
11 Type definitions for the User Mode Debugging Facility.
12
13 Author:
14
15 Alex Ionescu (alexi@tinykrnl.org) - Updated - 27-Feb-2006
16
17 --*/
18
19 #ifndef _DBGKTYPES_H
20 #define _DBGKTYPES_H
21
22 //
23 // Dependencies
24 //
25 #include <umtypes.h>
26 #include <lpctypes.h>
27
28 //
29 // Debug Object Access Masks
30 //
31 #define DEBUG_OBJECT_WAIT_STATE_CHANGE 0x0001
32 #define DEBUG_OBJECT_ADD_REMOVE_PROCESS 0x0002
33 #define DEBUG_OBJECT_SET_INFORMATION 0x0004
34 #define DEBUG_OBJECT_ALL_ACCESS (STANDARD_RIGHTS_REQUIRED | SYNCHRONIZE | 0x0F)
35
36 //
37 // Debug Event Flags
38 //
39 #define DEBUG_EVENT_READ (0x01)
40 #define DEBUG_EVENT_NOWAIT (0x02)
41 #define DEBUG_EVENT_INACTIVE (0x04)
42 #define DEBUG_EVENT_RELEASE (0x08)
43 #define DEBUG_EVENT_PROTECT_FAILED (0x10)
44 #define DEBUG_EVENT_SUSPEND (0x20)
45
46 //
47 // Debug Object Information Classes for NtQueryDebugObject
48 //
49 typedef enum _DEBUGOBJECTINFOCLASS
50 {
51 DebugObjectUnusedInformation,
52 DebugObjectKillProcessOnExitInformation
53 } DEBUGOBJECTINFOCLASS, *PDEBUGOBJECTINFOCLASS;
54
55 //
56 // Debug Message API Number
57 //
58 typedef enum _DBGKM_APINUMBER
59 {
60 DbgKmExceptionApi = 0,
61 DbgKmCreateThreadApi = 1,
62 DbgKmCreateProcessApi = 2,
63 DbgKmExitThreadApi = 3,
64 DbgKmExitProcessApi = 4,
65 DbgKmLoadDllApi = 5,
66 DbgKmUnloadDllApi = 6,
67 DbgKmErrorReportApi = 7,
68 DbgKmMaxApiNumber = 8,
69 } DBGKM_APINUMBER;
70
71 //
72 // Debug Object Information Structures
73 //
74 typedef struct _DEBUG_OBJECT_KILL_PROCESS_ON_EXIT_INFORMATION
75 {
76 ULONG KillProcessOnExit;
77 } DEBUG_OBJECT_KILL_PROCESS_ON_EXIT_INFORMATION, *PDEBUG_OBJECT_KILL_PROCESS_ON_EXIT_INFORMATION;
78
79 #ifndef NTOS_MODE_USER
80
81 //
82 // Debug Object
83 //
84 typedef struct _DEBUG_OBJECT
85 {
86 KEVENT EventsPresent;
87 FAST_MUTEX Mutex;
88 LIST_ENTRY EventList;
89 union
90 {
91 ULONG Flags;
92 struct
93 {
94 UCHAR DebuggerInactive:1;
95 UCHAR KillProcessOnExit:1;
96 };
97 };
98 } DEBUG_OBJECT, *PDEBUG_OBJECT;
99
100 #endif
101
102 //
103 // Debug States
104 //
105 typedef enum _DBG_STATE
106 {
107 DbgIdle,
108 DbgReplyPending,
109 DbgCreateThreadStateChange,
110 DbgCreateProcessStateChange,
111 DbgExitThreadStateChange,
112 DbgExitProcessStateChange,
113 DbgExceptionStateChange,
114 DbgBreakpointStateChange,
115 DbgSingleStepStateChange,
116 DbgLoadDllStateChange,
117 DbgUnloadDllStateChange
118 } DBG_STATE, *PDBG_STATE;
119
120 //
121 // Debug Message Structures
122 //
123 typedef struct _DBGKM_EXCEPTION
124 {
125 EXCEPTION_RECORD ExceptionRecord;
126 ULONG FirstChance;
127 } DBGKM_EXCEPTION, *PDBGKM_EXCEPTION;
128
129 typedef struct _DBGKM_CREATE_THREAD
130 {
131 ULONG SubSystemKey;
132 PVOID StartAddress;
133 } DBGKM_CREATE_THREAD, *PDBGKM_CREATE_THREAD;
134
135 typedef struct _DBGKM_CREATE_PROCESS
136 {
137 ULONG SubSystemKey;
138 HANDLE FileHandle;
139 PVOID BaseOfImage;
140 ULONG DebugInfoFileOffset;
141 ULONG DebugInfoSize;
142 DBGKM_CREATE_THREAD InitialThread;
143 } DBGKM_CREATE_PROCESS, *PDBGKM_CREATE_PROCESS;
144
145 typedef struct _DBGKM_EXIT_THREAD
146 {
147 NTSTATUS ExitStatus;
148 } DBGKM_EXIT_THREAD, *PDBGKM_EXIT_THREAD;
149
150 typedef struct _DBGKM_EXIT_PROCESS
151 {
152 NTSTATUS ExitStatus;
153 } DBGKM_EXIT_PROCESS, *PDBGKM_EXIT_PROCESS;
154
155 typedef struct _DBGKM_LOAD_DLL
156 {
157 HANDLE FileHandle;
158 PVOID BaseOfDll;
159 ULONG DebugInfoFileOffset;
160 ULONG DebugInfoSize;
161 PVOID NamePointer;
162 } DBGKM_LOAD_DLL, *PDBGKM_LOAD_DLL;
163
164 typedef struct _DBGKM_UNLOAD_DLL
165 {
166 PVOID BaseAddress;
167 } DBGKM_UNLOAD_DLL, *PDBGKM_UNLOAD_DLL;
168
169 //
170 // User-Mode Debug State Change Structure
171 //
172 typedef struct _DBGUI_WAIT_STATE_CHANGE
173 {
174 DBG_STATE NewState;
175 CLIENT_ID AppClientId;
176 union
177 {
178 struct
179 {
180 HANDLE HandleToThread;
181 DBGKM_CREATE_THREAD NewThread;
182 } CreateThread;
183 struct
184 {
185 HANDLE HandleToProcess;
186 HANDLE HandleToThread;
187 DBGKM_CREATE_PROCESS NewProcess;
188 } CreateProcessInfo;
189 DBGKM_EXIT_THREAD ExitThread;
190 DBGKM_EXIT_PROCESS ExitProcess;
191 DBGKM_EXCEPTION Exception;
192 DBGKM_LOAD_DLL LoadDll;
193 DBGKM_UNLOAD_DLL UnloadDll;
194 } StateInfo;
195 } DBGUI_WAIT_STATE_CHANGE, *PDBGUI_WAIT_STATE_CHANGE;
196
197 //
198 // LPC Debug Message
199 //
200 typedef struct _DBGKM_MSG
201 {
202 PORT_MESSAGE h;
203 DBGKM_APINUMBER ApiNumber;
204 NTSTATUS ReturnedStatus;
205 union
206 {
207 DBGKM_EXCEPTION Exception;
208 DBGKM_CREATE_THREAD CreateThread;
209 DBGKM_CREATE_PROCESS CreateProcess;
210 DBGKM_EXIT_THREAD ExitThread;
211 DBGKM_EXIT_PROCESS ExitProcess;
212 DBGKM_LOAD_DLL LoadDll;
213 DBGKM_UNLOAD_DLL UnloadDll;
214 };
215 } DBGKM_MSG, *PDBGKM_MSG;
216
217 #ifndef NTOS_MODE_USER
218
219 //
220 // Debug Event
221 //
222 typedef struct _DEBUG_EVENT
223 {
224 LIST_ENTRY EventList;
225 KEVENT ContinueEvent;
226 CLIENT_ID ClientId;
227 PEPROCESS Process;
228 PETHREAD Thread;
229 NTSTATUS Status;
230 ULONG Flags;
231 PETHREAD BackoutThread;
232 DBGKM_MSG ApiMsg;
233 } DEBUG_EVENT, *PDEBUG_EVENT;
234
235
236 #endif
237
238 #endif