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
191 DWORD Reserved_0
: 1;
192 DWORD Default_Big
: 1;
193 DWORD Granularity
: 1;
197 } LDT_ENTRY
, *PLDT_ENTRY
, *LPLDT_ENTRY
;
200 typedef struct _KGDTENTRY
221 ULONG Reserved_0
: 1;
222 ULONG Default_Big
: 1;
223 ULONG Granularity
: 1;
227 } KGDTENTRY
, *PKGDTENTRY
;
229 typedef struct _KIDTENTRY
234 USHORT ExtendedOffset
;
235 } KIDTENTRY
, *PKIDTENTRY
;
237 typedef struct _HARDWARE_PTE_X86
242 ULONG WriteThrough
: 1;
243 ULONG CacheDisable
: 1;
248 ULONG CopyOnWrite
: 1;
251 ULONG PageFrameNumber
: 20;
252 } HARDWARE_PTE_X86
, *PHARDWARE_PTE_X86
;
254 typedef struct _DESCRIPTOR
259 } KDESCRIPTOR
, *PKDESCRIPTOR
;
261 typedef struct _KSPECIAL_REGISTERS
278 } KSPECIAL_REGISTERS
, *PKSPECIAL_REGISTERS
;
282 typedef struct _KPROCESSOR_STATE
284 PCONTEXT ContextFrame
;
285 KSPECIAL_REGISTERS SpecialRegisters
;
288 /* Processor Control Block */
289 typedef struct _KPRCB
293 struct _KTHREAD
*CurrentThread
;
294 struct _KTHREAD
*NextThread
;
295 struct _KTHREAD
*IdleThread
;
303 KPROCESSOR_STATE ProcessorState
;
304 ULONG KernelReserved
[16];
305 ULONG HalReserved
[16];
307 PVOID LockQueue
[33]; // Used for Queued Spinlocks
308 struct _KTHREAD
*NpxThread
;
309 ULONG InterruptCount
;
315 ULONG AdjustDpcThreshold
;
318 UCHAR DebuggerSavedIRQL
;
320 struct _KNODE
*ParentNode
;
321 ULONG MultiThreadProcessorSet
;
322 struct _KPRCB
*MultiThreadSetMaster
;
323 ULONG ThreadStartCount
[2];
324 ULONG CcFastReadNoWait
;
325 ULONG CcFastReadWait
;
326 ULONG CcFastReadNotPossible
;
327 ULONG CcCopyReadNoWait
;
328 ULONG CcCopyReadWait
;
329 ULONG CcCopyReadNoWaitMiss
;
330 ULONG KeAlignmentFixupCount
;
331 ULONG KeContextSwitches
;
332 ULONG KeDcacheFlushCount
;
333 ULONG KeExceptionDispatchCount
;
334 ULONG KeFirstLevelTbFills
;
335 ULONG KeFloatingEmulationCount
;
336 ULONG KeIcacheFlushCount
;
337 ULONG KeSecondLevelTbFills
;
339 ULONG IoReadOperationCount
;
340 ULONG IoWriteOperationCount
;
341 ULONG IoOtherOperationCount
;
342 LARGE_INTEGER IoReadTransferCount
;
343 LARGE_INTEGER IoWriteTransferCount
;
344 LARGE_INTEGER IoOtherTransferCount
;
345 ULONG SpareCounter1
[8];
346 PP_LOOKASIDE_LIST PPLookasideList
[16];
347 PP_LOOKASIDE_LIST PPNPagedLookasideList
[32];
348 PP_LOOKASIDE_LIST PPPagedLookasideList
[32];
353 PVOID CurrentPacket
[3];
355 ULONG_PTR WorkerRoutine
;
358 ULONG RequestSummary
;
359 struct _KPRCB
*SignalDone
;
361 struct _KDPC_DATA DpcData
[2];
363 ULONG MaximumDpcQueueDepth
;
364 ULONG DpcRequestRate
;
365 ULONG MinimumDpcRate
;
366 UCHAR DpcInterruptRequested
;
367 UCHAR DpcThreadRequested
;
368 UCHAR DpcRoutineActive
;
369 UCHAR DpcThreadActive
;
375 struct _KEVENT
*DpcEvent
;
376 UCHAR ThreadDpcEnable
;
380 ULONG DpcSetEventRequest
;
383 struct _KDPC
* CallDpc
;
385 LIST_ENTRY WaitListHead
;
387 ULONG SelectNextLast
;
388 LIST_ENTRY DispatcherReadyListHead
[32];
389 SINGLE_LIST_ENTRY DeferredReadyListHead
;
391 PVOID ChainedInterruptList
;
392 LONG LookasideIrpFloat
;
393 LONG MmPageFaultCount
;
394 LONG MmCopyOnWriteCount
;
395 LONG MmTransitionCount
;
396 LONG MmCacheTransitionCount
;
397 LONG MmDemandZeroCount
;
398 LONG MmPageReadCount
;
399 LONG MmPageReadIoCount
;
400 LONG MmCacheReadCount
;
402 LONG MmDirtyPagesWriteCount
;
403 LONG MmDirtyWriteIoCount
;
404 LONG MmMappedPagesWriteCount
;
405 LONG MmMappedWriteIoCount
;
406 ULONG SpareFields0
[1];
407 CHAR VendorString
[13];
409 UCHAR LogicalProcessorsPerPhysicalProcessor
;
412 LARGE_INTEGER UpdateSignature
;
413 LARGE_INTEGER IsrTime
;
414 LARGE_INTEGER SpareField1
;
415 FX_SAVE_AREA NpxSaveArea
;
416 PROCESSOR_POWER_STATE PowerState
;
420 * This is the complete, internal KPCR structure
422 typedef struct _KIPCR
424 KPCR_TIB Tib
; /* 00 */
425 struct _KPCR
*Self
; /* 1C */
426 struct _KPRCB
*Prcb
; /* 20 */
429 ULONG IrrActive
; /* 2C */
431 PVOID KdVersionBlock
; /* 34 */
432 PUSHORT IDT
; /* 38 */
433 PUSHORT GDT
; /* 3C */
434 struct _KTSS
*TSS
; /* 40 */
435 USHORT MajorVersion
; /* 44 */
436 USHORT MinorVersion
; /* 46 */
437 KAFFINITY SetMember
; /* 48 */
438 ULONG StallScaleFactor
; /* 4C */
439 UCHAR SparedUnused
; /* 50 */
440 UCHAR Number
; /* 51 */
441 UCHAR Reserved
; /* 52 */
442 UCHAR L2CacheAssociativity
; /* 53 */
443 ULONG VdmAlert
; /* 54 */
444 ULONG KernelReserved
[14]; /* 58 */
445 ULONG L2CacheSize
; /* 90 */
446 ULONG HalReserved
[16]; /* 94 */
447 ULONG InterruptMode
; /* D4 */
448 UCHAR KernelReserved2
[0x48]; /* D8 */
449 KPRCB PrcbData
; /* 120 */
454 #include <pshpack1.h>
456 typedef struct _KTSSNOIOPM
496 /* no interrupt redirection map */
540 /* no interrupt redirection map */
541 UCHAR IoBitmap
[8193];
546 /* i386 Doesn't have Exception Frames */
547 typedef struct _KEXCEPTION_FRAME
550 } KEXCEPTION_FRAME
, *PKEXCEPTION_FRAME
;
552 typedef struct _KNODE
554 SLIST_HEADER DeadStackList
;
555 SLIST_HEADER PfnDereferenceSListHead
;
561 ULONG MmShiftedColor
;
563 struct _SINGLE_LIST_ENTRY
*PfnDeferredList
;
566 typedef struct _KPROFILE
570 LIST_ENTRY ListEntry
;
578 struct _KPROCESS
*Process
;
579 } KPROFILE
, *PKPROFILE
;
581 typedef struct _KINTERRUPT
585 LIST_ENTRY InterruptListEntry
;
586 PKSERVICE_ROUTINE ServiceRoutine
;
587 PVOID ServiceContext
;
590 PKSPIN_LOCK ActualLock
;
591 PVOID DispatchAddress
;
594 KIRQL SynchronizeIrql
;
595 BOOLEAN FloatingSave
;
599 KINTERRUPT_MODE Mode
;
602 ULONG DispatchCode
[106];
603 } KINTERRUPT
, *PKINTERRUPT
;
605 typedef struct _KEVENT_PAIR
611 } KEVENT_PAIR
, *PKEVENT_PAIR
;
613 typedef struct _KEXECUTE_OPTIONS
615 UCHAR ExecuteDisable
:1;
616 UCHAR ExecuteEnable
:1;
617 UCHAR DisableThunkEmulation
:1;
619 UCHAR ExecuteDispatchEnable
:1;
620 UCHAR ImageDispatchEnable
:1;
622 } KEXECUTE_OPTIONS
, *PKEXECUTE_OPTIONS
;
624 typedef enum _KOBJECTS
626 EventNotificationObject
= 0,
627 EventSynchronizationObject
= 1,
634 TimerNotificationObject
= 8,
635 TimerSynchronizationObject
= 9,
646 DeviceQueueObject
= 20,
647 EventPairObject
= 21,
648 InterruptObject
= 22,
650 ThreadedDpcObject
= 24,
651 MaximumKernelObject
= 25
654 #include <pshpack1.h>
656 typedef struct _KTHREAD
658 /* For waiting on thread exit */
659 DISPATCHER_HEADER DispatcherHeader
; /* 00 */
661 /* List of mutants owned by the thread */
662 LIST_ENTRY MutantListHead
; /* 10 */
663 PVOID InitialStack
; /* 18 */
664 ULONG_PTR StackLimit
; /* 1C */
666 /* Pointer to the thread's environment block in user memory */
667 struct _TEB
*Teb
; /* 20 */
669 /* Pointer to the thread's TLS array */
670 PVOID TlsArray
; /* 24 */
671 PVOID KernelStack
; /* 28 */
672 UCHAR DebugActive
; /* 2C */
674 /* Thread state (one of THREAD_STATE_xxx constants below) */
675 UCHAR State
; /* 2D */
676 BOOLEAN Alerted
[2]; /* 2E */
678 UCHAR NpxState
; /* 31 */
679 CHAR Saturation
; /* 32 */
680 CHAR Priority
; /* 33 */
681 KAPC_STATE ApcState
; /* 34 */
682 ULONG ContextSwitches
; /* 4C */
683 LONG WaitStatus
; /* 50 */
684 KIRQL WaitIrql
; /* 54 */
685 CHAR WaitMode
; /* 55 */
686 UCHAR WaitNext
; /* 56 */
687 UCHAR WaitReason
; /* 57 */
690 PKWAIT_BLOCK WaitBlockList
; /* 58 */
691 PKGATE GateObject
; /* 58 */
693 LIST_ENTRY WaitListEntry
; /* 5C */
694 ULONG WaitTime
; /* 64 */
695 CHAR BasePriority
; /* 68 */
696 UCHAR DecrementCount
; /* 69 */
697 UCHAR PriorityDecrement
; /* 6A */
698 CHAR Quantum
; /* 6B */
699 KWAIT_BLOCK WaitBlock
[4]; /* 6C */
700 PVOID LegoData
; /* CC */
705 USHORT KernelApcDisable
;
706 USHORT SpecialApcDisable
;
708 ULONG CombinedApcDisable
; /* D0 */
710 KAFFINITY UserAffinity
; /* D4 */
711 UCHAR SystemAffinityActive
;/* D8 */
712 UCHAR PowerState
; /* D9 */
713 UCHAR NpxIrql
; /* DA */
714 UCHAR Pad
[1]; /* DB */
715 PVOID ServiceTable
; /* DC */
716 struct _KQUEUE
*Queue
; /* E0 */
717 KSPIN_LOCK ApcQueueLock
; /* E4 */
718 KTIMER Timer
; /* E8 */
719 LIST_ENTRY QueueListEntry
; /* 110 */
720 KAFFINITY Affinity
; /* 118 */
721 UCHAR Preempted
; /* 11C */
722 UCHAR ProcessReadyQueue
; /* 11D */
723 UCHAR KernelStackResident
; /* 11E */
724 UCHAR NextProcessor
; /* 11F */
725 PVOID CallbackStack
; /* 120 */
726 struct _W32THREAD
*Win32Thread
; /* 124 */
727 struct _KTRAP_FRAME
*TrapFrame
; /* 128 */
728 PKAPC_STATE ApcStatePointer
[2]; /* 12C */
729 UCHAR EnableStackSwap
; /* 134 */
730 UCHAR LargeStack
; /* 135 */
731 UCHAR ResourceIndex
; /* 136 */
732 UCHAR PreviousMode
; /* 137 */
733 ULONG KernelTime
; /* 138 */
734 ULONG UserTime
; /* 13C */
735 KAPC_STATE SavedApcState
; /* 140 */
736 UCHAR Alertable
; /* 158 */
737 UCHAR ApcStateIndex
; /* 159 */
738 UCHAR ApcQueueable
; /* 15A */
739 UCHAR AutoAlignment
; /* 15B */
740 PVOID StackBase
; /* 15C */
741 KAPC SuspendApc
; /* 160 */
742 KSEMAPHORE SuspendSemaphore
; /* 190 */
743 LIST_ENTRY ThreadListEntry
; /* 1A4 */
744 CHAR FreezeCount
; /* 1AC */
745 UCHAR SuspendCount
; /* 1AD */
746 UCHAR IdealProcessor
; /* 1AE */
747 UCHAR DisableBoost
; /* 1AF */
748 UCHAR QuantumReset
; /* 1B0 */
755 * DESCRIPTION: Internal Kernel Process Structure.
756 * PORTABILITY: Architecture Dependent.
757 * KERNEL VERSION: 5.2
758 * DOCUMENTATION: http://reactos.com/wiki/index.php/KPROCESS
760 typedef struct _KPROCESS
762 DISPATCHER_HEADER Header
; /* 000 */
763 LIST_ENTRY ProfileListHead
; /* 010 */
764 PHYSICAL_ADDRESS DirectoryTableBase
; /* 018 */
765 KGDTENTRY LdtDescriptor
; /* 020 */
766 KIDTENTRY Int21Descriptor
; /* 028 */
767 USHORT IopmOffset
; /* 030 */
768 UCHAR Iopl
; /* 032 */
769 UCHAR Unused
; /* 033 */
770 ULONG ActiveProcessors
; /* 034 */
771 ULONG KernelTime
; /* 038 */
772 ULONG UserTime
; /* 03C */
773 LIST_ENTRY ReadyListHead
; /* 040 */
774 LIST_ENTRY SwapListEntry
; /* 048 */
775 PVOID VdmTrapcHandler
; /* 04C */
776 LIST_ENTRY ThreadListHead
; /* 050 */
777 KSPIN_LOCK ProcessLock
; /* 058 */
778 KAFFINITY Affinity
; /* 05C */
783 ULONG AutoAlignment
:1; /* 060.0 */
784 ULONG DisableBoost
:1; /* 060.1 */
785 ULONG DisableQuantum
:1; /* 060.2 */
786 ULONG ReservedFlags
:29; /* 060.3 */
788 ULONG ProcessFlags
; /* 060 */
790 CHAR BasePriority
; /* 064 */
791 CHAR QuantumReset
; /* 065 */
792 UCHAR State
; /* 066 */
793 UCHAR ThreadSeed
; /* 067 */
794 UCHAR PowerState
; /* 068 */
795 UCHAR IdealNode
; /* 069 */
796 UCHAR Visited
; /* 06A */
797 KEXECUTE_OPTIONS Flags
; /* 06B */
798 ULONG StackCount
; /* 06C */
799 LIST_ENTRY ProcessListEntry
; /* 070 */
802 typedef enum _KTHREAD_STATE
812 } KTHREAD_STATE
, *PKTHREAD_STATE
;