1 /* KERNEL TYPES **************************************************************/
3 #ifndef __INCLUDE_DDK_KETYPES_H
4 #define __INCLUDE_DDK_KETYPES_H
6 /* include ntos/ketypes.h here? */
10 # define RESTRICTED_POINTER __restrict
14 typedef LONG KPRIORITY
;
19 typedef VOID STDCALL_FUNC
20 (*PKBUGCHECK_CALLBACK_ROUTINE
)(PVOID Buffer
, ULONG Length
);
22 typedef BOOLEAN STDCALL_FUNC
23 (*PKSYNCHRONIZE_ROUTINE
)(PVOID SynchronizeContext
);
27 typedef VOID STDCALL_FUNC
28 (*PKNORMAL_ROUTINE
)(PVOID NormalContext
,
29 PVOID SystemArgument1
,
30 PVOID SystemArgument2
);
32 typedef VOID STDCALL_FUNC
33 (*PKKERNEL_ROUTINE
)(struct _KAPC
* Apc
,
34 PKNORMAL_ROUTINE
* NormalRoutine
,
36 PVOID
* SystemArgument1
,
37 PVOID
* SystemArgument2
);
39 typedef VOID STDCALL_FUNC
40 (*PKRUNDOWN_ROUTINE
)(struct _KAPC
* Apc
);
51 typedef struct _DISPATCHER_HEADER
66 LIST_ENTRY WaitListHead
;
71 typedef struct _KQUEUE
73 DISPATCHER_HEADER Header
;
74 LIST_ENTRY EntryListHead
;
77 LIST_ENTRY ThreadListHead
;
78 } KQUEUE
, *PKQUEUE
, *RESTRICTED_POINTER PRKQUEUE
;
82 DISPATCHER_HEADER Header
;
83 } KGATE
, *PKGATE
, *RESTRICTED_POINTER PRKGATE
;
87 typedef struct _KTIMER
89 DISPATCHER_HEADER Header
;
90 ULARGE_INTEGER DueTime
;
91 LIST_ENTRY TimerListEntry
;
94 } KTIMER
, *PKTIMER
, *RESTRICTED_POINTER PRKTIMER
;
96 typedef struct _KMUTANT
98 DISPATCHER_HEADER Header
;
99 LIST_ENTRY MutantListEntry
;
100 struct _KTHREAD
*RESTRICTED_POINTER OwnerThread
;
103 } KMUTANT
, *PKMUTANT
, *RESTRICTED_POINTER PRKMUTANT
, KMUTEX
, *PKMUTEX
, *RESTRICTED_POINTER PRKMUTEX
;
105 typedef struct _KGUARDED_MUTEX
108 struct _KTHREAD
* Owner
;
113 SHORT KernelApcDisable
;
114 SHORT SpecialApcDisable
;
116 ULONG CombinedApcDisable
;
118 } KGUARDED_MUTEX
, *PKGUARDED_MUTEX
;
120 typedef struct _KSEMAPHORE
122 DISPATCHER_HEADER Header
;
124 } KSEMAPHORE
, *PKSEMAPHORE
, *RESTRICTED_POINTER PRKSEMAPHORE
;
126 typedef struct _KEVENT
128 DISPATCHER_HEADER Header
;
129 } KEVENT
, *PKEVENT
, *RESTRICTED_POINTER PRKEVENT
;
131 typedef struct _KEVENT_PAIR
137 } KEVENT_PAIR
, *PKEVENT_PAIR
;
139 typedef ULONG_PTR KSPIN_LOCK
, *PKSPIN_LOCK
;
141 typedef struct _KDEVICE_QUEUE
145 LIST_ENTRY DeviceListHead
;
148 } KDEVICE_QUEUE
, *PKDEVICE_QUEUE
, *RESTRICTED_POINTER PRKDEVICE_QUEUE
;
150 typedef struct _KDEVICE_QUEUE_ENTRY
152 LIST_ENTRY DeviceListEntry
;
155 } KDEVICE_QUEUE_ENTRY
, *PKDEVICE_QUEUE_ENTRY
, *RESTRICTED_POINTER PRKDEVICE_QUEUE_ENTRY
;
158 * Size of the profile hash table.
160 #define PROFILE_HASH_TABLE_SIZE (32)
162 #include <pshpack2.h>
169 struct _KTHREAD
* Thread
;
170 LIST_ENTRY ApcListEntry
;
171 PKKERNEL_ROUTINE KernelRoutine
;
172 PKRUNDOWN_ROUTINE RundownRoutine
;
173 PKNORMAL_ROUTINE NormalRoutine
;
175 PVOID SystemArgument1
;
176 PVOID SystemArgument2
;
178 KPROCESSOR_MODE ApcMode
;
180 } KAPC
, *PKAPC
, *RESTRICTED_POINTER PRKAPC
;
185 typedef struct _KAPC_STATE
187 LIST_ENTRY ApcListHead
[MaximumMode
];
188 struct _KPROCESS
*Process
;
189 BOOLEAN KernelApcInProgress
;
190 BOOLEAN KernelApcPending
;
191 BOOLEAN UserApcPending
;
192 } KAPC_STATE
, *PKAPC_STATE
, *RESTRICTED_POINTER PRKAPC_STATE
;
194 #endif /* __USE_W32API */
196 typedef struct _KBUGCHECK_CALLBACK_RECORD
199 PKBUGCHECK_CALLBACK_ROUTINE CallbackRoutine
;
205 } KBUGCHECK_CALLBACK_RECORD
, *PKBUGCHECK_CALLBACK_RECORD
;
209 typedef struct _KSPIN_LOCK_QUEUE
{
210 struct _KSPIN_LOCK_QUEUE
* volatile Next
;
211 PKSPIN_LOCK
volatile Lock
;
212 } KSPIN_LOCK_QUEUE
, *PKSPIN_LOCK_QUEUE
;
214 typedef struct _KLOCK_QUEUE_HANDLE
{
215 KSPIN_LOCK_QUEUE LockQueue
;
217 } KLOCK_QUEUE_HANDLE
, *PKLOCK_QUEUE_HANDLE
;
219 typedef struct _KWAIT_BLOCK
221 LIST_ENTRY WaitListEntry
;
222 struct _KTHREAD
*RESTRICTED_POINTER Thread
;
224 struct _KWAIT_BLOCK
*RESTRICTED_POINTER NextWaitBlock
;
227 } KWAIT_BLOCK
, *PKWAIT_BLOCK
, *RESTRICTED_POINTER PRKWAIT_BLOCK
;
230 * PURPOSE: Defines a delayed procedure call routine
232 * Dpc = The associated DPC object
233 * DeferredContext = Driver defined context for the DPC
234 * SystemArgument[1-2] = Undocumented.
237 typedef VOID STDCALL_FUNC
238 (*PKDEFERRED_ROUTINE
)(struct _KDPC
* Dpc
,
239 PVOID DeferredContext
,
240 PVOID SystemArgument1
,
241 PVOID SystemArgument2
);
244 #define DPC_THREADED 1
246 * PURPOSE: Defines a delayed procedure call object
253 LIST_ENTRY DpcListEntry
;
254 PKDEFERRED_ROUTINE DeferredRoutine
;
255 PVOID DeferredContext
;
256 PVOID SystemArgument1
;
257 PVOID SystemArgument2
;
261 typedef struct _KDPC_DATA
{
262 LIST_ENTRY DpcListHead
;
266 } KDPC_DATA
, *PKDPC_DATA
;
268 typedef enum _KBUGCHECK_CALLBACK_REASON
{
271 KbCallbackSecondaryDumpData
,
273 } KBUGCHECK_CALLBACK_REASON
;
277 (*PKBUGCHECK_REASON_CALLBACK_ROUTINE
) (
278 IN KBUGCHECK_CALLBACK_REASON Reason
,
279 IN PVOID Record
, // This should be struct _KBUGCHECK_REASON_CALLBACK_RECORD* but minggw doesn't want to allow that...
280 IN OUT PVOID ReasonSpecificData
,
281 IN ULONG ReasonSpecificDataLength
284 typedef struct _KBUGCHECK_REASON_CALLBACK_RECORD
{
286 PKBUGCHECK_REASON_CALLBACK_ROUTINE CallbackRoutine
;
289 KBUGCHECK_CALLBACK_REASON Reason
;
291 } KBUGCHECK_REASON_CALLBACK_RECORD
, *PKBUGCHECK_REASON_CALLBACK_RECORD
;
295 typedef BOOLEAN STDCALL_FUNC
296 (*PKSERVICE_ROUTINE
)(struct _KINTERRUPT
* Interrupt
,
297 PVOID ServiceContext
);
298 typedef struct _EPROCESS EPROCESS
, *PEPROCESS
;
300 typedef HANDLE HSEMAPHORE
;
302 typedef HANDLE HDRVOBJ
;
304 typedef LONG FLOAT_LONG
, *PFLOAT_LONG
;
308 typedef LONG FIX
; /* fixed-point number */
310 /* copied from W32API */
311 typedef struct _KFLOATING_SAVE
321 } KFLOATING_SAVE
, *PKFLOATING_SAVE
;
323 #endif /* __INCLUDE_DDK_KETYPES_H */