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
;
43 typedef struct _DISPATCHER_HEADER
50 LIST_ENTRY WaitListHead
;
51 } DISPATCHER_HEADER
, *PDISPATCHER_HEADER
;
55 typedef struct _KQUEUE
57 DISPATCHER_HEADER Header
;
58 LIST_ENTRY EntryListHead
;
61 LIST_ENTRY ThreadListHead
;
66 typedef struct _KTIMER
68 DISPATCHER_HEADER Header
;
69 ULARGE_INTEGER DueTime
;
70 LIST_ENTRY TimerListEntry
;
75 typedef ULONG_PTR KSPIN_LOCK
, *PKSPIN_LOCK
;
77 typedef struct _KDEVICE_QUEUE
81 LIST_ENTRY DeviceListHead
;
84 } KDEVICE_QUEUE
, *PKDEVICE_QUEUE
;
94 struct _KTHREAD
* Thread
;
95 LIST_ENTRY ApcListEntry
;
96 PKKERNEL_ROUTINE KernelRoutine
;
97 PKRUNDOWN_ROUTINE RundownRoutine
;
98 PKNORMAL_ROUTINE NormalRoutine
;
100 PVOID SystemArgument1
;
101 PVOID SystemArgument2
;
103 KPROCESSOR_MODE ApcMode
;
109 typedef struct _KBUGCHECK_CALLBACK_RECORD
112 PKBUGCHECK_CALLBACK_ROUTINE CallbackRoutine
;
118 } KBUGCHECK_CALLBACK_RECORD
, *PKBUGCHECK_CALLBACK_RECORD
;
120 typedef struct _KMUTEX
122 DISPATCHER_HEADER Header
;
123 LIST_ENTRY MutantListEntry
;
124 struct _KTHREAD
* OwnerThread
;
127 } KMUTEX
, *PKMUTEX
, KMUTANT
, *PKMUTANT
;
129 #include <pshpack1.h>
131 typedef struct _KSEMAPHORE
133 DISPATCHER_HEADER Header
;
135 } KSEMAPHORE
, *PKSEMAPHORE
;
139 typedef struct _KEVENT
141 DISPATCHER_HEADER Header
;
144 typedef struct _KEVENT_PAIR
150 } KEVENT_PAIR
, *PKEVENT_PAIR
;
155 typedef struct _KSPIN_LOCK_QUEUE
{
156 struct _KSPIN_LOCK_QUEUE
* volatile Next
;
157 PKSPIN_LOCK
volatile Lock
;
158 } KSPIN_LOCK_QUEUE
, *PKSPIN_LOCK_QUEUE
;
160 typedef struct _KLOCK_QUEUE_HANDLE
{
161 KSPIN_LOCK_QUEUE LockQueue
;
163 } KLOCK_QUEUE_HANDLE
, *PKLOCK_QUEUE_HANDLE
;
165 typedef struct _KWAIT_BLOCK
167 * PURPOSE: Object describing the wait a thread is currently performing
170 LIST_ENTRY WaitListEntry
;
171 struct _KTHREAD
* Thread
;
172 struct _DISPATCHER_HEADER
*Object
;
173 struct _KWAIT_BLOCK
* NextWaitBlock
;
176 } KWAIT_BLOCK
, *PKWAIT_BLOCK
;
179 * PURPOSE: Defines a delayed procedure call routine
181 * Dpc = The associated DPC object
182 * DeferredContext = Driver defined context for the DPC
183 * SystemArgument[1-2] = Undocumented.
186 typedef VOID STDCALL_FUNC
187 (*PKDEFERRED_ROUTINE
)(struct _KDPC
* Dpc
,
188 PVOID DeferredContext
,
189 PVOID SystemArgument1
,
190 PVOID SystemArgument2
);
193 * PURPOSE: Defines a delayed procedure call object
195 #include <pshpack1.h>
202 LIST_ENTRY DpcListEntry
;
203 PKDEFERRED_ROUTINE DeferredRoutine
;
204 PVOID DeferredContext
;
205 PVOID SystemArgument1
;
206 PVOID SystemArgument2
;
213 typedef struct _KDEVICE_QUEUE_ENTRY
215 LIST_ENTRY DeviceListEntry
;
218 } KDEVICE_QUEUE_ENTRY
, *PKDEVICE_QUEUE_ENTRY
;
220 typedef struct _WAIT_CONTEXT_BLOCK
222 KDEVICE_QUEUE_ENTRY WaitQueueEntry
;
224 * XXX THIS IS WRONG XXX
226 * Our headers have enough circular dependancies that
227 * I can't figure out, given 5 minutes of testing, what
228 * order to include them in to get PDRIVER_CONTROL to be
229 * defined here. The proper definition of the next item
232 * PDRIVER_CONTROL DeviceRoutine;
234 * but instead we use PVOID until headers are fixed.
238 ULONG NumberOfMapRegisters
;
241 PKDPC BufferChainingDpc
;
242 } WAIT_CONTEXT_BLOCK
, *PWAIT_CONTEXT_BLOCK
;
244 typedef enum _KBUGCHECK_CALLBACK_REASON
{
247 KbCallbackSecondaryDumpData
,
249 } KBUGCHECK_CALLBACK_REASON
;
253 (*PKBUGCHECK_REASON_CALLBACK_ROUTINE
) (
254 IN KBUGCHECK_CALLBACK_REASON Reason
,
255 IN PVOID Record
, // This should be struct _KBUGCHECK_REASON_CALLBACK_RECORD* but minggw doesn't want to allow that...
256 IN OUT PVOID ReasonSpecificData
,
257 IN ULONG ReasonSpecificDataLength
260 typedef struct _KBUGCHECK_REASON_CALLBACK_RECORD
{
262 PKBUGCHECK_REASON_CALLBACK_ROUTINE CallbackRoutine
;
265 KBUGCHECK_CALLBACK_REASON Reason
;
267 } KBUGCHECK_REASON_CALLBACK_RECORD
, *PKBUGCHECK_REASON_CALLBACK_RECORD
;
271 typedef BOOLEAN STDCALL_FUNC
272 (*PKSERVICE_ROUTINE
)(struct _KINTERRUPT
* Interrupt
,
273 PVOID ServiceContext
);
274 typedef struct _EPROCESS EPROCESS
, *PEPROCESS
;
276 typedef HANDLE HSEMAPHORE
;
278 typedef HANDLE HDRVOBJ
;
280 typedef LONG FLOAT_LONG
, *PFLOAT_LONG
;
284 typedef LONG FIX
; /* fixed-point number */
286 typedef struct _M128
{
291 typedef struct _KEXCEPTION_FRAME
{
297 ULONG64 InitialStack
;
309 ULONG64 CallbackStack
;
310 ULONG64 OutputBuffer
;
311 ULONG64 OutputLength
;
312 UCHAR ExceptionRecord
[64];
323 } KEXCEPTION_FRAME
, *PKEXCEPTION_FRAME
;
325 /* copied from W32API */
326 typedef struct _KFLOATING_SAVE
336 } KFLOATING_SAVE
, *PKFLOATING_SAVE
;
338 #endif /* __INCLUDE_DDK_KETYPES_H */