1 /* KERNEL TYPES **************************************************************/
3 #ifndef __INCLUDE_DDK_KETYPES_H
4 #define __INCLUDE_DDK_KETYPES_H
6 /* include ntos/ketypes.h here? */
10 typedef LONG KPRIORITY
;
14 typedef VOID STDCALL_FUNC
15 (*PKBUGCHECK_CALLBACK_ROUTINE
)(PVOID Buffer
, ULONG Length
);
17 typedef BOOLEAN STDCALL_FUNC
18 (*PKSYNCHRONIZE_ROUTINE
)(PVOID SynchronizeContext
);
22 typedef VOID STDCALL_FUNC
23 (*PKNORMAL_ROUTINE
)(PVOID NormalContext
,
24 PVOID SystemArgument1
,
25 PVOID SystemArgument2
);
27 typedef VOID STDCALL_FUNC
28 (*PKKERNEL_ROUTINE
)(struct _KAPC
* Apc
,
29 PKNORMAL_ROUTINE
* NormalRoutine
,
31 PVOID
* SystemArgument1
,
32 PVOID
* SystemArgument2
);
34 typedef VOID STDCALL_FUNC
35 (*PKRUNDOWN_ROUTINE
)(struct _KAPC
* Apc
);
37 struct _DISPATCHER_HEADER
;
39 typedef enum _KOBJECTS
{
40 EventNotificationObject
= 0,
41 EventSynchronizationObject
= 1,
48 TimerNotificationObject
= 8,
49 TimerSynchronizationObject
= 9,
60 DeviceQueueObject
= 20,
64 ThreadedDpcObject
= 24,
65 MaximumKernelObject
= 25
70 typedef struct _DISPATCHER_HEADER
77 LIST_ENTRY WaitListHead
;
78 } DISPATCHER_HEADER
, *PDISPATCHER_HEADER
;
82 typedef struct _KQUEUE
84 DISPATCHER_HEADER Header
;
85 LIST_ENTRY EntryListHead
;
88 LIST_ENTRY ThreadListHead
;
93 DISPATCHER_HEADER Header
;
98 typedef struct _KTIMER
100 DISPATCHER_HEADER Header
;
101 ULARGE_INTEGER DueTime
;
102 LIST_ENTRY TimerListEntry
;
107 typedef ULONG_PTR KSPIN_LOCK
, *PKSPIN_LOCK
;
109 typedef struct _KDEVICE_QUEUE
113 LIST_ENTRY DeviceListHead
;
116 } KDEVICE_QUEUE
, *PKDEVICE_QUEUE
;
119 * Size of the profile hash table.
121 #define PROFILE_HASH_TABLE_SIZE (32)
123 #include <pshpack2.h>
130 struct _KTHREAD
* Thread
;
131 LIST_ENTRY ApcListEntry
;
132 PKKERNEL_ROUTINE KernelRoutine
;
133 PKRUNDOWN_ROUTINE RundownRoutine
;
134 PKNORMAL_ROUTINE NormalRoutine
;
136 PVOID SystemArgument1
;
137 PVOID SystemArgument2
;
139 KPROCESSOR_MODE ApcMode
;
147 #include <pshpack1.h>
149 typedef struct _KAPC_STATE
151 LIST_ENTRY ApcListHead
[2];
152 struct _KPROCESS
* Process
;
153 UCHAR KernelApcInProgress
;
154 UCHAR KernelApcPending
;
155 UCHAR UserApcPending
;
157 } KAPC_STATE
, *PKAPC_STATE
, *__restrict PRKAPC_STATE
;
161 #endif /* __USE_W32API */
163 typedef struct _KBUGCHECK_CALLBACK_RECORD
166 PKBUGCHECK_CALLBACK_ROUTINE CallbackRoutine
;
172 } KBUGCHECK_CALLBACK_RECORD
, *PKBUGCHECK_CALLBACK_RECORD
;
174 typedef struct _KMUTEX
176 DISPATCHER_HEADER Header
;
177 LIST_ENTRY MutantListEntry
;
178 struct _KTHREAD
* OwnerThread
;
181 } KMUTEX
, *PKMUTEX
, KMUTANT
, *PKMUTANT
;
183 typedef struct _KGUARDED_MUTEX
186 struct _KTHREAD
* Owner
;
191 SHORT KernelApcDisable
;
192 SHORT SpecialApcDisable
;
194 ULONG CombinedApcDisable
;
196 } KGUARDED_MUTEX
, *PKGUARDED_MUTEX
;
198 #include <pshpack1.h>
200 typedef struct _KSEMAPHORE
202 DISPATCHER_HEADER Header
;
204 } KSEMAPHORE
, *PKSEMAPHORE
;
208 typedef struct _KEVENT
210 DISPATCHER_HEADER Header
;
213 typedef struct _KEVENT_PAIR
219 } KEVENT_PAIR
, *PKEVENT_PAIR
;
224 typedef struct _KSPIN_LOCK_QUEUE
{
225 struct _KSPIN_LOCK_QUEUE
* volatile Next
;
226 PKSPIN_LOCK
volatile Lock
;
227 } KSPIN_LOCK_QUEUE
, *PKSPIN_LOCK_QUEUE
;
229 typedef struct _KLOCK_QUEUE_HANDLE
{
230 KSPIN_LOCK_QUEUE LockQueue
;
232 } KLOCK_QUEUE_HANDLE
, *PKLOCK_QUEUE_HANDLE
;
234 typedef struct _KWAIT_BLOCK
236 * PURPOSE: Object describing the wait a thread is currently performing
239 LIST_ENTRY WaitListEntry
;
240 struct _KTHREAD
* Thread
;
241 struct _DISPATCHER_HEADER
*Object
;
242 struct _KWAIT_BLOCK
* NextWaitBlock
;
245 } KWAIT_BLOCK
, *PKWAIT_BLOCK
;
248 * PURPOSE: Defines a delayed procedure call routine
250 * Dpc = The associated DPC object
251 * DeferredContext = Driver defined context for the DPC
252 * SystemArgument[1-2] = Undocumented.
255 typedef VOID STDCALL_FUNC
256 (*PKDEFERRED_ROUTINE
)(struct _KDPC
* Dpc
,
257 PVOID DeferredContext
,
258 PVOID SystemArgument1
,
259 PVOID SystemArgument2
);
262 * PURPOSE: Defines a delayed procedure call object
264 #include <pshpack1.h>
271 LIST_ENTRY DpcListEntry
;
272 PKDEFERRED_ROUTINE DeferredRoutine
;
273 PVOID DeferredContext
;
274 PVOID SystemArgument1
;
275 PVOID SystemArgument2
;
281 typedef struct _KDPC_DATA
{
282 LIST_ENTRY DpcListHead
;
286 } KDPC_DATA
, *PKDPC_DATA
;
288 typedef enum _KBUGCHECK_CALLBACK_REASON
{
291 KbCallbackSecondaryDumpData
,
293 } KBUGCHECK_CALLBACK_REASON
;
297 (*PKBUGCHECK_REASON_CALLBACK_ROUTINE
) (
298 IN KBUGCHECK_CALLBACK_REASON Reason
,
299 IN PVOID Record
, // This should be struct _KBUGCHECK_REASON_CALLBACK_RECORD* but minggw doesn't want to allow that...
300 IN OUT PVOID ReasonSpecificData
,
301 IN ULONG ReasonSpecificDataLength
304 typedef struct _KBUGCHECK_REASON_CALLBACK_RECORD
{
306 PKBUGCHECK_REASON_CALLBACK_ROUTINE CallbackRoutine
;
309 KBUGCHECK_CALLBACK_REASON Reason
;
311 } KBUGCHECK_REASON_CALLBACK_RECORD
, *PKBUGCHECK_REASON_CALLBACK_RECORD
;
315 typedef BOOLEAN STDCALL_FUNC
316 (*PKSERVICE_ROUTINE
)(struct _KINTERRUPT
* Interrupt
,
317 PVOID ServiceContext
);
318 typedef struct _EPROCESS EPROCESS
, *PEPROCESS
;
320 typedef HANDLE HSEMAPHORE
;
322 typedef HANDLE HDRVOBJ
;
324 typedef LONG FLOAT_LONG
, *PFLOAT_LONG
;
328 typedef LONG FIX
; /* fixed-point number */
330 typedef struct _M128
{
335 typedef struct _KEXCEPTION_FRAME
{
341 ULONG64 InitialStack
;
353 ULONG64 CallbackStack
;
354 ULONG64 OutputBuffer
;
355 ULONG64 OutputLength
;
356 UCHAR ExceptionRecord
[64];
367 } KEXCEPTION_FRAME
, *PKEXCEPTION_FRAME
;
369 /* copied from W32API */
370 typedef struct _KFLOATING_SAVE
380 } KFLOATING_SAVE
, *PKFLOATING_SAVE
;
382 #endif /* __INCLUDE_DDK_KETYPES_H */