The real, definitive, Visual C++ support branch. Accept no substitutes
[reactos.git] / 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 Object Information Classes for NtQueryDebugObject
38 //
39 typedef enum _DEBUGOBJECTINFOCLASS
40 {
41 DebugObjectUnusedInformation,
42 DebugObjectKillProcessOnExitInformation
43 } DEBUGOBJECTINFOCLASS, *PDEBUGOBJECTINFOCLASS;
44
45 //
46 // Debug Message API Number
47 //
48 typedef enum _DBGKM_APINUMBER
49 {
50 DbgKmExceptionApi = 0,
51 DbgKmCreateThreadApi = 1,
52 DbgKmCreateProcessApi = 2,
53 DbgKmExitThreadApi = 3,
54 DbgKmExitProcessApi = 4,
55 DbgKmLoadDllApi = 5,
56 DbgKmUnloadDllApi = 6,
57 DbgKmErrorReportApi = 7,
58 DbgKmMaxApiNumber = 8,
59 } DBGKM_APINUMBER;
60
61 //
62 // Debug Object Information Structures
63 //
64 typedef struct _DEBUG_OBJECT_KILL_PROCESS_ON_EXIT_INFORMATION
65 {
66 ULONG KillProcessOnExit;
67 } DEBUG_OBJECT_KILL_PROCESS_ON_EXIT_INFORMATION, *PDEBUG_OBJECT_KILL_PROCESS_ON_EXIT_INFORMATION;
68
69 #ifndef NTOS_MODE_USER
70
71 //
72 // Debug Object
73 //
74 typedef struct _DEBUG_OBJECT
75 {
76 KEVENT EventsPresent;
77 FAST_MUTEX Mutex;
78 LIST_ENTRY EventList;
79 union
80 {
81 ULONG Flags;
82 struct
83 {
84 UCHAR DebuggerInactive:1;
85 UCHAR KillProcessOnExit:1;
86 };
87 };
88 } DEBUG_OBJECT, *PDEBUG_OBJECT;
89
90 #endif
91
92 //
93 // Debug States
94 //
95 typedef enum _DBG_STATE
96 {
97 DbgIdle,
98 DbgReplyPending,
99 DbgCreateThreadStateChange,
100 DbgCreateProcessStateChange,
101 DbgExitThreadStateChange,
102 DbgExitProcessStateChange,
103 DbgExceptionStateChange,
104 DbgBreakpointStateChange,
105 DbgSingleStepStateChange,
106 DbgLoadDllStateChange,
107 DbgUnloadDllStateChange
108 } DBG_STATE, *PDBG_STATE;
109
110 //
111 // Debug Message Structures
112 //
113 typedef struct _DBGKM_EXCEPTION
114 {
115 EXCEPTION_RECORD ExceptionRecord;
116 ULONG FirstChance;
117 } DBGKM_EXCEPTION, *PDBGKM_EXCEPTION;
118
119 typedef struct _DBGKM_CREATE_THREAD
120 {
121 ULONG SubSystemKey;
122 PVOID StartAddress;
123 } DBGKM_CREATE_THREAD, *PDBGKM_CREATE_THREAD;
124
125 typedef struct _DBGKM_CREATE_PROCESS
126 {
127 ULONG SubSystemKey;
128 HANDLE FileHandle;
129 PVOID BaseOfImage;
130 ULONG DebugInfoFileOffset;
131 ULONG DebugInfoSize;
132 DBGKM_CREATE_THREAD InitialThread;
133 } DBGKM_CREATE_PROCESS, *PDBGKM_CREATE_PROCESS;
134
135 typedef struct _DBGKM_EXIT_THREAD
136 {
137 NTSTATUS ExitStatus;
138 } DBGKM_EXIT_THREAD, *PDBGKM_EXIT_THREAD;
139
140 typedef struct _DBGKM_EXIT_PROCESS
141 {
142 NTSTATUS ExitStatus;
143 } DBGKM_EXIT_PROCESS, *PDBGKM_EXIT_PROCESS;
144
145 typedef struct _DBGKM_LOAD_DLL
146 {
147 HANDLE FileHandle;
148 PVOID BaseOfDll;
149 ULONG DebugInfoFileOffset;
150 ULONG DebugInfoSize;
151 PVOID NamePointer;
152 } DBGKM_LOAD_DLL, *PDBGKM_LOAD_DLL;
153
154 typedef struct _DBGKM_UNLOAD_DLL
155 {
156 PVOID BaseAddress;
157 } DBGKM_UNLOAD_DLL, *PDBGKM_UNLOAD_DLL;
158
159 //
160 // User-Mode Debug State Change Structure
161 //
162 typedef struct _DBGUI_WAIT_STATE_CHANGE
163 {
164 DBG_STATE NewState;
165 CLIENT_ID AppClientId;
166 union
167 {
168 struct
169 {
170 HANDLE HandleToThread;
171 DBGKM_CREATE_THREAD NewThread;
172 } CreateThread;
173 struct
174 {
175 HANDLE HandleToProcess;
176 HANDLE HandleToThread;
177 DBGKM_CREATE_PROCESS NewProcess;
178 } CreateProcessInfo;
179 DBGKM_EXIT_THREAD ExitThread;
180 DBGKM_EXIT_PROCESS ExitProcess;
181 DBGKM_EXCEPTION Exception;
182 DBGKM_LOAD_DLL LoadDll;
183 DBGKM_UNLOAD_DLL UnloadDll;
184 } StateInfo;
185 } DBGUI_WAIT_STATE_CHANGE, *PDBGUI_WAIT_STATE_CHANGE;
186
187 //
188 // LPC Debug Message
189 //
190 typedef struct _DBGKM_MSG
191 {
192 PORT_MESSAGE h;
193 DBGKM_APINUMBER ApiNumber;
194 ULONG ReturnedStatus;
195 union
196 {
197 DBGKM_EXCEPTION Exception;
198 DBGKM_CREATE_THREAD CreateThread;
199 DBGKM_CREATE_PROCESS CreateProcess;
200 DBGKM_EXIT_THREAD ExitThread;
201 DBGKM_EXIT_PROCESS ExitProcess;
202 DBGKM_LOAD_DLL LoadDll;
203 DBGKM_UNLOAD_DLL UnloadDll;
204 };
205 } DBGKM_MSG, *PDBGKM_MSG;
206
207 #ifndef NTOS_MODE_USER
208
209 //
210 // Debug Event
211 //
212 typedef struct _DEBUG_EVENT
213 {
214 LIST_ENTRY EventList;
215 KEVENT ContinueEvent;
216 CLIENT_ID ClientId;
217 PEPROCESS Process;
218 PETHREAD Thread;
219 NTSTATUS Status;
220 ULONG Flags;
221 PETHREAD BackoutThread;
222 DBGKM_MSG ApiMsg;
223 } DEBUG_EVENT, *PDEBUG_EVENT;
224
225
226 #endif
227
228 #endif