2003-06-07 Casper S. Hornstrup <chorns@users.sourceforge.net>
[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 #ifdef __NTOSKRNL__
7 extern CHAR EXPORTED KeNumberProcessors;
8 extern LOADER_PARAMETER_BLOCK EXPORTED KeLoaderBlock;
9 extern ULONG EXPORTED KeDcacheFlushCount;
10 extern ULONG EXPORTED KeIcacheFlushCount;
11 #else
12 extern CHAR IMPORTED KeNumberProcessors;
13 extern LOADER_PARAMETER_BLOCK IMPORTED KeLoaderBlock;
14 extern ULONG EXPORTED KeDcacheFlushCount;
15 extern ULONG EXPORTED KeIcacheFlushCount;
16 #endif
17
18
19
20 struct _KMUTANT;
21
22 typedef LONG KPRIORITY;
23
24 typedef VOID STDCALL_FUNC
25 (*PKBUGCHECK_CALLBACK_ROUTINE)(PVOID Buffer, ULONG Length);
26
27 typedef BOOLEAN STDCALL_FUNC
28 (*PKSYNCHRONIZE_ROUTINE)(PVOID SynchronizeContext);
29
30 struct _KAPC;
31
32 typedef VOID STDCALL_FUNC
33 (*PKNORMAL_ROUTINE)(PVOID NormalContext,
34 PVOID SystemArgument1,
35 PVOID SystemArgument2);
36
37 typedef VOID STDCALL_FUNC
38 (*PKKERNEL_ROUTINE)(struct _KAPC* Apc,
39 PKNORMAL_ROUTINE* NormalRoutine,
40 PVOID* NormalContext,
41 PVOID* SystemArgument1,
42 PVOID* SystemArgument2);
43
44 typedef VOID STDCALL_FUNC
45 (*PKRUNDOWN_ROUTINE)(struct _KAPC* Apc);
46
47 struct _DISPATCHER_HEADER;
48
49 typedef struct _KWAIT_BLOCK
50 /*
51 * PURPOSE: Object describing the wait a thread is currently performing
52 */
53 {
54 LIST_ENTRY WaitListEntry;
55 struct _KTHREAD* Thread;
56 struct _DISPATCHER_HEADER *Object;
57 struct _KWAIT_BLOCK* NextWaitBlock;
58 USHORT WaitKey;
59 USHORT WaitType;
60 } KWAIT_BLOCK, *PKWAIT_BLOCK;
61
62 typedef struct _DISPATCHER_HEADER
63 {
64 UCHAR Type;
65 UCHAR Absolute;
66 UCHAR Size;
67 UCHAR Inserted;
68 LONG SignalState;
69 LIST_ENTRY WaitListHead;
70 } __attribute__((packed)) DISPATCHER_HEADER, *PDISPATCHER_HEADER;
71
72
73 typedef struct _KQUEUE
74 {
75 DISPATCHER_HEADER Header;
76 LIST_ENTRY EntryListHead;
77 ULONG RunningThreads;
78 ULONG MaximumThreads;
79 LIST_ENTRY ThreadListHead;
80 } KQUEUE, *PKQUEUE;
81
82 struct _KDPC;
83
84 typedef struct _KTIMER
85 {
86 DISPATCHER_HEADER Header;
87 ULARGE_INTEGER DueTime;
88 LIST_ENTRY TimerListEntry;
89 struct _KDPC* Dpc;
90 LONG Period;
91 } KTIMER, *PKTIMER;
92
93 typedef ULONG_PTR KSPIN_LOCK, *PKSPIN_LOCK;
94
95 typedef struct _KDEVICE_QUEUE
96 {
97 CSHORT Type;
98 CSHORT Size;
99 LIST_ENTRY DeviceListHead;
100 KSPIN_LOCK Lock;
101 BOOLEAN Busy;
102 } KDEVICE_QUEUE, *PKDEVICE_QUEUE;
103
104
105 typedef struct _KAPC
106 {
107 CSHORT Type;
108 CSHORT Size;
109 ULONG Spare0;
110 struct _KTHREAD* Thread;
111 LIST_ENTRY ApcListEntry;
112 PKKERNEL_ROUTINE KernelRoutine;
113 PKRUNDOWN_ROUTINE RundownRoutine;
114 PKNORMAL_ROUTINE NormalRoutine;
115 PVOID NormalContext;
116 PVOID SystemArgument1;
117 PVOID SystemArgument2;
118 CCHAR ApcStateIndex;
119 KPROCESSOR_MODE ApcMode;
120 USHORT Inserted;
121 } __attribute__((packed)) KAPC, *PKAPC;
122
123 typedef struct _KBUGCHECK_CALLBACK_RECORD
124 {
125 LIST_ENTRY Entry;
126 PKBUGCHECK_CALLBACK_ROUTINE CallbackRoutine;
127 PVOID Buffer;
128 ULONG Length;
129 PUCHAR Component;
130 ULONG Checksum;
131 UCHAR State;
132 } KBUGCHECK_CALLBACK_RECORD, *PKBUGCHECK_CALLBACK_RECORD;
133
134 typedef struct _KMUTEX
135 {
136 DISPATCHER_HEADER Header;
137 LIST_ENTRY MutantListEntry;
138 struct _KTHREAD* OwnerThread;
139 BOOLEAN Abandoned;
140 UCHAR ApcDisable;
141 } KMUTEX, *PKMUTEX, KMUTANT, *PKMUTANT;
142
143 typedef struct _KSEMAPHORE
144 {
145 DISPATCHER_HEADER Header;
146 LONG Limit;
147 } __attribute__((packed)) KSEMAPHORE, *PKSEMAPHORE;
148
149 typedef struct _KEVENT
150 {
151 DISPATCHER_HEADER Header;
152 } KEVENT, *PKEVENT;
153
154 typedef struct _KEVENT_PAIR
155 {
156 CSHORT Type;
157 CSHORT Size;
158 KEVENT LowEvent;
159 KEVENT HighEvent;
160 } KEVENT_PAIR, *PKEVENT_PAIR;
161
162
163 struct _KDPC;
164
165 /*
166 * PURPOSE: Defines a delayed procedure call routine
167 * NOTE:
168 * Dpc = The associated DPC object
169 * DeferredContext = Driver defined context for the DPC
170 * SystemArgument[1-2] = Undocumented.
171 *
172 */
173 typedef VOID STDCALL_FUNC
174 (*PKDEFERRED_ROUTINE)(struct _KDPC* Dpc,
175 PVOID DeferredContext,
176 PVOID SystemArgument1,
177 PVOID SystemArgument2);
178
179 /*
180 * PURPOSE: Defines a delayed procedure call object
181 */
182 typedef struct _KDPC
183 {
184 SHORT Type;
185 UCHAR Number;
186 UCHAR Importance;
187 LIST_ENTRY DpcListEntry;
188 PKDEFERRED_ROUTINE DeferredRoutine;
189 PVOID DeferredContext;
190 PVOID SystemArgument1;
191 PVOID SystemArgument2;
192 PULONG Lock;
193 } __attribute__((packed)) KDPC, *PKDPC;
194
195
196
197 typedef struct _KDEVICE_QUEUE_ENTRY
198 {
199 LIST_ENTRY DeviceListEntry;
200 ULONG SortKey;
201 BOOLEAN Inserted;
202 } KDEVICE_QUEUE_ENTRY, *PKDEVICE_QUEUE_ENTRY;
203
204 typedef struct _WAIT_CONTEXT_BLOCK
205 {
206 int unknown;
207 } WAIT_CONTEXT_BLOCK, *PWAIT_CONTEXT_BLOCK;
208
209 struct _KINTERRUPT;
210
211 typedef BOOLEAN STDCALL_FUNC
212 (*PKSERVICE_ROUTINE)(struct _KINTERRUPT* Interrupt,
213 PVOID ServiceContext);
214
215 typedef struct _KSYSTEM_TIME
216 {
217 ULONG LowPart;
218 LONG High1Part;
219 LONG High2Part;
220 } KSYSTEM_TIME, *PKSYSTEM_TIME;
221
222 typedef struct _EPROCESS EPROCESS, *PEPROCESS;
223
224 #endif /* __INCLUDE_DDK_KETYPES_H */