2 * PROJECT: ReactOS Native Headers
3 * FILE: include/ndk/ketypes.h
4 * PURPOSE: Definitions for Kernel Types not defined in DDK/IFS
5 * PROGRAMMER: Alex Ionescu (alex@relsoft.net)
12 /* DEPENDENCIES **************************************************************/
13 #ifndef NTOS_MODE_USER
15 #include "arch/ketypes.h"
18 /* CONSTANTS *****************************************************************/
19 #define SSDT_MAX_ENTRIES 4
20 #define PROCESSOR_FEATURE_MAX 64
21 #define CONTEXT_DEBUGGER (CONTEXT_FULL | CONTEXT_FLOATING_POINT)
24 #define SharedUserData ((KUSER_SHARED_DATA * CONST) USER_SHARED_DATA)
27 /* ENUMERATIONS **************************************************************/
30 typedef enum _EVENT_TYPE
36 typedef enum _TIMER_TYPE
42 typedef enum _WAIT_TYPE
55 typedef enum _KWAIT_REASON
94 typedef enum _KPROFILE_SOURCE
97 ProfileAlignmentFixup
,
100 ProfileLoadInstructions
,
101 ProfilePipelineFrozen
,
102 ProfileBranchInstructions
,
103 ProfileTotalNonissues
,
107 ProfileBranchMispredictions
,
108 ProfileStoreInstructions
,
109 ProfileFpInstructions
,
110 ProfileIntegerInstructions
,
114 ProfileSpecialInstructions
,
117 ProfileDcacheAccesses
,
118 ProfileMemoryBarrierCycles
,
119 ProfileLoadLinkedIssues
,
123 typedef enum _NT_PRODUCT_TYPE
128 } NT_PRODUCT_TYPE
, *PNT_PRODUCT_TYPE
;
130 typedef enum _ALTERNATIVE_ARCHITECTURE_TYPE
135 } ALTERNATIVE_ARCHITECTURE_TYPE
;
138 typedef enum _KTHREAD_STATE
148 } KTHREAD_STATE
, *PKTHREAD_STATE
;
150 typedef enum _KPROCESS_STATE
155 } KPROCESS_STATE
, *PKPROCESS_STATE
;
157 /* FUNCTION TYPES ************************************************************/
159 #ifdef NTOS_MODE_USER
161 (NTAPI
*PKNORMAL_ROUTINE
)(
162 IN PVOID NormalContext
,
163 IN PVOID SystemArgument1
,
164 IN PVOID SystemArgument2
);
167 (NTAPI
*PTIMER_APC_ROUTINE
)(
168 IN PVOID TimerContext
,
169 IN ULONG TimerLowValue
,
170 IN LONG TimerHighValue
);
173 /* TYPES *********************************************************************/
175 #ifdef NTOS_MODE_USER
176 typedef CCHAR KPROCESSOR_MODE
;
178 typedef struct _KSYSTEM_TIME
183 } KSYSTEM_TIME
, *PKSYSTEM_TIME
;
185 typedef struct _KUSER_SHARED_DATA
187 ULONG TickCountLowDeprecated
;
188 ULONG TickCountMultiplier
;
189 volatile KSYSTEM_TIME InterruptTime
;
190 volatile KSYSTEM_TIME SystemTime
;
191 volatile KSYSTEM_TIME TimeZoneBias
;
192 USHORT ImageNumberLow
;
193 USHORT ImageNumberHigh
;
194 WCHAR NtSystemRoot
[260];
195 ULONG MaxStackTraceDepth
;
196 ULONG CryptoExponent
;
198 ULONG LargePageMinimum
;
200 NT_PRODUCT_TYPE NtProductType
;
201 BOOLEAN ProductTypeIsValid
;
202 ULONG NtMajorVersion
;
203 ULONG NtMinorVersion
;
204 BOOLEAN ProcessorFeatures
[PROCESSOR_FEATURE_MAX
];
207 volatile ULONG TimeSlip
;
208 ALTERNATIVE_ARCHITECTURE_TYPE AlternativeArchitecture
;
209 LARGE_INTEGER SystemExpirationDate
;
211 BOOLEAN KdDebuggerEnabled
;
212 volatile ULONG ActiveConsoleId
;
213 volatile ULONG DismountCount
;
214 ULONG ComPlusPackage
;
215 ULONG LastSystemRITEventTickCount
;
216 ULONG NumberOfPhysicalPages
;
217 BOOLEAN SafeBootMode
;
220 ULONGLONG SystemCall
[4];
222 volatile KSYSTEM_TIME TickCount
;
223 volatile ULONG64 TickCountQuad
;
225 } KUSER_SHARED_DATA
, *PKUSER_SHARED_DATA
;
228 #ifndef NTOS_MODE_USER
229 typedef struct _CONFIGURATION_COMPONENT_DATA
231 struct _CONFIGURATION_COMPONENT_DATA
*Parent
;
232 struct _CONFIGURATION_COMPONENT_DATA
*Child
;
233 struct _CONFIGURATION_COMPONENT_DATA
*Sibling
;
234 CONFIGURATION_COMPONENT Component
;
235 } CONFIGURATION_COMPONENT_DATA
, *PCONFIGURATION_COMPONENT_DATA
;
237 typedef enum _KAPC_ENVIRONMENT
239 OriginalApcEnvironment
,
240 AttachedApcEnvironment
,
241 CurrentApcEnvironment
244 typedef struct _KNODE
246 SLIST_HEADER DeadStackList
;
247 SLIST_HEADER PfnDereferenceSListHead
;
253 ULONG MmShiftedColor
;
255 struct _SINGLE_LIST_ENTRY
*PfnDeferredList
;
258 typedef struct _KPROFILE
262 LIST_ENTRY ListEntry
;
267 KPROFILE_SOURCE Source
;
270 struct _KPROCESS
*Process
;
271 } KPROFILE
, *PKPROFILE
;
273 typedef struct _KINTERRUPT
277 LIST_ENTRY InterruptListEntry
;
278 PKSERVICE_ROUTINE ServiceRoutine
;
279 PVOID ServiceContext
;
282 PKSPIN_LOCK ActualLock
;
283 PVOID DispatchAddress
;
286 KIRQL SynchronizeIrql
;
287 BOOLEAN FloatingSave
;
291 KINTERRUPT_MODE Mode
;
294 ULONG DispatchCode
[106];
295 } KINTERRUPT
, *PKINTERRUPT
;
297 typedef struct _KEVENT_PAIR
303 } KEVENT_PAIR
, *PKEVENT_PAIR
;
305 typedef struct _KEXECUTE_OPTIONS
307 UCHAR ExecuteDisable
:1;
308 UCHAR ExecuteEnable
:1;
309 UCHAR DisableThunkEmulation
:1;
311 UCHAR ExecuteDispatchEnable
:1;
312 UCHAR ImageDispatchEnable
:1;
314 } KEXECUTE_OPTIONS
, *PKEXECUTE_OPTIONS
;
316 typedef enum _KOBJECTS
318 EventNotificationObject
= 0,
319 EventSynchronizationObject
= 1,
326 TimerNotificationObject
= 8,
327 TimerSynchronizationObject
= 9,
338 DeviceQueueObject
= 20,
339 EventPairObject
= 21,
340 InterruptObject
= 22,
342 ThreadedDpcObject
= 24,
343 MaximumKernelObject
= 25
346 #include <pshpack1.h>
348 typedef struct _KTHREAD
350 DISPATCHER_HEADER DispatcherHeader
; /* 00 */
351 LIST_ENTRY MutantListHead
; /* 10 */
352 PVOID InitialStack
; /* 18 */
353 ULONG_PTR StackLimit
; /* 1C */
354 struct _TEB
*Teb
; /* 20 */
355 PVOID TlsArray
; /* 24 */
356 PVOID KernelStack
; /* 28 */
357 UCHAR DebugActive
; /* 2C */
358 UCHAR State
; /* 2D */
359 BOOLEAN Alerted
[2]; /* 2E */
361 UCHAR NpxState
; /* 31 */
362 CHAR Saturation
; /* 32 */
363 CHAR Priority
; /* 33 */
364 KAPC_STATE ApcState
; /* 34 */
365 ULONG ContextSwitches
; /* 4C */
366 LONG WaitStatus
; /* 50 */
367 KIRQL WaitIrql
; /* 54 */
368 CHAR WaitMode
; /* 55 */
369 UCHAR WaitNext
; /* 56 */
370 UCHAR WaitReason
; /* 57 */
373 PKWAIT_BLOCK WaitBlockList
; /* 58 */
374 PKGATE GateObject
; /* 58 */
376 LIST_ENTRY WaitListEntry
; /* 5C */
377 ULONG WaitTime
; /* 64 */
378 CHAR BasePriority
; /* 68 */
379 UCHAR DecrementCount
; /* 69 */
380 UCHAR PriorityDecrement
; /* 6A */
381 CHAR Quantum
; /* 6B */
382 KWAIT_BLOCK WaitBlock
[4]; /* 6C */
383 PVOID LegoData
; /* CC */
388 USHORT KernelApcDisable
;
389 USHORT SpecialApcDisable
;
391 ULONG CombinedApcDisable
; /* D0 */
393 KAFFINITY UserAffinity
; /* D4 */
394 UCHAR SystemAffinityActive
;/* D8 */
395 UCHAR PowerState
; /* D9 */
396 UCHAR NpxIrql
; /* DA */
397 UCHAR Pad
[1]; /* DB */
398 PVOID ServiceTable
; /* DC */
399 struct _KQUEUE
*Queue
; /* E0 */
400 KSPIN_LOCK ApcQueueLock
; /* E4 */
401 KTIMER Timer
; /* E8 */
402 LIST_ENTRY QueueListEntry
; /* 110 */
403 KAFFINITY Affinity
; /* 118 */
404 UCHAR Preempted
; /* 11C */
405 UCHAR ProcessReadyQueue
; /* 11D */
406 UCHAR KernelStackResident
; /* 11E */
407 UCHAR NextProcessor
; /* 11F */
408 PVOID CallbackStack
; /* 120 */
409 struct _W32THREAD
*Win32Thread
; /* 124 */
410 struct _KTRAP_FRAME
*TrapFrame
; /* 128 */
411 PKAPC_STATE ApcStatePointer
[2]; /* 12C */
412 UCHAR EnableStackSwap
; /* 134 */
413 UCHAR LargeStack
; /* 135 */
414 UCHAR ResourceIndex
; /* 136 */
415 UCHAR PreviousMode
; /* 137 */
416 ULONG KernelTime
; /* 138 */
417 ULONG UserTime
; /* 13C */
418 KAPC_STATE SavedApcState
; /* 140 */
419 UCHAR Alertable
; /* 158 */
420 UCHAR ApcStateIndex
; /* 159 */
421 UCHAR ApcQueueable
; /* 15A */
422 UCHAR AutoAlignment
; /* 15B */
423 PVOID StackBase
; /* 15C */
424 KAPC SuspendApc
; /* 160 */
425 KSEMAPHORE SuspendSemaphore
; /* 190 */
426 LIST_ENTRY ThreadListEntry
; /* 1A4 */
427 CHAR FreezeCount
; /* 1AC */
428 UCHAR SuspendCount
; /* 1AD */
429 UCHAR IdealProcessor
; /* 1AE */
430 UCHAR DisableBoost
; /* 1AF */
431 UCHAR QuantumReset
; /* 1B0 */
436 typedef struct _KPROCESS
438 DISPATCHER_HEADER Header
; /* 000 */
439 LIST_ENTRY ProfileListHead
; /* 010 */
440 PHYSICAL_ADDRESS DirectoryTableBase
; /* 018 */
442 KGDTENTRY LdtDescriptor
; /* 020 */
443 KIDTENTRY Int21Descriptor
; /* 028 */
444 USHORT IopmOffset
; /* 030 */
445 UCHAR Iopl
; /* 032 */
446 UCHAR Unused
; /* 033 */
448 ULONG ActiveProcessors
; /* 034 */
449 ULONG KernelTime
; /* 038 */
450 ULONG UserTime
; /* 03C */
451 LIST_ENTRY ReadyListHead
; /* 040 */
452 LIST_ENTRY SwapListEntry
; /* 048 */
453 PVOID VdmTrapcHandler
; /* 04C */
454 LIST_ENTRY ThreadListHead
; /* 050 */
455 KSPIN_LOCK ProcessLock
; /* 058 */
456 KAFFINITY Affinity
; /* 05C */
461 ULONG AutoAlignment
:1; /* 060.0 */
462 ULONG DisableBoost
:1; /* 060.1 */
463 ULONG DisableQuantum
:1; /* 060.2 */
464 ULONG ReservedFlags
:29; /* 060.3 */
466 ULONG ProcessFlags
; /* 060 */
468 CHAR BasePriority
; /* 064 */
469 CHAR QuantumReset
; /* 065 */
470 UCHAR State
; /* 066 */
471 UCHAR ThreadSeed
; /* 067 */
472 UCHAR PowerState
; /* 068 */
473 UCHAR IdealNode
; /* 069 */
474 UCHAR Visited
; /* 06A */
475 KEXECUTE_OPTIONS Flags
; /* 06B */
476 ULONG StackCount
; /* 06C */
477 LIST_ENTRY ProcessListEntry
; /* 070 */
480 typedef struct _KSERVICE_TABLE_DESCRIPTOR
486 LONG TableBaseGpOffset
;
489 } KSERVICE_TABLE_DESCRIPTOR
, *PKSERVICE_TABLE_DESCRIPTOR
;
490 #endif /* !NTOS_MODE_USER */
492 /* EXPORTED DATA *************************************************************/
493 #ifndef NTOS_MODE_USER
494 extern CHAR NTSYSAPI KeNumberProcessors
;
495 extern LOADER_PARAMETER_BLOCK NTSYSAPI KeLoaderBlock
;
496 extern ULONG NTSYSAPI KeDcacheFlushCount
;
497 extern ULONG NTSYSAPI KeIcacheFlushCount
;
498 extern KAFFINITY NTSYSAPI KeActiveProcessors
;
499 extern ULONG NTSYSAPI KiDmaIoCoherency
; /* RISC Architectures only */
500 extern ULONG NTSYSAPI KeMaximumIncrement
;
501 extern ULONG NTSYSAPI KeMinimumIncrement
;
502 extern ULONG NTSYSAPI NtBuildNumber
;
503 extern KSERVICE_TABLE_DESCRIPTOR NTSYSAPI KeServiceDescriptorTable
[SSDT_MAX_ENTRIES
];
504 extern KSERVICE_TABLE_DESCRIPTOR NTSYSAPI KeServiceDescriptorTableShadow
[SSDT_MAX_ENTRIES
];