5087f76b1585a7d2f0380db24aef56878fae7df5
[reactos.git] / reactos / include / ddk / ketypes.h
1 /* KERNEL TYPES **************************************************************/
2
3 #ifndef __INCLUDE_DDK_KETYPES_H
4 #define __INCLUDE_DDK_KETYPES_H
5
6 /* include ntos/ketypes.h here? */
7
8 #include <arc/arc.h>
9
10 # define RESTRICTED_POINTER __restrict
11
12 struct _KMUTANT;
13
14 typedef LONG KPRIORITY;
15
16 typedef LONG FLONG;
17
18
19 typedef VOID STDCALL_FUNC
20 (*PKBUGCHECK_CALLBACK_ROUTINE)(PVOID Buffer, ULONG Length);
21
22 typedef BOOLEAN STDCALL_FUNC
23 (*PKSYNCHRONIZE_ROUTINE)(PVOID SynchronizeContext);
24
25 struct _KAPC;
26
27 typedef VOID STDCALL_FUNC
28 (*PKNORMAL_ROUTINE)(PVOID NormalContext,
29 PVOID SystemArgument1,
30 PVOID SystemArgument2);
31
32 typedef VOID STDCALL_FUNC
33 (*PKKERNEL_ROUTINE)(struct _KAPC* Apc,
34 PKNORMAL_ROUTINE* NormalRoutine,
35 PVOID* NormalContext,
36 PVOID* SystemArgument1,
37 PVOID* SystemArgument2);
38
39 typedef VOID STDCALL_FUNC
40 (*PKRUNDOWN_ROUTINE)(struct _KAPC* Apc);
41
42 typedef enum _MODE
43 {
44 KernelMode,
45 UserMode,
46 MaximumMode
47 } MODE;
48
49 #include <pshpack1.h>
50
51 typedef struct _DISPATCHER_HEADER
52 {
53 union {
54 struct {
55 UCHAR Type;
56 UCHAR Absolute;
57 UCHAR Size;
58 union {
59 UCHAR Inserted;
60 BOOLEAN DebugActive;
61 };
62 };
63 volatile LONG Lock;
64 };
65 LONG SignalState;
66 LIST_ENTRY WaitListHead;
67 } DISPATCHER_HEADER;
68
69 #include <poppack.h>
70
71 typedef struct _KQUEUE
72 {
73 DISPATCHER_HEADER Header;
74 LIST_ENTRY EntryListHead;
75 ULONG CurrentCount;
76 ULONG MaximumCount;
77 LIST_ENTRY ThreadListHead;
78 } KQUEUE, *PKQUEUE, *RESTRICTED_POINTER PRKQUEUE;
79
80 typedef struct _KGATE
81 {
82 DISPATCHER_HEADER Header;
83 } KGATE, *PKGATE, *RESTRICTED_POINTER PRKGATE;
84
85 struct _KDPC;
86
87 typedef struct _KTIMER
88 {
89 DISPATCHER_HEADER Header;
90 ULARGE_INTEGER DueTime;
91 LIST_ENTRY TimerListEntry;
92 struct _KDPC *Dpc;
93 LONG Period;
94 } KTIMER, *PKTIMER, *RESTRICTED_POINTER PRKTIMER;
95
96 typedef struct _KMUTANT
97 {
98 DISPATCHER_HEADER Header;
99 LIST_ENTRY MutantListEntry;
100 struct _KTHREAD *RESTRICTED_POINTER OwnerThread;
101 BOOLEAN Abandoned;
102 UCHAR ApcDisable;
103 } KMUTANT, *PKMUTANT, *RESTRICTED_POINTER PRKMUTANT, KMUTEX, *PKMUTEX, *RESTRICTED_POINTER PRKMUTEX;
104
105 typedef struct _KGUARDED_MUTEX
106 {
107 LONG Count;
108 struct _KTHREAD* Owner;
109 ULONG Contention;
110 KGATE Gate;
111 union {
112 struct {
113 SHORT KernelApcDisable;
114 SHORT SpecialApcDisable;
115 };
116 ULONG CombinedApcDisable;
117 };
118 } KGUARDED_MUTEX, *PKGUARDED_MUTEX;
119
120 typedef struct _KSEMAPHORE
121 {
122 DISPATCHER_HEADER Header;
123 LONG Limit;
124 } KSEMAPHORE, *PKSEMAPHORE, *RESTRICTED_POINTER PRKSEMAPHORE;
125
126 typedef struct _KEVENT
127 {
128 DISPATCHER_HEADER Header;
129 } KEVENT, *PKEVENT, *RESTRICTED_POINTER PRKEVENT;
130
131 typedef struct _KEVENT_PAIR
132 {
133 CSHORT Type;
134 CSHORT Size;
135 KEVENT LowEvent;
136 KEVENT HighEvent;
137 } KEVENT_PAIR, *PKEVENT_PAIR;
138
139 typedef ULONG_PTR KSPIN_LOCK, *PKSPIN_LOCK;
140
141 typedef struct _KDEVICE_QUEUE
142 {
143 CSHORT Type;
144 CSHORT Size;
145 LIST_ENTRY DeviceListHead;
146 KSPIN_LOCK Lock;
147 BOOLEAN Busy;
148 } KDEVICE_QUEUE, *PKDEVICE_QUEUE, *RESTRICTED_POINTER PRKDEVICE_QUEUE;
149
150 typedef struct _KDEVICE_QUEUE_ENTRY
151 {
152 LIST_ENTRY DeviceListEntry;
153 ULONG SortKey;
154 BOOLEAN Inserted;
155 } KDEVICE_QUEUE_ENTRY, *PKDEVICE_QUEUE_ENTRY, *RESTRICTED_POINTER PRKDEVICE_QUEUE_ENTRY;
156
157 /*
158 * Size of the profile hash table.
159 */
160 #define PROFILE_HASH_TABLE_SIZE (32)
161
162 #include <pshpack2.h>
163
164 typedef struct _KAPC
165 {
166 CSHORT Type;
167 CSHORT Size;
168 ULONG Spare0;
169 struct _KTHREAD* Thread;
170 LIST_ENTRY ApcListEntry;
171 PKKERNEL_ROUTINE KernelRoutine;
172 PKRUNDOWN_ROUTINE RundownRoutine;
173 PKNORMAL_ROUTINE NormalRoutine;
174 PVOID NormalContext;
175 PVOID SystemArgument1;
176 PVOID SystemArgument2;
177 CCHAR ApcStateIndex;
178 KPROCESSOR_MODE ApcMode;
179 BOOLEAN Inserted;
180 } KAPC, *PKAPC, *RESTRICTED_POINTER PRKAPC;
181 #include <poppack.h>
182
183 #ifndef __USE_W32API
184
185 typedef struct _KAPC_STATE
186 {
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;
193
194 #endif /* __USE_W32API */
195
196 typedef struct _KBUGCHECK_CALLBACK_RECORD
197 {
198 LIST_ENTRY Entry;
199 PKBUGCHECK_CALLBACK_ROUTINE CallbackRoutine;
200 PVOID Buffer;
201 ULONG Length;
202 PUCHAR Component;
203 ULONG Checksum;
204 UCHAR State;
205 } KBUGCHECK_CALLBACK_RECORD, *PKBUGCHECK_CALLBACK_RECORD;
206
207 struct _KDPC;
208
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;
213
214 typedef struct _KLOCK_QUEUE_HANDLE {
215 KSPIN_LOCK_QUEUE LockQueue;
216 KIRQL OldIrql;
217 } KLOCK_QUEUE_HANDLE, *PKLOCK_QUEUE_HANDLE;
218
219 typedef struct _KWAIT_BLOCK
220 {
221 LIST_ENTRY WaitListEntry;
222 struct _KTHREAD *RESTRICTED_POINTER Thread;
223 PVOID Object;
224 struct _KWAIT_BLOCK *RESTRICTED_POINTER NextWaitBlock;
225 USHORT WaitKey;
226 USHORT WaitType;
227 } KWAIT_BLOCK, *PKWAIT_BLOCK, *RESTRICTED_POINTER PRKWAIT_BLOCK;
228
229 /*
230 * PURPOSE: Defines a delayed procedure call routine
231 * NOTE:
232 * Dpc = The associated DPC object
233 * DeferredContext = Driver defined context for the DPC
234 * SystemArgument[1-2] = Undocumented.
235 *
236 */
237 typedef VOID STDCALL_FUNC
238 (*PKDEFERRED_ROUTINE)(struct _KDPC* Dpc,
239 PVOID DeferredContext,
240 PVOID SystemArgument1,
241 PVOID SystemArgument2);
242
243 #define DPC_NORMAL 0
244 #define DPC_THREADED 1
245 /*
246 * PURPOSE: Defines a delayed procedure call object
247 */
248 typedef struct _KDPC
249 {
250 CSHORT Type;
251 UCHAR Number;
252 UCHAR Importance;
253 LIST_ENTRY DpcListEntry;
254 PKDEFERRED_ROUTINE DeferredRoutine;
255 PVOID DeferredContext;
256 PVOID SystemArgument1;
257 PVOID SystemArgument2;
258 PVOID DpcData;
259 } KDPC, *PKDPC;
260
261 typedef struct _KDPC_DATA {
262 LIST_ENTRY DpcListHead;
263 ULONG DpcLock;
264 ULONG DpcQueueDepth;
265 ULONG DpcCount;
266 } KDPC_DATA, *PKDPC_DATA;
267
268 typedef enum _KBUGCHECK_CALLBACK_REASON {
269 KbCallbackInvalid,
270 KbCallbackReserved1,
271 KbCallbackSecondaryDumpData,
272 KbCallbackDumpIo,
273 } KBUGCHECK_CALLBACK_REASON;
274
275 typedef
276 VOID
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
282 );
283
284 typedef struct _KBUGCHECK_REASON_CALLBACK_RECORD {
285 LIST_ENTRY Entry;
286 PKBUGCHECK_REASON_CALLBACK_ROUTINE CallbackRoutine;
287 PUCHAR Component;
288 ULONG_PTR Checksum;
289 KBUGCHECK_CALLBACK_REASON Reason;
290 UCHAR State;
291 } KBUGCHECK_REASON_CALLBACK_RECORD, *PKBUGCHECK_REASON_CALLBACK_RECORD;
292
293 struct _KINTERRUPT;
294
295 typedef BOOLEAN STDCALL_FUNC
296 (*PKSERVICE_ROUTINE)(struct _KINTERRUPT* Interrupt,
297 PVOID ServiceContext);
298 typedef struct _EPROCESS EPROCESS, *PEPROCESS;
299
300 typedef HANDLE HSEMAPHORE;
301
302 typedef HANDLE HDRVOBJ;
303
304 typedef LONG FLOAT_LONG, *PFLOAT_LONG;
305
306 typedef LONG FLOATL;
307
308 typedef LONG FIX; /* fixed-point number */
309
310 /* copied from W32API */
311 typedef struct _KFLOATING_SAVE
312 {
313 ULONG ControlWord;
314 ULONG StatusWord;
315 ULONG ErrorOffset;
316 ULONG ErrorSelector;
317 ULONG DataOffset;
318 ULONG DataSelector;
319 ULONG Cr0NpxState;
320 ULONG Spare1;
321 } KFLOATING_SAVE, *PKFLOATING_SAVE;
322
323 #endif /* __INCLUDE_DDK_KETYPES_H */