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 CONTEXT_DEBUGGER (CONTEXT_FULL | CONTEXT_FLOATING_POINT)
23 #define SharedUserData ((KUSER_SHARED_DATA * CONST) USER_SHARED_DATA)
24 #define MAX_WOW64_SHARED_ENTRIES 16
25 #define PROCESSOR_FEATURE_MAX 64
28 /* ENUMERATIONS **************************************************************/
31 typedef enum _EVENT_TYPE
37 typedef enum _TIMER_TYPE
43 typedef enum _WAIT_TYPE
56 typedef enum _KWAIT_REASON
95 typedef enum _KPROFILE_SOURCE
98 ProfileAlignmentFixup
,
101 ProfileLoadInstructions
,
102 ProfilePipelineFrozen
,
103 ProfileBranchInstructions
,
104 ProfileTotalNonissues
,
108 ProfileBranchMispredictions
,
109 ProfileStoreInstructions
,
110 ProfileFpInstructions
,
111 ProfileIntegerInstructions
,
115 ProfileSpecialInstructions
,
118 ProfileDcacheAccesses
,
119 ProfileMemoryBarrierCycles
,
120 ProfileLoadLinkedIssues
,
124 typedef enum _NT_PRODUCT_TYPE
129 } NT_PRODUCT_TYPE
, *PNT_PRODUCT_TYPE
;
131 typedef enum _ALTERNATIVE_ARCHITECTURE_TYPE
136 } ALTERNATIVE_ARCHITECTURE_TYPE
;
139 typedef enum _KTHREAD_STATE
149 } KTHREAD_STATE
, *PKTHREAD_STATE
;
151 typedef enum _KPROCESS_STATE
156 } KPROCESS_STATE
, *PKPROCESS_STATE
;
158 /* FUNCTION TYPES ************************************************************/
160 #ifdef NTOS_MODE_USER
162 (NTAPI
*PKNORMAL_ROUTINE
)(
163 IN PVOID NormalContext
,
164 IN PVOID SystemArgument1
,
165 IN PVOID SystemArgument2
);
168 (NTAPI
*PTIMER_APC_ROUTINE
)(
169 IN PVOID TimerContext
,
170 IN ULONG TimerLowValue
,
171 IN LONG TimerHighValue
);
174 /* TYPES *********************************************************************/
176 #ifdef NTOS_MODE_USER
177 typedef CCHAR KPROCESSOR_MODE
;
179 typedef struct _KSYSTEM_TIME
184 } KSYSTEM_TIME
, *PKSYSTEM_TIME
;
186 typedef struct _KUSER_SHARED_DATA
188 ULONG TickCountLowDeprecated
;
189 ULONG TickCountMultiplier
;
190 volatile KSYSTEM_TIME InterruptTime
;
191 volatile KSYSTEM_TIME SystemTime
;
192 volatile KSYSTEM_TIME TimeZoneBias
;
193 USHORT ImageNumberLow
;
194 USHORT ImageNumberHigh
;
195 WCHAR NtSystemRoot
[260];
196 ULONG MaxStackTraceDepth
;
197 ULONG CryptoExponent
;
199 ULONG LargePageMinimum
;
201 NT_PRODUCT_TYPE NtProductType
;
202 BOOLEAN ProductTypeIsValid
;
203 ULONG NtMajorVersion
;
204 ULONG NtMinorVersion
;
205 BOOLEAN ProcessorFeatures
[PROCESSOR_FEATURE_MAX
];
208 volatile ULONG TimeSlip
;
209 ALTERNATIVE_ARCHITECTURE_TYPE AlternativeArchitecture
;
210 LARGE_INTEGER SystemExpirationDate
;
212 BOOLEAN KdDebuggerEnabled
;
213 volatile ULONG ActiveConsoleId
;
214 volatile ULONG DismountCount
;
215 ULONG ComPlusPackage
;
216 ULONG LastSystemRITEventTickCount
;
217 ULONG NumberOfPhysicalPages
;
218 BOOLEAN SafeBootMode
;
221 ULONGLONG TestRetInstruction
;
223 ULONG SystemCallReturn
;
224 ULONGLONG SystemCallPad
[3];
226 volatile KSYSTEM_TIME TickCount
;
227 volatile ULONG64 TickCountQuad
;
230 LONGLONG ConsoleSessionForegroundProcessId
;
231 ULONG Wow64SharedInformation
[MAX_WOW64_SHARED_ENTRIES
];
232 ULONG UserModeGlobalLogging
;
233 } KUSER_SHARED_DATA
, *PKUSER_SHARED_DATA
;
236 #ifndef NTOS_MODE_USER
237 typedef struct _CONFIGURATION_COMPONENT_DATA
239 struct _CONFIGURATION_COMPONENT_DATA
*Parent
;
240 struct _CONFIGURATION_COMPONENT_DATA
*Child
;
241 struct _CONFIGURATION_COMPONENT_DATA
*Sibling
;
242 CONFIGURATION_COMPONENT Component
;
243 } CONFIGURATION_COMPONENT_DATA
, *PCONFIGURATION_COMPONENT_DATA
;
245 typedef enum _KAPC_ENVIRONMENT
247 OriginalApcEnvironment
,
248 AttachedApcEnvironment
,
249 CurrentApcEnvironment
252 typedef struct _KNODE
254 SLIST_HEADER DeadStackList
;
255 SLIST_HEADER PfnDereferenceSListHead
;
261 ULONG MmShiftedColor
;
263 struct _SINGLE_LIST_ENTRY
*PfnDeferredList
;
266 typedef struct _KPROFILE
270 LIST_ENTRY ListEntry
;
275 KPROFILE_SOURCE Source
;
278 struct _KPROCESS
*Process
;
279 } KPROFILE
, *PKPROFILE
;
281 typedef struct _KINTERRUPT
285 LIST_ENTRY InterruptListEntry
;
286 PKSERVICE_ROUTINE ServiceRoutine
;
287 PVOID ServiceContext
;
290 PKSPIN_LOCK ActualLock
;
291 PVOID DispatchAddress
;
294 KIRQL SynchronizeIrql
;
295 BOOLEAN FloatingSave
;
299 KINTERRUPT_MODE Mode
;
302 ULONG DispatchCode
[106];
303 } KINTERRUPT
, *PKINTERRUPT
;
305 typedef struct _KEVENT_PAIR
311 } KEVENT_PAIR
, *PKEVENT_PAIR
;
313 typedef struct _KEXECUTE_OPTIONS
315 UCHAR ExecuteDisable
:1;
316 UCHAR ExecuteEnable
:1;
317 UCHAR DisableThunkEmulation
:1;
319 UCHAR ExecuteDispatchEnable
:1;
320 UCHAR ImageDispatchEnable
:1;
322 } KEXECUTE_OPTIONS
, *PKEXECUTE_OPTIONS
;
324 typedef enum _KOBJECTS
326 EventNotificationObject
= 0,
327 EventSynchronizationObject
= 1,
334 TimerNotificationObject
= 8,
335 TimerSynchronizationObject
= 9,
346 DeviceQueueObject
= 20,
347 EventPairObject
= 21,
348 InterruptObject
= 22,
350 ThreadedDpcObject
= 24,
351 MaximumKernelObject
= 25
354 #include <pshpack1.h>
356 typedef struct _KTHREAD
358 DISPATCHER_HEADER DispatcherHeader
; /* 00 */
359 LIST_ENTRY MutantListHead
; /* 10 */
360 PVOID InitialStack
; /* 18 */
361 ULONG_PTR StackLimit
; /* 1C */
362 PVOID KernelStack
; /* 20 */
363 KSPIN_LOCK ThreadLock
; /* 24 */
366 KAPC_STATE ApcState
; /* 34 */
369 UCHAR ApcStateFill
[23]; /* 34 */
370 UCHAR ApcQueueable
; /* 3F */
373 UCHAR NextProcessor
; /* 40 */
374 UCHAR DeferredProcessor
; /* 41 */
375 UCHAR AdjustReason
; /* 42 */
376 UCHAR AdjustIncrement
; /* 43 */
377 KSPIN_LOCK ApcQueueLock
; /* 44 */
378 ULONG ContextSwitches
; /* 48 */
379 UCHAR State
; /* 4C */
380 UCHAR NpxState
; /* 4D */
381 UCHAR WaitIrql
; /* 4E */
382 UCHAR WaitMode
; /* 4F */
383 LONG WaitStatus
; /* 50 */
386 PKWAIT_BLOCK WaitBlockList
; /* 54 */
387 PKGATE GateObject
; /* 54 */
389 UCHAR Alertable
; /* 58 */
390 UCHAR WaitNext
; /* 59 */
391 UCHAR WaitReason
; /* 5A */
392 UCHAR Priority
; /* 5B */
393 UCHAR EnableStackSwap
; /* 5C */
394 UCHAR SwapBusy
; /* 5D */
395 UCHAR Alerted
[2]; /* 5E */
398 LIST_ENTRY WaitListEntry
; /* 60 */
399 SINGLE_LIST_ENTRY SwapListEntry
; /* 60 */
401 PKQUEUE Queue
; /* 68 */
402 ULONG WaitTime
; /* 6C */
407 USHORT KernelApcDisable
; /* 70 */
408 USHORT SpecialApcDisable
; /* 72 */
410 ULONG CombinedApcDisable
; /* 70 */
412 struct _TEB
*Teb
; /* 74 */
415 KTIMER Timer
; /* 78 */
416 UCHAR TimerFill
[40]; /* 78 */
422 LONG AutoAlignment
:1; /* A0 */
423 LONG DisableBoost
:1; /* A0 */
424 LONG ReservedFlags
:30; /* A0 */
426 LONG ThreadFlags
; /* A0 */
428 PVOID Padding
; /* A4 */
431 KWAIT_BLOCK WaitBlock
[4]; /* A8 */
436 UCHAR WaitBlockFill0
[23]; /* A8 */
437 UCHAR SystemAffinityActive
; /* BF */
441 UCHAR WaitBlockFill1
[47]; /* A8 */
442 UCHAR PreviousMode
; /* D7 */
446 UCHAR WaitBlockFill2
[71]; /* A8 */
447 UCHAR ResourceIndex
; /* EF */
451 UCHAR WaitBlockFill3
[95]; /* A8 */
452 UCHAR LargeStack
; /* 107 */
456 LIST_ENTRY QueueListEntry
; /* 108 */
457 PKTRAP_FRAME TrapFrame
; /* 110 */
458 PVOID CallbackStack
; /* 114 */
459 PVOID ServiceTable
; /* 118 */
460 UCHAR ApcStateIndex
; /* 11C */
461 UCHAR IdealProcessor
; /* 11D */
462 UCHAR Preempted
; /* 11E */
463 UCHAR ProcessReadyQueue
; /* 11F */
464 UCHAR KernelStackResident
; /* 120 */
465 CHAR BasePriority
; /* 121 */
466 CHAR PriorityDecrement
; /* 122 */
467 CHAR Saturation
; /* 123 */
468 KAFFINITY UserAffinity
; /* 124 */
469 struct _KPROCESS
*Process
; /* 128 */
470 KAFFINITY Affinity
; /* 12C */
471 PKAPC_STATE ApcStatePointer
[2]; /* 130 */
474 KAPC_STATE SavedApcState
; /* 138 */
477 UCHAR SavedApcStateFill
[23]; /* 138 */
478 CHAR FreezeCount
; /* 14F */
481 CHAR SuspendCount
; /* 150 */
482 UCHAR UserIdealProcessor
; /* 151 */
483 UCHAR CalloutActive
; /* 152 */
484 UCHAR Iopl
; /* 153 */
485 PVOID Win32Thread
; /* 154 */
486 PVOID StackBase
; /* 158 */
489 KAPC SuspendApc
; /* 15C */
492 UCHAR SuspendApcFill0
[1]; /* 15C */
493 CHAR Quantum
; /* 15D */
497 UCHAR SuspendApcFill1
[3]; /* 15C */
498 UCHAR QuantumReset
; /* 15F */
502 UCHAR SuspendApcFill2
[4]; /* 15C */
503 ULONG KernelTime
; /* 160 */
507 UCHAR SuspendApcFill3
[36]; /* 15C */
508 PVOID TlsArray
; /* 180 */
512 UCHAR SuspendApcFill4
[40]; /* 15C */
513 PVOID LegoData
; /* 184 */
517 UCHAR SuspendApcFill5
[47]; /* 15C */
518 UCHAR PowerState
; /* 18B */
521 ULONG UserTime
; /* 18C */
524 KSEMAPHORE SuspendSemaphore
; /* 190 */
525 UCHAR SuspendSemaphorefill
[20]; /* 190 */
527 ULONG SListFaultCount
; /* 1A4 */
528 LIST_ENTRY ThreadListEntry
; /* 1A8 */
529 PVOID SListFaultAddress
; /* 1B0 */
530 } KTHREAD
; /* sizeof: 1B4 */
534 typedef struct _KPROCESS
536 DISPATCHER_HEADER Header
; /* 000 */
537 LIST_ENTRY ProfileListHead
; /* 010 */
538 PHYSICAL_ADDRESS DirectoryTableBase
; /* 018 */
540 KGDTENTRY LdtDescriptor
; /* 020 */
541 KIDTENTRY Int21Descriptor
; /* 028 */
542 USHORT IopmOffset
; /* 030 */
543 UCHAR Iopl
; /* 032 */
544 UCHAR Unused
; /* 033 */
546 ULONG ActiveProcessors
; /* 034 */
547 ULONG KernelTime
; /* 038 */
548 ULONG UserTime
; /* 03C */
549 LIST_ENTRY ReadyListHead
; /* 040 */
550 LIST_ENTRY SwapListEntry
; /* 048 */
551 PVOID VdmTrapcHandler
; /* 04C */
552 LIST_ENTRY ThreadListHead
; /* 050 */
553 KSPIN_LOCK ProcessLock
; /* 058 */
554 KAFFINITY Affinity
; /* 05C */
559 ULONG AutoAlignment
:1; /* 060.0 */
560 ULONG DisableBoost
:1; /* 060.1 */
561 ULONG DisableQuantum
:1; /* 060.2 */
562 ULONG ReservedFlags
:29; /* 060.3 */
564 ULONG ProcessFlags
; /* 060 */
566 CHAR BasePriority
; /* 064 */
567 CHAR QuantumReset
; /* 065 */
568 UCHAR State
; /* 066 */
569 UCHAR ThreadSeed
; /* 067 */
570 UCHAR PowerState
; /* 068 */
571 UCHAR IdealNode
; /* 069 */
572 UCHAR Visited
; /* 06A */
573 KEXECUTE_OPTIONS Flags
; /* 06B */
574 ULONG StackCount
; /* 06C */
575 LIST_ENTRY ProcessListEntry
; /* 070 */
578 typedef struct _KSERVICE_TABLE_DESCRIPTOR
584 LONG TableBaseGpOffset
;
587 } KSERVICE_TABLE_DESCRIPTOR
, *PKSERVICE_TABLE_DESCRIPTOR
;
588 #endif /* !NTOS_MODE_USER */
590 /* EXPORTED DATA *************************************************************/
591 #ifndef NTOS_MODE_USER
592 extern CHAR NTSYSAPI KeNumberProcessors
;
593 extern LOADER_PARAMETER_BLOCK NTSYSAPI KeLoaderBlock
;
594 extern ULONG NTSYSAPI KeDcacheFlushCount
;
595 extern ULONG NTSYSAPI KeIcacheFlushCount
;
596 extern KAFFINITY NTSYSAPI KeActiveProcessors
;
597 extern ULONG NTSYSAPI KiDmaIoCoherency
; /* RISC Architectures only */
598 extern ULONG NTSYSAPI KeMaximumIncrement
;
599 extern ULONG NTSYSAPI KeMinimumIncrement
;
600 extern ULONG NTSYSAPI NtBuildNumber
;
601 extern KSERVICE_TABLE_DESCRIPTOR NTSYSAPI KeServiceDescriptorTable
[SSDT_MAX_ENTRIES
];
602 extern KSERVICE_TABLE_DESCRIPTOR NTSYSAPI KeServiceDescriptorTableShadow
[SSDT_MAX_ENTRIES
];