Copy wininet to branch
[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 struct _KMUTANT;
9
10 typedef LONG KPRIORITY;
11
12 typedef LONG FLONG;
13
14 typedef VOID STDCALL_FUNC
15 (*PKBUGCHECK_CALLBACK_ROUTINE)(PVOID Buffer, ULONG Length);
16
17 typedef BOOLEAN STDCALL_FUNC
18 (*PKSYNCHRONIZE_ROUTINE)(PVOID SynchronizeContext);
19
20 struct _KAPC;
21
22 typedef VOID STDCALL_FUNC
23 (*PKNORMAL_ROUTINE)(PVOID NormalContext,
24 PVOID SystemArgument1,
25 PVOID SystemArgument2);
26
27 typedef VOID STDCALL_FUNC
28 (*PKKERNEL_ROUTINE)(struct _KAPC* Apc,
29 PKNORMAL_ROUTINE* NormalRoutine,
30 PVOID* NormalContext,
31 PVOID* SystemArgument1,
32 PVOID* SystemArgument2);
33
34 typedef VOID STDCALL_FUNC
35 (*PKRUNDOWN_ROUTINE)(struct _KAPC* Apc);
36
37 struct _DISPATCHER_HEADER;
38
39 typedef enum _KOBJECTS {
40 EventNotificationObject = 0,
41 EventSynchronizationObject = 1,
42 MutantObject = 2,
43 ProcessObject = 3,
44 QueueObject = 4,
45 SemaphoreObject = 5,
46 ThreadObject = 6,
47 GateObject = 7,
48 TimerNotificationObject = 8,
49 TimerSynchronizationObject = 9,
50 Spare2Object = 10,
51 Spare3Object = 11,
52 Spare4Object = 12,
53 Spare5Object = 13,
54 Spare6Object = 14,
55 Spare7Object = 15,
56 Spare8Object = 16,
57 Spare9Object = 17,
58 ApcObject = 18,
59 DpcObject = 19,
60 DeviceQueueObject = 20,
61 EventPairObject = 21,
62 InterruptObject = 22,
63 ProfileObject = 23,
64 ThreadedDpcObject = 24,
65 MaximumKernelObject = 25
66 } KOBJECTS;
67
68 #include <pshpack1.h>
69
70 typedef struct _DISPATCHER_HEADER
71 {
72 UCHAR Type;
73 UCHAR Absolute;
74 UCHAR Size;
75 UCHAR Inserted;
76 LONG SignalState;
77 LIST_ENTRY WaitListHead;
78 } DISPATCHER_HEADER, *PDISPATCHER_HEADER;
79
80 #include <poppack.h>
81
82 typedef struct _KQUEUE
83 {
84 DISPATCHER_HEADER Header;
85 LIST_ENTRY EntryListHead;
86 ULONG CurrentCount;
87 ULONG MaximumCount;
88 LIST_ENTRY ThreadListHead;
89 } KQUEUE, *PKQUEUE;
90
91 struct _KDPC;
92
93 typedef struct _KTIMER
94 {
95 DISPATCHER_HEADER Header;
96 ULARGE_INTEGER DueTime;
97 LIST_ENTRY TimerListEntry;
98 struct _KDPC* Dpc;
99 LONG Period;
100 } KTIMER, *PKTIMER;
101
102 typedef ULONG_PTR KSPIN_LOCK, *PKSPIN_LOCK;
103
104 typedef struct _KDEVICE_QUEUE
105 {
106 CSHORT Type;
107 CSHORT Size;
108 LIST_ENTRY DeviceListHead;
109 KSPIN_LOCK Lock;
110 BOOLEAN Busy;
111 } KDEVICE_QUEUE, *PKDEVICE_QUEUE;
112
113 /*
114 * Size of the profile hash table.
115 */
116 #define PROFILE_HASH_TABLE_SIZE (32)
117
118 #include <pshpack2.h>
119
120 typedef struct _KAPC
121 {
122 CSHORT Type;
123 CSHORT Size;
124 ULONG Spare0;
125 struct _KTHREAD* Thread;
126 LIST_ENTRY ApcListEntry;
127 PKKERNEL_ROUTINE KernelRoutine;
128 PKRUNDOWN_ROUTINE RundownRoutine;
129 PKNORMAL_ROUTINE NormalRoutine;
130 PVOID NormalContext;
131 PVOID SystemArgument1;
132 PVOID SystemArgument2;
133 CCHAR ApcStateIndex;
134 KPROCESSOR_MODE ApcMode;
135 BOOLEAN Inserted;
136 } KAPC, *PKAPC;
137
138 #include <poppack.h>
139
140 #ifndef __USE_W32API
141
142 #include <pshpack1.h>
143
144 typedef struct _KAPC_STATE
145 {
146 LIST_ENTRY ApcListHead[2];
147 struct _KPROCESS* Process;
148 UCHAR KernelApcInProgress;
149 UCHAR KernelApcPending;
150 UCHAR UserApcPending;
151 UCHAR Reserved;
152 } KAPC_STATE, *PKAPC_STATE, *__restrict PRKAPC_STATE;
153
154 #include <poppack.h>
155
156 #endif /* __USE_W32API */
157
158 typedef struct _KBUGCHECK_CALLBACK_RECORD
159 {
160 LIST_ENTRY Entry;
161 PKBUGCHECK_CALLBACK_ROUTINE CallbackRoutine;
162 PVOID Buffer;
163 ULONG Length;
164 PUCHAR Component;
165 ULONG Checksum;
166 UCHAR State;
167 } KBUGCHECK_CALLBACK_RECORD, *PKBUGCHECK_CALLBACK_RECORD;
168
169 typedef struct _KMUTEX
170 {
171 DISPATCHER_HEADER Header;
172 LIST_ENTRY MutantListEntry;
173 struct _KTHREAD* OwnerThread;
174 BOOLEAN Abandoned;
175 UCHAR ApcDisable;
176 } KMUTEX, *PKMUTEX, KMUTANT, *PKMUTANT;
177
178 #include <pshpack1.h>
179
180 typedef struct _KSEMAPHORE
181 {
182 DISPATCHER_HEADER Header;
183 LONG Limit;
184 } KSEMAPHORE, *PKSEMAPHORE;
185
186 #include <poppack.h>
187
188 typedef struct _KEVENT
189 {
190 DISPATCHER_HEADER Header;
191 } KEVENT, *PKEVENT;
192
193 typedef struct _KEVENT_PAIR
194 {
195 CSHORT Type;
196 CSHORT Size;
197 KEVENT LowEvent;
198 KEVENT HighEvent;
199 } KEVENT_PAIR, *PKEVENT_PAIR;
200
201
202 struct _KDPC;
203
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;
208
209 typedef struct _KLOCK_QUEUE_HANDLE {
210 KSPIN_LOCK_QUEUE LockQueue;
211 KIRQL OldIrql;
212 } KLOCK_QUEUE_HANDLE, *PKLOCK_QUEUE_HANDLE;
213
214 typedef struct _KWAIT_BLOCK
215 /*
216 * PURPOSE: Object describing the wait a thread is currently performing
217 */
218 {
219 LIST_ENTRY WaitListEntry;
220 struct _KTHREAD* Thread;
221 struct _DISPATCHER_HEADER *Object;
222 struct _KWAIT_BLOCK* NextWaitBlock;
223 USHORT WaitKey;
224 USHORT WaitType;
225 } KWAIT_BLOCK, *PKWAIT_BLOCK;
226
227 /*
228 * PURPOSE: Defines a delayed procedure call routine
229 * NOTE:
230 * Dpc = The associated DPC object
231 * DeferredContext = Driver defined context for the DPC
232 * SystemArgument[1-2] = Undocumented.
233 *
234 */
235 typedef VOID STDCALL_FUNC
236 (*PKDEFERRED_ROUTINE)(struct _KDPC* Dpc,
237 PVOID DeferredContext,
238 PVOID SystemArgument1,
239 PVOID SystemArgument2);
240
241 /*
242 * PURPOSE: Defines a delayed procedure call object
243 */
244 #include <pshpack1.h>
245
246 typedef struct _KDPC
247 {
248 SHORT Type;
249 UCHAR Number;
250 UCHAR Importance;
251 LIST_ENTRY DpcListEntry;
252 PKDEFERRED_ROUTINE DeferredRoutine;
253 PVOID DeferredContext;
254 PVOID SystemArgument1;
255 PVOID SystemArgument2;
256 PVOID DpcData;
257 } KDPC, *PKDPC;
258
259 #include <poppack.h>
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 struct _KDEVICE_QUEUE_ENTRY
269 {
270 LIST_ENTRY DeviceListEntry;
271 ULONG SortKey;
272 BOOLEAN Inserted;
273 } KDEVICE_QUEUE_ENTRY, *PKDEVICE_QUEUE_ENTRY;
274
275 typedef struct _WAIT_CONTEXT_BLOCK
276 {
277 KDEVICE_QUEUE_ENTRY WaitQueueEntry;
278 /*
279 * XXX THIS IS WRONG XXX
280 *
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
285 * is:
286 *
287 * PDRIVER_CONTROL DeviceRoutine;
288 *
289 * but instead we use PVOID until headers are fixed.
290 */
291 PVOID DeviceRoutine;
292 PVOID DeviceContext;
293 ULONG NumberOfMapRegisters;
294 PVOID DeviceObject;
295 PVOID CurrentIrp;
296 PKDPC BufferChainingDpc;
297 } WAIT_CONTEXT_BLOCK, *PWAIT_CONTEXT_BLOCK;
298
299 typedef enum _KBUGCHECK_CALLBACK_REASON {
300 KbCallbackInvalid,
301 KbCallbackReserved1,
302 KbCallbackSecondaryDumpData,
303 KbCallbackDumpIo,
304 } KBUGCHECK_CALLBACK_REASON;
305
306 typedef
307 VOID
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
313 );
314
315 typedef struct _KBUGCHECK_REASON_CALLBACK_RECORD {
316 LIST_ENTRY Entry;
317 PKBUGCHECK_REASON_CALLBACK_ROUTINE CallbackRoutine;
318 PUCHAR Component;
319 ULONG_PTR Checksum;
320 KBUGCHECK_CALLBACK_REASON Reason;
321 UCHAR State;
322 } KBUGCHECK_REASON_CALLBACK_RECORD, *PKBUGCHECK_REASON_CALLBACK_RECORD;
323
324 struct _KINTERRUPT;
325
326 typedef BOOLEAN STDCALL_FUNC
327 (*PKSERVICE_ROUTINE)(struct _KINTERRUPT* Interrupt,
328 PVOID ServiceContext);
329 typedef struct _EPROCESS EPROCESS, *PEPROCESS;
330
331 typedef HANDLE HSEMAPHORE;
332
333 typedef HANDLE HDRVOBJ;
334
335 typedef LONG FLOAT_LONG, *PFLOAT_LONG;
336
337 typedef LONG FLOATL;
338
339 typedef LONG FIX; /* fixed-point number */
340
341 typedef struct _M128 {
342 ULONGLONG Low;
343 LONGLONG High;
344 } M128, *PM128;
345
346 typedef struct _KEXCEPTION_FRAME {
347 ULONG64 P1Home;
348 ULONG64 P2Home;
349 ULONG64 P3Home;
350 ULONG64 P4Home;
351 ULONG64 P5;
352 ULONG64 InitialStack;
353 M128 Xmm6;
354 M128 Xmm7;
355 M128 Xmm8;
356 M128 Xmm9;
357 M128 Xmm10;
358 M128 Xmm11;
359 M128 Xmm12;
360 M128 Xmm13;
361 M128 Xmm14;
362 M128 Xmm15;
363 ULONG64 TrapFrame;
364 ULONG64 CallbackStack;
365 ULONG64 OutputBuffer;
366 ULONG64 OutputLength;
367 UCHAR ExceptionRecord[64];
368 ULONG64 Fill1;
369 ULONG64 Rbp;
370 ULONG64 Rbx;
371 ULONG64 Rdi;
372 ULONG64 Rsi;
373 ULONG64 R12;
374 ULONG64 R13;
375 ULONG64 R14;
376 ULONG64 R15;
377 ULONG64 Return;
378 } KEXCEPTION_FRAME, *PKEXCEPTION_FRAME;
379
380 /* copied from W32API */
381 typedef struct _KFLOATING_SAVE
382 {
383 ULONG ControlWord;
384 ULONG StatusWord;
385 ULONG ErrorOffset;
386 ULONG ErrorSelector;
387 ULONG DataOffset;
388 ULONG DataSelector;
389 ULONG Cr0NpxState;
390 ULONG Spare1;
391 } KFLOATING_SAVE, *PKFLOATING_SAVE;
392
393 #endif /* __INCLUDE_DDK_KETYPES_H */