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 _KERNEL_OBJECTS
{
40 KNotificationEvent
= 0,
41 KSynchronizationEvent
= 1,
47 KNotificationTimer
= 8,
48 KSynchronizationTimer
= 9,
59 typedef struct _DISPATCHER_HEADER
66 LIST_ENTRY WaitListHead
;
67 } DISPATCHER_HEADER
, *PDISPATCHER_HEADER
;
71 typedef struct _KQUEUE
73 DISPATCHER_HEADER Header
;
74 LIST_ENTRY EntryListHead
;
77 LIST_ENTRY ThreadListHead
;
82 typedef struct _KTIMER
84 DISPATCHER_HEADER Header
;
85 ULARGE_INTEGER DueTime
;
86 LIST_ENTRY TimerListEntry
;
91 typedef ULONG_PTR KSPIN_LOCK
, *PKSPIN_LOCK
;
93 typedef struct _KDEVICE_QUEUE
97 LIST_ENTRY DeviceListHead
;
100 } KDEVICE_QUEUE
, *PKDEVICE_QUEUE
;
103 #include <pshpack2.h>
110 struct _KTHREAD
* Thread
;
111 LIST_ENTRY ApcListEntry
;
112 PKKERNEL_ROUTINE KernelRoutine
;
113 PKRUNDOWN_ROUTINE RundownRoutine
;
114 PKNORMAL_ROUTINE NormalRoutine
;
116 PVOID SystemArgument1
;
117 PVOID SystemArgument2
;
119 KPROCESSOR_MODE ApcMode
;
127 #include <pshpack1.h>
129 typedef struct _KAPC_STATE
131 LIST_ENTRY ApcListHead
[2];
132 struct _KPROCESS
* Process
;
133 UCHAR KernelApcInProgress
;
134 UCHAR KernelApcPending
;
135 UCHAR UserApcPending
;
137 } KAPC_STATE
, *PKAPC_STATE
, *__restrict PRKAPC_STATE
;
141 #endif /* __USE_W32API */
143 typedef struct _KBUGCHECK_CALLBACK_RECORD
146 PKBUGCHECK_CALLBACK_ROUTINE CallbackRoutine
;
152 } KBUGCHECK_CALLBACK_RECORD
, *PKBUGCHECK_CALLBACK_RECORD
;
154 typedef struct _KMUTEX
156 DISPATCHER_HEADER Header
;
157 LIST_ENTRY MutantListEntry
;
158 struct _KTHREAD
* OwnerThread
;
161 } KMUTEX
, *PKMUTEX
, KMUTANT
, *PKMUTANT
;
163 #include <pshpack1.h>
165 typedef struct _KSEMAPHORE
167 DISPATCHER_HEADER Header
;
169 } KSEMAPHORE
, *PKSEMAPHORE
;
173 typedef struct _KEVENT
175 DISPATCHER_HEADER Header
;
178 typedef struct _KEVENT_PAIR
184 } KEVENT_PAIR
, *PKEVENT_PAIR
;
189 typedef struct _KSPIN_LOCK_QUEUE
{
190 struct _KSPIN_LOCK_QUEUE
* volatile Next
;
191 PKSPIN_LOCK
volatile Lock
;
192 } KSPIN_LOCK_QUEUE
, *PKSPIN_LOCK_QUEUE
;
194 typedef struct _KLOCK_QUEUE_HANDLE
{
195 KSPIN_LOCK_QUEUE LockQueue
;
197 } KLOCK_QUEUE_HANDLE
, *PKLOCK_QUEUE_HANDLE
;
199 typedef struct _KWAIT_BLOCK
201 * PURPOSE: Object describing the wait a thread is currently performing
204 LIST_ENTRY WaitListEntry
;
205 struct _KTHREAD
* Thread
;
206 struct _DISPATCHER_HEADER
*Object
;
207 struct _KWAIT_BLOCK
* NextWaitBlock
;
210 } KWAIT_BLOCK
, *PKWAIT_BLOCK
;
213 * PURPOSE: Defines a delayed procedure call routine
215 * Dpc = The associated DPC object
216 * DeferredContext = Driver defined context for the DPC
217 * SystemArgument[1-2] = Undocumented.
220 typedef VOID STDCALL_FUNC
221 (*PKDEFERRED_ROUTINE
)(struct _KDPC
* Dpc
,
222 PVOID DeferredContext
,
223 PVOID SystemArgument1
,
224 PVOID SystemArgument2
);
227 * PURPOSE: Defines a delayed procedure call object
229 #include <pshpack1.h>
236 LIST_ENTRY DpcListEntry
;
237 PKDEFERRED_ROUTINE DeferredRoutine
;
238 PVOID DeferredContext
;
239 PVOID SystemArgument1
;
240 PVOID SystemArgument2
;
246 typedef struct _KDPC_DATA
{
247 LIST_ENTRY DpcListHead
;
251 } KDPC_DATA
, *PKDPC_DATA
;
253 typedef struct _KDEVICE_QUEUE_ENTRY
255 LIST_ENTRY DeviceListEntry
;
258 } KDEVICE_QUEUE_ENTRY
, *PKDEVICE_QUEUE_ENTRY
;
260 typedef struct _WAIT_CONTEXT_BLOCK
262 KDEVICE_QUEUE_ENTRY WaitQueueEntry
;
264 * XXX THIS IS WRONG XXX
266 * Our headers have enough circular dependancies that
267 * I can't figure out, given 5 minutes of testing, what
268 * order to include them in to get PDRIVER_CONTROL to be
269 * defined here. The proper definition of the next item
272 * PDRIVER_CONTROL DeviceRoutine;
274 * but instead we use PVOID until headers are fixed.
278 ULONG NumberOfMapRegisters
;
281 PKDPC BufferChainingDpc
;
282 } WAIT_CONTEXT_BLOCK
, *PWAIT_CONTEXT_BLOCK
;
284 typedef enum _KBUGCHECK_CALLBACK_REASON
{
287 KbCallbackSecondaryDumpData
,
289 } KBUGCHECK_CALLBACK_REASON
;
293 (*PKBUGCHECK_REASON_CALLBACK_ROUTINE
) (
294 IN KBUGCHECK_CALLBACK_REASON Reason
,
295 IN PVOID Record
, // This should be struct _KBUGCHECK_REASON_CALLBACK_RECORD* but minggw doesn't want to allow that...
296 IN OUT PVOID ReasonSpecificData
,
297 IN ULONG ReasonSpecificDataLength
300 typedef struct _KBUGCHECK_REASON_CALLBACK_RECORD
{
302 PKBUGCHECK_REASON_CALLBACK_ROUTINE CallbackRoutine
;
305 KBUGCHECK_CALLBACK_REASON Reason
;
307 } KBUGCHECK_REASON_CALLBACK_RECORD
, *PKBUGCHECK_REASON_CALLBACK_RECORD
;
311 typedef BOOLEAN STDCALL_FUNC
312 (*PKSERVICE_ROUTINE
)(struct _KINTERRUPT
* Interrupt
,
313 PVOID ServiceContext
);
314 typedef struct _EPROCESS EPROCESS
, *PEPROCESS
;
316 typedef HANDLE HSEMAPHORE
;
318 typedef HANDLE HDRVOBJ
;
320 typedef LONG FLOAT_LONG
, *PFLOAT_LONG
;
324 typedef LONG FIX
; /* fixed-point number */
326 typedef struct _M128
{
331 typedef struct _KEXCEPTION_FRAME
{
337 ULONG64 InitialStack
;
349 ULONG64 CallbackStack
;
350 ULONG64 OutputBuffer
;
351 ULONG64 OutputLength
;
352 UCHAR ExceptionRecord
[64];
363 } KEXCEPTION_FRAME
, *PKEXCEPTION_FRAME
;
365 /* copied from W32API */
366 typedef struct _KFLOATING_SAVE
376 } KFLOATING_SAVE
, *PKFLOATING_SAVE
;
378 #endif /* __INCLUDE_DDK_KETYPES_H */