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