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 **************************************************************/
18 /* CONSTANTS *****************************************************************/
19 #define SSDT_MAX_ENTRIES 4
20 #define PROCESSOR_FEATURE_MAX 64
22 #define CONTEXT_DEBUGGER (CONTEXT_FULL | CONTEXT_FLOATING_POINT)
24 #define THREAD_WAIT_OBJECTS 4
26 /* EXPORTED DATA *************************************************************/
27 extern CHAR NTOSAPI KeNumberProcessors
;
28 extern LOADER_PARAMETER_BLOCK NTOSAPI KeLoaderBlock
;
29 extern ULONG NTOSAPI KeDcacheFlushCount
;
30 extern ULONG NTOSAPI KeIcacheFlushCount
;
31 extern KAFFINITY NTOSAPI KeActiveProcessors
;
32 extern ULONG NTOSAPI KiDmaIoCoherency
; /* RISC Architectures only */
33 extern ULONG NTOSAPI KeMaximumIncrement
;
34 extern ULONG NTOSAPI KeMinimumIncrement
;
35 extern ULONG NTOSAPI NtBuildNumber
;
36 extern SSDT_ENTRY NTOSAPI KeServiceDescriptorTable
[SSDT_MAX_ENTRIES
];
37 extern SSDT_ENTRY NTOSAPI KeServiceDescriptorTableShadow
[SSDT_MAX_ENTRIES
];
39 /* ENUMERATIONS **************************************************************/
41 /* TYPES *********************************************************************/
43 typedef struct _CONFIGURATION_COMPONENT_DATA
45 struct _CONFIGURATION_COMPONENT_DATA
*Parent
;
46 struct _CONFIGURATION_COMPONENT_DATA
*Child
;
47 struct _CONFIGURATION_COMPONENT_DATA
*Sibling
;
48 CONFIGURATION_COMPONENT Component
;
49 } CONFIGURATION_COMPONENT_DATA
, *PCONFIGURATION_COMPONENT_DATA
;
51 typedef enum _KAPC_ENVIRONMENT
53 OriginalApcEnvironment
,
54 AttachedApcEnvironment
,
58 typedef struct _KDPC_DATA
60 LIST_ENTRY DpcListHead
;
64 } KDPC_DATA
, *PKDPC_DATA
;
66 /* We don't want to force NTIFS usage only for a single structure */
68 typedef struct _KAPC_STATE
70 LIST_ENTRY ApcListHead
[2];
72 BOOLEAN KernelApcInProgress
;
73 BOOLEAN KernelApcPending
;
74 BOOLEAN UserApcPending
;
75 } KAPC_STATE
, *PKAPC_STATE
, *RESTRICTED_POINTER PRKAPC_STATE
;
78 /* FIXME: Most of these should go to i386 directory */
79 typedef struct _FNSAVE_FORMAT
88 UCHAR RegisterArea
[80];
89 } FNSAVE_FORMAT
, *PFNSAVE_FORMAT
;
91 typedef struct _FXSAVE_FORMAT
103 UCHAR RegisterArea
[128];
104 UCHAR Reserved3
[128];
105 UCHAR Reserved4
[224];
106 UCHAR Align16Byte
[8];
107 } FXSAVE_FORMAT
, *PFXSAVE_FORMAT
;
109 typedef struct _FX_SAVE_AREA
113 FNSAVE_FORMAT FnArea
;
114 FXSAVE_FORMAT FxArea
;
118 } FX_SAVE_AREA
, *PFX_SAVE_AREA
;
120 typedef struct _KTRAP_FRAME
166 } KTRAP_FRAME
, *PKTRAP_FRAME
;
168 /* FIXME: Win32k uses windows.h! */
170 typedef struct _LDT_ENTRY
{
187 DWORD Reserved_0
: 1;
188 DWORD Default_Big
: 1;
189 DWORD Granularity
: 1;
193 } LDT_ENTRY
, *PLDT_ENTRY
, *LPLDT_ENTRY
;
196 typedef struct _KGDTENTRY
214 ULONG Reserved_0
: 1;
215 ULONG Default_Big
: 1;
216 ULONG Granularity
: 1;
220 } KGDTENTRY
, *PKGDTENTRY
;
222 typedef struct _KIDTENTRY
227 USHORT ExtendedOffset
;
228 } KIDTENTRY
, *PKIDTENTRY
;
230 typedef struct _HARDWARE_PTE_X86
235 ULONG WriteThrough
: 1;
236 ULONG CacheDisable
: 1;
241 ULONG CopyOnWrite
: 1;
244 ULONG PageFrameNumber
: 20;
245 } HARDWARE_PTE_X86
, *PHARDWARE_PTE_X86
;
249 /* Fixme: Use correct types? */
250 typedef struct _KPROCESSOR_STATE
252 PCONTEXT ContextFrame
;
253 PVOID SpecialRegisters
;
256 /* Processor Control Block */
257 typedef struct _KPRCB
261 struct _KTHREAD
*CurrentThread
;
262 struct _KTHREAD
*NextThread
;
263 struct _KTHREAD
*IdleThread
;
271 KPROCESSOR_STATE ProcessorState
;
272 ULONG KernelReserved
[16];
273 ULONG HalReserved
[16];
275 PVOID LockQueue
[33]; // Used for Queued Spinlocks
276 struct _KTHREAD
*NpxThread
;
277 ULONG InterruptCount
;
283 ULONG AdjustDpcThreshold
;
286 UCHAR DebuggerSavedIRQL
;
288 struct _KNODE
*ParentNode
;
289 ULONG MultiThreadProcessorSet
;
290 struct _KPRCB
*MultiThreadSetMaster
;
291 ULONG ThreadStartCount
[2];
292 ULONG CcFastReadNoWait
;
293 ULONG CcFastReadWait
;
294 ULONG CcFastReadNotPossible
;
295 ULONG CcCopyReadNoWait
;
296 ULONG CcCopyReadWait
;
297 ULONG CcCopyReadNoWaitMiss
;
298 ULONG KeAlignmentFixupCount
;
299 ULONG KeContextSwitches
;
300 ULONG KeDcacheFlushCount
;
301 ULONG KeExceptionDispatchCount
;
302 ULONG KeFirstLevelTbFills
;
303 ULONG KeFloatingEmulationCount
;
304 ULONG KeIcacheFlushCount
;
305 ULONG KeSecondLevelTbFills
;
307 ULONG IoReadOperationCount
;
308 ULONG IoWriteOperationCount
;
309 ULONG IoOtherOperationCount
;
310 LARGE_INTEGER IoReadTransferCount
;
311 LARGE_INTEGER IoWriteTransferCount
;
312 LARGE_INTEGER IoOtherTransferCount
;
313 ULONG SpareCounter1
[8];
314 PP_LOOKASIDE_LIST PPLookasideList
[16];
315 PP_LOOKASIDE_LIST PPNPagedLookasideList
[32];
316 PP_LOOKASIDE_LIST PPPagedLookasideList
[32];
321 PVOID CurrentPacket
[3];
323 ULONG_PTR WorkerRoutine
;
326 ULONG RequestSummary
;
327 struct _KPRCB
*SignalDone
;
329 struct _KDPC_DATA DpcData
[2];
331 ULONG MaximumDpcQueueDepth
;
332 ULONG DpcRequestRate
;
333 ULONG MinimumDpcRate
;
334 UCHAR DpcInterruptRequested
;
335 UCHAR DpcThreadRequested
;
336 UCHAR DpcRoutineActive
;
337 UCHAR DpcThreadActive
;
343 struct _KEVENT
*DpcEvent
;
344 UCHAR ThreadDpcEnable
;
348 ULONG DpcSetEventRequest
;
351 struct _KDPC
* CallDpc
;
353 LIST_ENTRY WaitListHead
;
355 ULONG SelectNextLast
;
356 LIST_ENTRY DispatcherReadyListHead
[32];
357 SINGLE_LIST_ENTRY DeferredReadyListHead
;
359 PVOID ChainedInterruptList
;
360 LONG LookasideIrpFloat
;
361 LONG MmPageFaultCount
;
362 LONG MmCopyOnWriteCount
;
363 LONG MmTransitionCount
;
364 LONG MmCacheTransitionCount
;
365 LONG MmDemandZeroCount
;
366 LONG MmPageReadCount
;
367 LONG MmPageReadIoCount
;
368 LONG MmCacheReadCount
;
370 LONG MmDirtyPagesWriteCount
;
371 LONG MmDirtyWriteIoCount
;
372 LONG MmMappedPagesWriteCount
;
373 LONG MmMappedWriteIoCount
;
374 ULONG SpareFields0
[1];
375 CHAR VendorString
[13];
377 UCHAR LogicalProcessorsPerPhysicalProcessor
;
380 LARGE_INTEGER UpdateSignature
;
381 LARGE_INTEGER IsrTime
;
382 LARGE_INTEGER SpareField1
;
383 FX_SAVE_AREA NpxSaveArea
;
384 PROCESSOR_POWER_STATE PowerState
;
388 * This is the complete, internal KPCR structure
390 typedef struct _KIPCR
{
391 KPCR_TIB Tib
; /* 00 */
392 struct _KPCR
*Self
; /* 1C */
393 struct _KPRCB
*Prcb
; /* 20 */
396 ULONG IrrActive
; /* 2C */
398 PVOID KdVersionBlock
; /* 34 */
399 PUSHORT IDT
; /* 38 */
400 PUSHORT GDT
; /* 3C */
401 struct _KTSS
*TSS
; /* 40 */
402 USHORT MajorVersion
; /* 44 */
403 USHORT MinorVersion
; /* 46 */
404 KAFFINITY SetMember
; /* 48 */
405 ULONG StallScaleFactor
; /* 4C */
406 UCHAR SparedUnused
; /* 50 */
407 UCHAR Number
; /* 51 */
408 UCHAR Reserved
; /* 52 */
409 UCHAR L2CacheAssociativity
; /* 53 */
410 ULONG VdmAlert
; /* 54 */
411 ULONG KernelReserved
[14]; /* 58 */
412 ULONG L2CacheSize
; /* 90 */
413 ULONG HalReserved
[16]; /* 94 */
414 ULONG InterruptMode
; /* D4 */
415 UCHAR KernelReserved2
[0x48]; /* D8 */
416 KPRCB PrcbData
; /* 120 */
421 #include <pshpack1.h>
423 typedef struct _KTSSNOIOPM
463 /* no interrupt redirection map */
507 /* no interrupt redirection map */
508 UCHAR IoBitmap
[8193];
513 /* i386 Doesn't have Exception Frames */
514 typedef struct _KEXCEPTION_FRAME
{
516 } KEXCEPTION_FRAME
, *PKEXCEPTION_FRAME
;
518 typedef struct _KNODE
520 SLIST_HEADER DeadStackList
;
521 SLIST_HEADER PfnDereferenceSListHead
;
527 ULONG MmShiftedColor
;
529 struct _SINGLE_LIST_ENTRY
*PfnDeferredList
;
532 typedef struct _KPROFILE
536 LIST_ENTRY ListEntry
;
544 struct _KPROCESS
*Process
;
545 } KPROFILE
, *PKPROFILE
;
547 typedef struct _KINTERRUPT
551 LIST_ENTRY InterruptListEntry
;
552 PKSERVICE_ROUTINE ServiceRoutine
;
553 PVOID ServiceContext
;
556 PKSPIN_LOCK ActualLock
;
557 PVOID DispatchAddress
;
560 KIRQL SynchronizeIrql
;
561 BOOLEAN FloatingSave
;
565 KINTERRUPT_MODE Mode
;
568 ULONG DispatchCode
[106];
569 } KINTERRUPT
, *PKINTERRUPT
;
571 typedef struct _KEVENT_PAIR
577 } KEVENT_PAIR
, *PKEVENT_PAIR
;
579 typedef struct _KEXECUTE_OPTIONS
581 UCHAR ExecuteDisable
:1;
582 UCHAR ExecuteEnable
:1;
583 UCHAR DisableThunkEmulation
:1;
585 UCHAR ExecuteDispatchEnable
:1;
586 UCHAR ImageDispatchEnable
:1;
588 } KEXECUTE_OPTIONS
, *PKEXECUTE_OPTIONS
;
590 typedef enum _KOBJECTS
592 EventNotificationObject
= 0,
593 EventSynchronizationObject
= 1,
600 TimerNotificationObject
= 8,
601 TimerSynchronizationObject
= 9,
612 DeviceQueueObject
= 20,
613 EventPairObject
= 21,
614 InterruptObject
= 22,
616 ThreadedDpcObject
= 24,
617 MaximumKernelObject
= 25
620 #include <pshpack1.h>
622 typedef struct _KTHREAD
624 /* For waiting on thread exit */
625 DISPATCHER_HEADER DispatcherHeader
; /* 00 */
627 /* List of mutants owned by the thread */
628 LIST_ENTRY MutantListHead
; /* 10 */
629 PVOID InitialStack
; /* 18 */
630 ULONG_PTR StackLimit
; /* 1C */
632 /* Pointer to the thread's environment block in user memory */
633 struct _TEB
*Teb
; /* 20 */
635 /* Pointer to the thread's TLS array */
636 PVOID TlsArray
; /* 24 */
637 PVOID KernelStack
; /* 28 */
638 UCHAR DebugActive
; /* 2C */
640 /* Thread state (one of THREAD_STATE_xxx constants below) */
641 UCHAR State
; /* 2D */
642 BOOLEAN Alerted
[2]; /* 2E */
644 UCHAR NpxState
; /* 31 */
645 CHAR Saturation
; /* 32 */
646 CHAR Priority
; /* 33 */
647 KAPC_STATE ApcState
; /* 34 */
648 ULONG ContextSwitches
; /* 4C */
649 LONG WaitStatus
; /* 50 */
650 KIRQL WaitIrql
; /* 54 */
651 CHAR WaitMode
; /* 55 */
652 UCHAR WaitNext
; /* 56 */
653 UCHAR WaitReason
; /* 57 */
655 PKWAIT_BLOCK WaitBlockList
; /* 58 */
656 PKGATE GateObject
; /* 58 */
658 LIST_ENTRY WaitListEntry
; /* 5C */
659 ULONG WaitTime
; /* 64 */
660 CHAR BasePriority
; /* 68 */
661 UCHAR DecrementCount
; /* 69 */
662 UCHAR PriorityDecrement
; /* 6A */
663 CHAR Quantum
; /* 6B */
664 KWAIT_BLOCK WaitBlock
[4]; /* 6C */
665 PVOID LegoData
; /* CC */
668 USHORT KernelApcDisable
;
669 USHORT SpecialApcDisable
;
671 ULONG CombinedApcDisable
; /* D0 */
673 KAFFINITY UserAffinity
; /* D4 */
674 UCHAR SystemAffinityActive
;/* D8 */
675 UCHAR PowerState
; /* D9 */
676 UCHAR NpxIrql
; /* DA */
677 UCHAR Pad
[1]; /* DB */
678 PVOID ServiceTable
; /* DC */
679 struct _KQUEUE
*Queue
; /* E0 */
680 KSPIN_LOCK ApcQueueLock
; /* E4 */
681 KTIMER Timer
; /* E8 */
682 LIST_ENTRY QueueListEntry
; /* 110 */
683 KAFFINITY Affinity
; /* 118 */
684 UCHAR Preempted
; /* 11C */
685 UCHAR ProcessReadyQueue
; /* 11D */
686 UCHAR KernelStackResident
; /* 11E */
687 UCHAR NextProcessor
; /* 11F */
688 PVOID CallbackStack
; /* 120 */
689 struct _W32THREAD
*Win32Thread
; /* 124 */
690 struct _KTRAP_FRAME
*TrapFrame
; /* 128 */
691 PKAPC_STATE ApcStatePointer
[2]; /* 12C */
692 UCHAR EnableStackSwap
; /* 134 */
693 UCHAR LargeStack
; /* 135 */
694 UCHAR ResourceIndex
; /* 136 */
695 UCHAR PreviousMode
; /* 137 */
696 ULONG KernelTime
; /* 138 */
697 ULONG UserTime
; /* 13C */
698 KAPC_STATE SavedApcState
; /* 140 */
699 UCHAR Alertable
; /* 158 */
700 UCHAR ApcStateIndex
; /* 159 */
701 UCHAR ApcQueueable
; /* 15A */
702 UCHAR AutoAlignment
; /* 15B */
703 PVOID StackBase
; /* 15C */
704 KAPC SuspendApc
; /* 160 */
705 KSEMAPHORE SuspendSemaphore
; /* 190 */
706 LIST_ENTRY ThreadListEntry
; /* 1A4 */
707 CHAR FreezeCount
; /* 1AC */
708 UCHAR SuspendCount
; /* 1AD */
709 UCHAR IdealProcessor
; /* 1AE */
710 UCHAR DisableBoost
; /* 1AF */
711 UCHAR QuantumReset
; /* 1B0 */
718 * DESCRIPTION: Internal Kernel Process Structure.
719 * PORTABILITY: Architecture Dependent.
720 * KERNEL VERSION: 5.2
721 * DOCUMENTATION: http://reactos.com/wiki/index.php/KPROCESS
723 typedef struct _KPROCESS
725 DISPATCHER_HEADER Header
; /* 000 */
726 LIST_ENTRY ProfileListHead
; /* 010 */
727 PHYSICAL_ADDRESS DirectoryTableBase
; /* 018 */
728 KGDTENTRY LdtDescriptor
; /* 020 */
729 KIDTENTRY Int21Descriptor
; /* 028 */
730 USHORT IopmOffset
; /* 030 */
731 UCHAR Iopl
; /* 032 */
732 UCHAR Unused
; /* 033 */
733 ULONG ActiveProcessors
; /* 034 */
734 ULONG KernelTime
; /* 038 */
735 ULONG UserTime
; /* 03C */
736 LIST_ENTRY ReadyListHead
; /* 040 */
737 LIST_ENTRY SwapListEntry
; /* 048 */
738 PVOID VdmTrapcHandler
; /* 04C */
739 LIST_ENTRY ThreadListHead
; /* 050 */
740 KSPIN_LOCK ProcessLock
; /* 058 */
741 KAFFINITY Affinity
; /* 05C */
744 ULONG AutoAlignment
:1; /* 060.0 */
745 ULONG DisableBoost
:1; /* 060.1 */
746 ULONG DisableQuantum
:1; /* 060.2 */
747 ULONG ReservedFlags
:29; /* 060.3 */
749 ULONG ProcessFlags
; /* 060 */
751 CHAR BasePriority
; /* 064 */
752 CHAR QuantumReset
; /* 065 */
753 UCHAR State
; /* 066 */
754 UCHAR ThreadSeed
; /* 067 */
755 UCHAR PowerState
; /* 068 */
756 UCHAR IdealNode
; /* 069 */
757 UCHAR Visited
; /* 06A */
758 KEXECUTE_OPTIONS Flags
; /* 06B */
759 ULONG StackCount
; /* 06C */
760 LIST_ENTRY ProcessListEntry
; /* 070 */
763 typedef enum _KTHREAD_STATE
773 } KTHREAD_STATE
, *PKTHREAD_STATE
;