1 /* KERNEL TYPES **************************************************************/
3 #ifndef __INCLUDE_DDK_KETYPES_H
4 #define __INCLUDE_DDK_KETYPES_H
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)
19 typedef struct _LOADER_MODULE
25 } LOADER_MODULE, *PLOADER_MODULE;
27 typedef struct _ADDRESS_RANGE
34 } ADDRESS_RANGE, *PADDRESS_RANGE;
36 typedef struct _LOADER_PARAMETER_BLOCK
52 } LOADER_PARAMETER_BLOCK, *PLOADER_PARAMETER_BLOCK;
55 extern CHAR EXPORTED KeNumberProcessors;
56 extern LOADER_PARAMETER_BLOCK EXPORTED KeLoaderBlock;
57 extern ULONG EXPORTED KeDcacheFlushCount;
58 extern ULONG EXPORTED KeIcacheFlushCount;
60 extern CHAR IMPORTED KeNumberProcessors;
61 extern LOADER_PARAMETER_BLOCK IMPORTED KeLoaderBlock;
62 extern ULONG EXPORTED KeDcacheFlushCount;
63 extern ULONG EXPORTED KeIcacheFlushCount;
70 typedef LONG KPRIORITY;
72 typedef VOID STDCALL_FUNC
73 (*PKBUGCHECK_CALLBACK_ROUTINE)(PVOID Buffer, ULONG Length);
75 typedef BOOLEAN STDCALL_FUNC
76 (*PKSYNCHRONIZE_ROUTINE)(PVOID SynchronizeContext);
80 typedef VOID STDCALL_FUNC
81 (*PKNORMAL_ROUTINE)(PVOID NormalContext,
82 PVOID SystemArgument1,
83 PVOID SystemArgument2);
85 typedef VOID STDCALL_FUNC
86 (*PKKERNEL_ROUTINE)(struct _KAPC* Apc,
87 PKNORMAL_ROUTINE* NormalRoutine,
89 PVOID* SystemArgument1,
90 PVOID* SystemArgument2);
92 typedef VOID STDCALL_FUNC
93 (*PKRUNDOWN_ROUTINE)(struct _KAPC* Apc);
95 struct _DISPATCHER_HEADER;
97 typedef struct _KWAIT_BLOCK
99 * PURPOSE: Object describing the wait a thread is currently performing
102 LIST_ENTRY WaitListEntry;
103 struct _KTHREAD* Thread;
104 struct _DISPATCHER_HEADER *Object;
105 struct _KWAIT_BLOCK* NextWaitBlock;
108 } KWAIT_BLOCK, *PKWAIT_BLOCK;
110 typedef struct _DISPATCHER_HEADER
117 LIST_ENTRY WaitListHead;
118 } __attribute__((packed)) DISPATCHER_HEADER, *PDISPATCHER_HEADER;
121 typedef struct _KQUEUE
123 DISPATCHER_HEADER Header;
124 LIST_ENTRY EntryListHead;
127 LIST_ENTRY ThreadListEntry;
132 typedef struct _KTIMER
134 DISPATCHER_HEADER Header;
135 ULARGE_INTEGER DueTime;
136 LIST_ENTRY TimerListEntry;
143 typedef struct _KSPIN_LOCK
146 } KSPIN_LOCK, *PKSPIN_LOCK;
148 typedef struct _KDEVICE_QUEUE
155 } KDEVICE_QUEUE, *PKDEVICE_QUEUE;
163 struct _KTHREAD* Thread;
164 LIST_ENTRY ApcListEntry;
165 PKKERNEL_ROUTINE KernelRoutine;
166 PKRUNDOWN_ROUTINE RundownRoutine;
167 PKNORMAL_ROUTINE NormalRoutine;
169 PVOID SystemArgument1;
170 PVOID SystemArgument2;
172 KPROCESSOR_MODE ApcMode;
174 } __attribute__((packed)) KAPC, *PKAPC;
176 typedef struct _KBUGCHECK_CALLBACK_RECORD
179 PKBUGCHECK_CALLBACK_ROUTINE CallbackRoutine;
185 } KBUGCHECK_CALLBACK_RECORD, *PKBUGCHECK_CALLBACK_RECORD;
187 typedef struct _KMUTEX
189 DISPATCHER_HEADER Header;
190 LIST_ENTRY MutantListEntry;
191 struct _KTHREAD* OwnerThread;
194 } KMUTEX, *PKMUTEX, KMUTANT, *PKMUTANT;
196 typedef struct _KSEMAPHORE
198 DISPATCHER_HEADER Header;
200 } __attribute__((packed)) KSEMAPHORE, *PKSEMAPHORE;
202 typedef struct _KEVENT
204 DISPATCHER_HEADER Header;
207 typedef struct _KEVENT_PAIR
213 } KEVENT_PAIR, *PKEVENT_PAIR;
219 * PURPOSE: Defines a delayed procedure call routine
221 * Dpc = The associated DPC object
222 * DeferredContext = Driver defined context for the DPC
223 * SystemArgument[1-2] = Undocumented.
226 typedef VOID STDCALL_FUNC
227 (*PKDEFERRED_ROUTINE)(struct _KDPC* Dpc,
228 PVOID DeferredContext,
229 PVOID SystemArgument1,
230 PVOID SystemArgument2);
233 * PURPOSE: Defines a delayed procedure call object
240 LIST_ENTRY DpcListEntry;
241 PKDEFERRED_ROUTINE DeferredRoutine;
242 PVOID DeferredContext;
243 PVOID SystemArgument1;
244 PVOID SystemArgument2;
246 } __attribute__((packed)) KDPC, *PKDPC;
250 typedef struct _KDEVICE_QUEUE_ENTRY
255 } KDEVICE_QUEUE_ENTRY, *PKDEVICE_QUEUE_ENTRY;
257 typedef struct _WAIT_CONTEXT_BLOCK
259 KDEVICE_QUEUE_ENTRY WaitQueueEntry;
260 void * /* in real 'PDRIVER_CONTROL' */ DeviceRoutine;
262 ULONG NumberOfMapRegisters;
265 PKDPC BufferChainingDpc;
266 } WAIT_CONTEXT_BLOCK, *PWAIT_CONTEXT_BLOCK;
270 typedef BOOLEAN STDCALL_FUNC
271 (*PKSERVICE_ROUTINE)(struct _KINTERRUPT* Interrupt,
272 PVOID ServiceContext);
274 typedef struct _KINTERRUPT
277 KAFFINITY ProcessorEnableMask;
280 BOOLEAN FloatingSave;
281 PKSERVICE_ROUTINE ServiceRoutine;
282 PVOID ServiceContext;
285 } KINTERRUPT, *PKINTERRUPT;
287 typedef struct _KSYSTEM_TIME
292 } KSYSTEM_TIME, *PKSYSTEM_TIME;
294 typedef struct _EPROCESS EPROCESS, *PEPROCESS;
296 #endif /* __INCLUDE_DDK_KETYPES_H */