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