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)
37 // Debug Object Information Classes for NtQueryDebugObject
39 typedef enum _DEBUGOBJECTINFOCLASS
41 DebugObjectUnusedInformation
,
42 DebugObjectKillProcessOnExitInformation
43 } DEBUGOBJECTINFOCLASS
, *PDEBUGOBJECTINFOCLASS
;
46 // Debug Message API Number
48 typedef enum _DBGKM_APINUMBER
50 DbgKmExceptionApi
= 0,
51 DbgKmCreateThreadApi
= 1,
52 DbgKmCreateProcessApi
= 2,
53 DbgKmExitThreadApi
= 3,
54 DbgKmExitProcessApi
= 4,
56 DbgKmUnloadDllApi
= 6,
57 DbgKmErrorReportApi
= 7,
58 DbgKmMaxApiNumber
= 8,
62 // Debug Object Information Structures
64 typedef struct _DEBUG_OBJECT_KILL_PROCESS_ON_EXIT_INFORMATION
66 ULONG KillProcessOnExit
;
67 } DEBUG_OBJECT_KILL_PROCESS_ON_EXIT_INFORMATION
, *PDEBUG_OBJECT_KILL_PROCESS_ON_EXIT_INFORMATION
;
69 #ifndef NTOS_MODE_USER
74 typedef struct _DEBUG_OBJECT
84 UCHAR DebuggerInactive
:1;
85 UCHAR KillProcessOnExit
:1;
88 } DEBUG_OBJECT
, *PDEBUG_OBJECT
;
95 typedef enum _DBG_STATE
99 DbgCreateThreadStateChange
,
100 DbgCreateProcessStateChange
,
101 DbgExitThreadStateChange
,
102 DbgExitProcessStateChange
,
103 DbgExceptionStateChange
,
104 DbgBreakpointStateChange
,
105 DbgSingleStepStateChange
,
106 DbgLoadDllStateChange
,
107 DbgUnloadDllStateChange
108 } DBG_STATE
, *PDBG_STATE
;
111 // Debug Message Structures
113 typedef struct _DBGKM_EXCEPTION
115 EXCEPTION_RECORD ExceptionRecord
;
117 } DBGKM_EXCEPTION
, *PDBGKM_EXCEPTION
;
119 typedef struct _DBGKM_CREATE_THREAD
123 } DBGKM_CREATE_THREAD
, *PDBGKM_CREATE_THREAD
;
125 typedef struct _DBGKM_CREATE_PROCESS
130 ULONG DebugInfoFileOffset
;
132 DBGKM_CREATE_THREAD InitialThread
;
133 } DBGKM_CREATE_PROCESS
, *PDBGKM_CREATE_PROCESS
;
135 typedef struct _DBGKM_EXIT_THREAD
138 } DBGKM_EXIT_THREAD
, *PDBGKM_EXIT_THREAD
;
140 typedef struct _DBGKM_EXIT_PROCESS
143 } DBGKM_EXIT_PROCESS
, *PDBGKM_EXIT_PROCESS
;
145 typedef struct _DBGKM_LOAD_DLL
149 ULONG DebugInfoFileOffset
;
152 } DBGKM_LOAD_DLL
, *PDBGKM_LOAD_DLL
;
154 typedef struct _DBGKM_UNLOAD_DLL
157 } DBGKM_UNLOAD_DLL
, *PDBGKM_UNLOAD_DLL
;
160 // User-Mode Debug State Change Structure
162 typedef struct _DBGUI_WAIT_STATE_CHANGE
165 CLIENT_ID AppClientId
;
170 HANDLE HandleToThread
;
171 DBGKM_CREATE_THREAD NewThread
;
175 HANDLE HandleToProcess
;
176 HANDLE HandleToThread
;
177 DBGKM_CREATE_PROCESS NewProcess
;
179 DBGKM_EXIT_THREAD ExitThread
;
180 DBGKM_EXIT_PROCESS ExitProcess
;
181 DBGKM_EXCEPTION Exception
;
182 DBGKM_LOAD_DLL LoadDll
;
183 DBGKM_UNLOAD_DLL UnloadDll
;
185 } DBGUI_WAIT_STATE_CHANGE
, *PDBGUI_WAIT_STATE_CHANGE
;
190 typedef struct _DBGKM_MSG
193 DBGKM_APINUMBER ApiNumber
;
194 ULONG ReturnedStatus
;
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
;
205 } DBGKM_MSG
, *PDBGKM_MSG
;
207 #ifndef NTOS_MODE_USER
212 typedef struct _DEBUG_EVENT
214 LIST_ENTRY EventList
;
215 KEVENT ContinueEvent
;
221 PETHREAD BackoutThread
;
223 } DEBUG_EVENT
, *PDEBUG_EVENT
;