Preparations for checked/free like builds (CPRINT == DbgPrint when DBG is defined).
[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 #define MB_FLAGS_MEM_INFO (0x1)
7 #define MB_FLAGS_BOOT_DEVICE (0x2)
8 #define MB_FLAGS_COMMAND_LINE (0x4)
9 #define MB_FLAGS_MODULE_INFO (0x8)
10 #define MB_FLAGS_AOUT_SYMS (0x10)
11 #define MB_FLAGS_ELF_SYMS (0x20)
12 #define MB_FLAGS_MMAP_INFO (0x40)
13 #define MB_FLAGS_DRIVES_INFO (0x80)
14 #define MB_FLAGS_CONFIG_TABLE (0x100)
15 #define MB_FLAGS_BOOT_LOADER_NAME (0x200)
16 #define MB_FLAGS_APM_TABLE (0x400)
17 #define MB_FLAGS_GRAPHICS_TABLE (0x800)
18
19 typedef struct _LOADER_MODULE
20 {
21 ULONG ModStart;
22 ULONG ModEnd;
23 ULONG String;
24 ULONG Reserved;
25 } LOADER_MODULE, *PLOADER_MODULE;
26
27 typedef struct _ADDRESS_RANGE
28 {
29 ULONG BaseAddrLow;
30 ULONG BaseAddrHigh;
31 ULONG LengthLow;
32 ULONG LengthHigh;
33 ULONG Type;
34 } ADDRESS_RANGE, *PADDRESS_RANGE;
35
36 typedef struct _LOADER_PARAMETER_BLOCK
37 {
38 ULONG Flags;
39 ULONG MemLower;
40 ULONG MemHigher;
41 ULONG BootDevice;
42 ULONG CommandLine;
43 ULONG ModsCount;
44 ULONG ModsAddr;
45 UCHAR Syms[12];
46 ULONG MmapLength;
47 ULONG MmapAddr;
48 ULONG DrivesCount;
49 ULONG DrivesAddr;
50 ULONG ConfigTable;
51 ULONG BootLoaderName;
52 } LOADER_PARAMETER_BLOCK, *PLOADER_PARAMETER_BLOCK;
53
54 #ifdef __NTOSKRNL__
55 extern CHAR EXPORTED KeNumberProcessors;
56 extern LOADER_PARAMETER_BLOCK EXPORTED KeLoaderBlock;
57 #else
58 extern CHAR IMPORTED KeNumberProcessors;
59 extern LOADER_PARAMETER_BLOCK IMPORTED KeLoaderBlock;
60 #endif
61
62
63 struct _KMUTANT;
64
65 typedef LONG KPRIORITY;
66
67 typedef VOID (*PKBUGCHECK_CALLBACK_ROUTINE)(PVOID Buffer, ULONG Length);
68 typedef BOOLEAN (*PKSYNCHRONIZE_ROUTINE)(PVOID SynchronizeContext);
69
70 struct _KAPC;
71
72 typedef VOID (*PKNORMAL_ROUTINE)(PVOID NormalContext,
73 PVOID SystemArgument1,
74 PVOID SystemArgument2);
75 typedef VOID (*PKKERNEL_ROUTINE)(struct _KAPC* Apc,
76 PKNORMAL_ROUTINE* NormalRoutine,
77 PVOID* NormalContext,
78 PVOID* SystemArgument1,
79 PVOID* SystemArgument2);
80
81 typedef VOID (*PKRUNDOWN_ROUTINE)(struct _KAPC* Apc);
82
83 struct _DISPATCHER_HEADER;
84
85 typedef struct _KWAIT_BLOCK
86 /*
87 * PURPOSE: Object describing the wait a thread is currently performing
88 */
89 {
90 LIST_ENTRY WaitListEntry;
91 struct _KTHREAD* Thread;
92 struct _DISPATCHER_HEADER *Object;
93 struct _KWAIT_BLOCK* NextWaitBlock;
94 USHORT WaitKey;
95 USHORT WaitType;
96 } KWAIT_BLOCK, *PKWAIT_BLOCK;
97
98 typedef struct _DISPATCHER_HEADER
99 {
100 UCHAR Type;
101 UCHAR Absolute;
102 UCHAR Size;
103 UCHAR Inserted;
104 LONG SignalState;
105 LIST_ENTRY WaitListHead;
106 } __attribute__((packed)) DISPATCHER_HEADER;
107
108
109 typedef struct _KQUEUE
110 {
111 DISPATCHER_HEADER Header;
112 LIST_ENTRY EntryListHead;
113 ULONG CurrentCount;
114 ULONG MaximumCount;
115 LIST_ENTRY ThreadListEntry;
116 } KQUEUE, *PKQUEUE;
117
118 struct _KDPC;
119
120 typedef struct _KTIMER
121 {
122 DISPATCHER_HEADER Header;
123 ULARGE_INTEGER DueTime;
124 LIST_ENTRY TimerListEntry;
125 struct _KDPC* Dpc;
126 LONG Period;
127 } KTIMER, *PKTIMER;
128
129 struct _KSPIN_LOCK;
130
131 typedef struct _KSPIN_LOCK
132 {
133 ULONG Lock;
134 } KSPIN_LOCK, *PKSPIN_LOCK;
135
136 typedef struct _KDEVICE_QUEUE
137 {
138 LIST_ENTRY ListHead;
139 BOOLEAN Busy;
140 KSPIN_LOCK Lock;
141 } KDEVICE_QUEUE, *PKDEVICE_QUEUE;
142
143
144 typedef struct _KAPC
145 {
146 CSHORT Type;
147 CSHORT Size;
148 ULONG Spare0;
149 struct _KTHREAD* Thread;
150 LIST_ENTRY ApcListEntry;
151 PKKERNEL_ROUTINE KernelRoutine;
152 PKRUNDOWN_ROUTINE RundownRoutine;
153 PKNORMAL_ROUTINE NormalRoutine;
154 PVOID NormalContext;
155 PVOID SystemArgument1;
156 PVOID SystemArgument2;
157 CCHAR ApcStateIndex;
158 KPROCESSOR_MODE ApcMode;
159 USHORT Inserted;
160 } __attribute__((packed)) KAPC, *PKAPC;
161
162 typedef struct _KBUGCHECK_CALLBACK_RECORD
163 {
164 LIST_ENTRY Entry;
165 PKBUGCHECK_CALLBACK_ROUTINE CallbackRoutine;
166 PVOID Buffer;
167 ULONG Length;
168 PUCHAR Component;
169 ULONG Checksum;
170 UCHAR State;
171 } KBUGCHECK_CALLBACK_RECORD, *PKBUGCHECK_CALLBACK_RECORD;
172
173 typedef struct _KMUTEX
174 {
175 DISPATCHER_HEADER Header;
176 LIST_ENTRY MutantListEntry;
177 struct _KTHREAD* OwnerThread;
178 BOOLEAN Abandoned;
179 UCHAR ApcDisable;
180 } KMUTEX, *PKMUTEX, KMUTANT, *PKMUTANT;
181
182 typedef struct _KSEMAPHORE
183 {
184 DISPATCHER_HEADER Header;
185 LONG Limit;
186 } __attribute__((packed)) KSEMAPHORE, *PKSEMAPHORE;
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 /*
205 * PURPOSE: Defines a delayed procedure call routine
206 * NOTE:
207 * Dpc = The associated DPC object
208 * DeferredContext = Driver defined context for the DPC
209 * SystemArgument[1-2] = Undocumented.
210 *
211 */
212 typedef VOID (*PKDEFERRED_ROUTINE)(struct _KDPC* Dpc, PVOID DeferredContext,
213 PVOID SystemArgument1, PVOID SystemArgument2);
214
215 /*
216 * PURPOSE: Defines a delayed procedure call object
217 */
218 typedef struct _KDPC
219 {
220 SHORT Type;
221 UCHAR Number;
222 UCHAR Importance;
223 LIST_ENTRY DpcListEntry;
224 PKDEFERRED_ROUTINE DeferredRoutine;
225 PVOID DeferredContext;
226 PVOID SystemArgument1;
227 PVOID SystemArgument2;
228 PULONG Lock;
229 } __attribute__((packed)) KDPC, *PKDPC;
230
231
232
233 typedef struct _KDEVICE_QUEUE_ENTRY
234 {
235 LIST_ENTRY Entry;
236 ULONG Key;
237 BOOLEAN Inserted;
238 } KDEVICE_QUEUE_ENTRY, *PKDEVICE_QUEUE_ENTRY;
239
240 typedef struct _WAIT_CONTEXT_BLOCK
241 {
242 } WAIT_CONTEXT_BLOCK, *PWAIT_CONTEXT_BLOCK;
243
244 struct _KINTERRUPT;
245
246 typedef BOOLEAN (*PKSERVICE_ROUTINE)(struct _KINTERRUPT* Interrupt,
247 PVOID ServiceContext);
248
249 typedef struct _KINTERRUPT
250 {
251 ULONG Vector;
252 KAFFINITY ProcessorEnableMask;
253 PKSPIN_LOCK IrqLock;
254 BOOLEAN Shareable;
255 BOOLEAN FloatingSave;
256 PKSERVICE_ROUTINE ServiceRoutine;
257 PVOID ServiceContext;
258 LIST_ENTRY Entry;
259 KIRQL SynchLevel;
260 } KINTERRUPT, *PKINTERRUPT;
261
262 typedef struct _KSYSTEM_TIME
263 {
264 ULONG LowPart;
265 LONG High1Part;
266 LONG High2Part;
267 } KSYSTEM_TIME, *PKSYSTEM_TIME;
268
269 typedef struct _EPROCESS EPROCESS, *PEPROCESS;
270
271 #endif /* __INCLUDE_DDK_KETYPES_H */