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 // Debug Object Information Classes for NtQueryDebugObject
49 typedef enum _DEBUGOBJECTINFOCLASS
51 DebugObjectUnusedInformation
,
52 DebugObjectKillProcessOnExitInformation
53 } DEBUGOBJECTINFOCLASS
, *PDEBUGOBJECTINFOCLASS
;
56 // Debug Message API Number
58 typedef enum _DBGKM_APINUMBER
60 DbgKmExceptionApi
= 0,
61 DbgKmCreateThreadApi
= 1,
62 DbgKmCreateProcessApi
= 2,
63 DbgKmExitThreadApi
= 3,
64 DbgKmExitProcessApi
= 4,
66 DbgKmUnloadDllApi
= 6,
67 DbgKmErrorReportApi
= 7,
68 DbgKmMaxApiNumber
= 8,
72 // Debug Object Information Structures
74 typedef struct _DEBUG_OBJECT_KILL_PROCESS_ON_EXIT_INFORMATION
76 ULONG KillProcessOnExit
;
77 } DEBUG_OBJECT_KILL_PROCESS_ON_EXIT_INFORMATION
, *PDEBUG_OBJECT_KILL_PROCESS_ON_EXIT_INFORMATION
;
79 #ifndef NTOS_MODE_USER
84 typedef struct _DEBUG_OBJECT
94 UCHAR DebuggerInactive
:1;
95 UCHAR KillProcessOnExit
:1;
98 } DEBUG_OBJECT
, *PDEBUG_OBJECT
;
105 typedef enum _DBG_STATE
109 DbgCreateThreadStateChange
,
110 DbgCreateProcessStateChange
,
111 DbgExitThreadStateChange
,
112 DbgExitProcessStateChange
,
113 DbgExceptionStateChange
,
114 DbgBreakpointStateChange
,
115 DbgSingleStepStateChange
,
116 DbgLoadDllStateChange
,
117 DbgUnloadDllStateChange
118 } DBG_STATE
, *PDBG_STATE
;
121 // Debug Message Structures
123 typedef struct _DBGKM_EXCEPTION
125 EXCEPTION_RECORD ExceptionRecord
;
127 } DBGKM_EXCEPTION
, *PDBGKM_EXCEPTION
;
129 typedef struct _DBGKM_CREATE_THREAD
133 } DBGKM_CREATE_THREAD
, *PDBGKM_CREATE_THREAD
;
135 typedef struct _DBGKM_CREATE_PROCESS
140 ULONG DebugInfoFileOffset
;
142 DBGKM_CREATE_THREAD InitialThread
;
143 } DBGKM_CREATE_PROCESS
, *PDBGKM_CREATE_PROCESS
;
145 typedef struct _DBGKM_EXIT_THREAD
148 } DBGKM_EXIT_THREAD
, *PDBGKM_EXIT_THREAD
;
150 typedef struct _DBGKM_EXIT_PROCESS
153 } DBGKM_EXIT_PROCESS
, *PDBGKM_EXIT_PROCESS
;
155 typedef struct _DBGKM_LOAD_DLL
159 ULONG DebugInfoFileOffset
;
162 } DBGKM_LOAD_DLL
, *PDBGKM_LOAD_DLL
;
164 typedef struct _DBGKM_UNLOAD_DLL
167 } DBGKM_UNLOAD_DLL
, *PDBGKM_UNLOAD_DLL
;
170 // User-Mode Debug State Change Structure
172 typedef struct _DBGUI_WAIT_STATE_CHANGE
175 CLIENT_ID AppClientId
;
180 HANDLE HandleToThread
;
181 DBGKM_CREATE_THREAD NewThread
;
185 HANDLE HandleToProcess
;
186 HANDLE HandleToThread
;
187 DBGKM_CREATE_PROCESS NewProcess
;
189 DBGKM_EXIT_THREAD ExitThread
;
190 DBGKM_EXIT_PROCESS ExitProcess
;
191 DBGKM_EXCEPTION Exception
;
192 DBGKM_LOAD_DLL LoadDll
;
193 DBGKM_UNLOAD_DLL UnloadDll
;
195 } DBGUI_WAIT_STATE_CHANGE
, *PDBGUI_WAIT_STATE_CHANGE
;
200 typedef struct _DBGKM_MSG
203 DBGKM_APINUMBER ApiNumber
;
204 NTSTATUS ReturnedStatus
;
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
;
215 } DBGKM_MSG
, *PDBGKM_MSG
;
217 #ifndef NTOS_MODE_USER
222 typedef struct _DEBUG_EVENT
224 LIST_ENTRY EventList
;
225 KEVENT ContinueEvent
;
231 PETHREAD BackoutThread
;
233 } DEBUG_EVENT
, *PDEBUG_EVENT
;