3 Copyright (c) Alex Ionescu. All rights reserved.
11 Type definitions for the User Mode Debugging Facility.
15 Alex Ionescu (alexi@tinykrnl.org) - Updated - 27-Feb-2006
29 // Debug Object Access Masks
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)
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)
47 // NtCreateDebugObject Flags
49 #define DBGK_KILL_PROCESS_ON_EXIT (0x1)
50 #define DBGK_ALL_FLAGS (DBGK_KILL_PROCESS_ON_EXIT)
53 // Debug Object Information Classes for NtQueryDebugObject
55 typedef enum _DEBUGOBJECTINFOCLASS
57 DebugObjectUnusedInformation
,
58 DebugObjectKillProcessOnExitInformation
59 } DEBUGOBJECTINFOCLASS
, *PDEBUGOBJECTINFOCLASS
;
62 // Debug Message API Number
64 typedef enum _DBGKM_APINUMBER
66 DbgKmExceptionApi
= 0,
67 DbgKmCreateThreadApi
= 1,
68 DbgKmCreateProcessApi
= 2,
69 DbgKmExitThreadApi
= 3,
70 DbgKmExitProcessApi
= 4,
72 DbgKmUnloadDllApi
= 6,
73 DbgKmErrorReportApi
= 7,
74 DbgKmMaxApiNumber
= 8,
78 // Debug Object Information Structures
80 typedef struct _DEBUG_OBJECT_KILL_PROCESS_ON_EXIT_INFORMATION
82 ULONG KillProcessOnExit
;
83 } DEBUG_OBJECT_KILL_PROCESS_ON_EXIT_INFORMATION
, *PDEBUG_OBJECT_KILL_PROCESS_ON_EXIT_INFORMATION
;
85 #ifndef NTOS_MODE_USER
90 typedef struct _DEBUG_OBJECT
100 UCHAR DebuggerInactive
:1;
101 UCHAR KillProcessOnExit
:1;
104 } DEBUG_OBJECT
, *PDEBUG_OBJECT
;
111 typedef enum _DBG_STATE
115 DbgCreateThreadStateChange
,
116 DbgCreateProcessStateChange
,
117 DbgExitThreadStateChange
,
118 DbgExitProcessStateChange
,
119 DbgExceptionStateChange
,
120 DbgBreakpointStateChange
,
121 DbgSingleStepStateChange
,
122 DbgLoadDllStateChange
,
123 DbgUnloadDllStateChange
124 } DBG_STATE
, *PDBG_STATE
;
127 // Debug Message Structures
129 typedef struct _DBGKM_EXCEPTION
131 EXCEPTION_RECORD ExceptionRecord
;
133 } DBGKM_EXCEPTION
, *PDBGKM_EXCEPTION
;
135 typedef struct _DBGKM_CREATE_THREAD
139 } DBGKM_CREATE_THREAD
, *PDBGKM_CREATE_THREAD
;
141 typedef struct _DBGKM_CREATE_PROCESS
146 ULONG DebugInfoFileOffset
;
148 DBGKM_CREATE_THREAD InitialThread
;
149 } DBGKM_CREATE_PROCESS
, *PDBGKM_CREATE_PROCESS
;
151 typedef struct _DBGKM_EXIT_THREAD
154 } DBGKM_EXIT_THREAD
, *PDBGKM_EXIT_THREAD
;
156 typedef struct _DBGKM_EXIT_PROCESS
159 } DBGKM_EXIT_PROCESS
, *PDBGKM_EXIT_PROCESS
;
161 typedef struct _DBGKM_LOAD_DLL
165 ULONG DebugInfoFileOffset
;
168 } DBGKM_LOAD_DLL
, *PDBGKM_LOAD_DLL
;
170 typedef struct _DBGKM_UNLOAD_DLL
173 } DBGKM_UNLOAD_DLL
, *PDBGKM_UNLOAD_DLL
;
176 // User-Mode Debug State Change Structure
178 typedef struct _DBGUI_WAIT_STATE_CHANGE
181 CLIENT_ID AppClientId
;
186 HANDLE HandleToThread
;
187 DBGKM_CREATE_THREAD NewThread
;
191 HANDLE HandleToProcess
;
192 HANDLE HandleToThread
;
193 DBGKM_CREATE_PROCESS NewProcess
;
195 DBGKM_EXIT_THREAD ExitThread
;
196 DBGKM_EXIT_PROCESS ExitProcess
;
197 DBGKM_EXCEPTION Exception
;
198 DBGKM_LOAD_DLL LoadDll
;
199 DBGKM_UNLOAD_DLL UnloadDll
;
201 } DBGUI_WAIT_STATE_CHANGE
, *PDBGUI_WAIT_STATE_CHANGE
;
206 typedef struct _DBGKM_MSG
209 DBGKM_APINUMBER ApiNumber
;
210 NTSTATUS ReturnedStatus
;
213 DBGKM_EXCEPTION Exception
;
214 DBGKM_CREATE_THREAD CreateThread
;
215 DBGKM_CREATE_PROCESS CreateProcess
;
216 DBGKM_EXIT_THREAD ExitThread
;
217 DBGKM_EXIT_PROCESS ExitProcess
;
218 DBGKM_LOAD_DLL LoadDll
;
219 DBGKM_UNLOAD_DLL UnloadDll
;
221 } DBGKM_MSG
, *PDBGKM_MSG
;
223 #ifndef NTOS_MODE_USER
228 typedef struct _DEBUG_EVENT
230 LIST_ENTRY EventList
;
231 KEVENT ContinueEvent
;
237 PETHREAD BackoutThread
;
239 } DEBUG_EVENT
, *PDEBUG_EVENT
;