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 typedef struct _KTIMER
95 DISPATCHER_HEADER Header
;
96 ULARGE_INTEGER DueTime
;
97 LIST_ENTRY TimerListEntry
;
102 typedef ULONG_PTR KSPIN_LOCK
, *PKSPIN_LOCK
;
104 typedef struct _KDEVICE_QUEUE
108 LIST_ENTRY DeviceListHead
;
111 } KDEVICE_QUEUE
, *PKDEVICE_QUEUE
;
114 * Size of the profile hash table.
116 #define PROFILE_HASH_TABLE_SIZE (32)
118 #include <pshpack2.h>
125 struct _KTHREAD
* Thread
;
126 LIST_ENTRY ApcListEntry
;
127 PKKERNEL_ROUTINE KernelRoutine
;
128 PKRUNDOWN_ROUTINE RundownRoutine
;
129 PKNORMAL_ROUTINE NormalRoutine
;
131 PVOID SystemArgument1
;
132 PVOID SystemArgument2
;
134 KPROCESSOR_MODE ApcMode
;
142 #include <pshpack1.h>
144 typedef struct _KAPC_STATE
146 LIST_ENTRY ApcListHead
[2];
147 struct _KPROCESS
* Process
;
148 UCHAR KernelApcInProgress
;
149 UCHAR KernelApcPending
;
150 UCHAR UserApcPending
;
152 } KAPC_STATE
, *PKAPC_STATE
, *__restrict PRKAPC_STATE
;
156 #endif /* __USE_W32API */
158 typedef struct _KBUGCHECK_CALLBACK_RECORD
161 PKBUGCHECK_CALLBACK_ROUTINE CallbackRoutine
;
167 } KBUGCHECK_CALLBACK_RECORD
, *PKBUGCHECK_CALLBACK_RECORD
;
169 typedef struct _KMUTEX
171 DISPATCHER_HEADER Header
;
172 LIST_ENTRY MutantListEntry
;
173 struct _KTHREAD
* OwnerThread
;
176 } KMUTEX
, *PKMUTEX
, KMUTANT
, *PKMUTANT
;
178 #include <pshpack1.h>
180 typedef struct _KSEMAPHORE
182 DISPATCHER_HEADER Header
;
184 } KSEMAPHORE
, *PKSEMAPHORE
;
188 typedef struct _KEVENT
190 DISPATCHER_HEADER Header
;
193 typedef struct _KEVENT_PAIR
199 } KEVENT_PAIR
, *PKEVENT_PAIR
;
204 typedef struct _KSPIN_LOCK_QUEUE
{
205 struct _KSPIN_LOCK_QUEUE
* volatile Next
;
206 PKSPIN_LOCK
volatile Lock
;
207 } KSPIN_LOCK_QUEUE
, *PKSPIN_LOCK_QUEUE
;
209 typedef struct _KLOCK_QUEUE_HANDLE
{
210 KSPIN_LOCK_QUEUE LockQueue
;
212 } KLOCK_QUEUE_HANDLE
, *PKLOCK_QUEUE_HANDLE
;
214 typedef struct _KWAIT_BLOCK
216 * PURPOSE: Object describing the wait a thread is currently performing
219 LIST_ENTRY WaitListEntry
;
220 struct _KTHREAD
* Thread
;
221 struct _DISPATCHER_HEADER
*Object
;
222 struct _KWAIT_BLOCK
* NextWaitBlock
;
225 } KWAIT_BLOCK
, *PKWAIT_BLOCK
;
228 * PURPOSE: Defines a delayed procedure call routine
230 * Dpc = The associated DPC object
231 * DeferredContext = Driver defined context for the DPC
232 * SystemArgument[1-2] = Undocumented.
235 typedef VOID STDCALL_FUNC
236 (*PKDEFERRED_ROUTINE
)(struct _KDPC
* Dpc
,
237 PVOID DeferredContext
,
238 PVOID SystemArgument1
,
239 PVOID SystemArgument2
);
242 * PURPOSE: Defines a delayed procedure call object
244 #include <pshpack1.h>
251 LIST_ENTRY DpcListEntry
;
252 PKDEFERRED_ROUTINE DeferredRoutine
;
253 PVOID DeferredContext
;
254 PVOID SystemArgument1
;
255 PVOID SystemArgument2
;
261 typedef struct _KDPC_DATA
{
262 LIST_ENTRY DpcListHead
;
266 } KDPC_DATA
, *PKDPC_DATA
;
268 typedef struct _KDEVICE_QUEUE_ENTRY
270 LIST_ENTRY DeviceListEntry
;
273 } KDEVICE_QUEUE_ENTRY
, *PKDEVICE_QUEUE_ENTRY
;
275 typedef struct _WAIT_CONTEXT_BLOCK
277 KDEVICE_QUEUE_ENTRY WaitQueueEntry
;
279 * XXX THIS IS WRONG XXX
281 * Our headers have enough circular dependancies that
282 * I can't figure out, given 5 minutes of testing, what
283 * order to include them in to get PDRIVER_CONTROL to be
284 * defined here. The proper definition of the next item
287 * PDRIVER_CONTROL DeviceRoutine;
289 * but instead we use PVOID until headers are fixed.
293 ULONG NumberOfMapRegisters
;
296 PKDPC BufferChainingDpc
;
297 } WAIT_CONTEXT_BLOCK
, *PWAIT_CONTEXT_BLOCK
;
299 typedef enum _KBUGCHECK_CALLBACK_REASON
{
302 KbCallbackSecondaryDumpData
,
304 } KBUGCHECK_CALLBACK_REASON
;
308 (*PKBUGCHECK_REASON_CALLBACK_ROUTINE
) (
309 IN KBUGCHECK_CALLBACK_REASON Reason
,
310 IN PVOID Record
, // This should be struct _KBUGCHECK_REASON_CALLBACK_RECORD* but minggw doesn't want to allow that...
311 IN OUT PVOID ReasonSpecificData
,
312 IN ULONG ReasonSpecificDataLength
315 typedef struct _KBUGCHECK_REASON_CALLBACK_RECORD
{
317 PKBUGCHECK_REASON_CALLBACK_ROUTINE CallbackRoutine
;
320 KBUGCHECK_CALLBACK_REASON Reason
;
322 } KBUGCHECK_REASON_CALLBACK_RECORD
, *PKBUGCHECK_REASON_CALLBACK_RECORD
;
326 typedef BOOLEAN STDCALL_FUNC
327 (*PKSERVICE_ROUTINE
)(struct _KINTERRUPT
* Interrupt
,
328 PVOID ServiceContext
);
329 typedef struct _EPROCESS EPROCESS
, *PEPROCESS
;
331 typedef HANDLE HSEMAPHORE
;
333 typedef HANDLE HDRVOBJ
;
335 typedef LONG FLOAT_LONG
, *PFLOAT_LONG
;
339 typedef LONG FIX
; /* fixed-point number */
341 typedef struct _M128
{
346 typedef struct _KEXCEPTION_FRAME
{
352 ULONG64 InitialStack
;
364 ULONG64 CallbackStack
;
365 ULONG64 OutputBuffer
;
366 ULONG64 OutputLength
;
367 UCHAR ExceptionRecord
[64];
378 } KEXCEPTION_FRAME
, *PKEXCEPTION_FRAME
;
380 /* copied from W32API */
381 typedef struct _KFLOATING_SAVE
391 } KFLOATING_SAVE
, *PKFLOATING_SAVE
;
393 #endif /* __INCLUDE_DDK_KETYPES_H */