- Update KTHREAD and KUSER_SHARED_DATA to latest versions. This should make 2K3 drive...
[reactos.git] / reactos / include / ndk / ketypes.h
index 476c0e1..2f89577 100644 (file)
 #define _KETYPES_H
 
 /* DEPENDENCIES **************************************************************/
-#include "haltypes.h"
-#include "potypes.h"
-#include "mmtypes.h"
+#ifndef NTOS_MODE_USER
 #include <arc/arc.h>
-
 #include "arch/ketypes.h"
+#endif
 
 /* CONSTANTS *****************************************************************/
 #define SSDT_MAX_ENTRIES 4
+#define CONTEXT_DEBUGGER (CONTEXT_FULL | CONTEXT_FLOATING_POINT)
+
+#ifdef NTOS_MODE_USER
+#define SharedUserData ((KUSER_SHARED_DATA * CONST) USER_SHARED_DATA)
+#define MAX_WOW64_SHARED_ENTRIES 16
 #define PROCESSOR_FEATURE_MAX 64
+#endif
 
-#define CONTEXT_DEBUGGER (CONTEXT_FULL | CONTEXT_FLOATING_POINT)
+/* ENUMERATIONS **************************************************************/
 
-#define THREAD_WAIT_OBJECTS 4
+#ifdef NTOS_MODE_USER
+typedef enum _EVENT_TYPE
+{
+    NotificationEvent,
+    SynchronizationEvent
+} EVENT_TYPE;
 
-/* EXPORTED DATA *************************************************************/
-extern CHAR NTOSAPI KeNumberProcessors;
-extern LOADER_PARAMETER_BLOCK NTOSAPI KeLoaderBlock;
-extern ULONG NTOSAPI KeDcacheFlushCount;
-extern ULONG NTOSAPI KeIcacheFlushCount;
-extern KAFFINITY NTOSAPI KeActiveProcessors;
-extern ULONG NTOSAPI KiDmaIoCoherency; /* RISC Architectures only */
-extern ULONG NTOSAPI KeMaximumIncrement;
-extern ULONG NTOSAPI KeMinimumIncrement;
-extern ULONG NTOSAPI NtBuildNumber;
-extern SSDT_ENTRY NTOSAPI KeServiceDescriptorTable[SSDT_MAX_ENTRIES];
-extern SSDT_ENTRY NTOSAPI KeServiceDescriptorTableShadow[SSDT_MAX_ENTRIES];
+typedef enum _TIMER_TYPE
+{
+    NotificationTimer,
+    SynchronizationTimer
+} TIMER_TYPE;
 
-/* ENUMERATIONS **************************************************************/
+typedef enum _WAIT_TYPE
+{
+    WaitAll,
+    WaitAny
+} WAIT_TYPE;
+
+typedef enum _MODE
+{
+    KernelMode,
+    UserMode,
+    MaximumMode
+} MODE;
+
+typedef enum _KWAIT_REASON
+{
+    Executive,
+    FreePage,
+    PageIn,
+    PoolAllocation,
+    DelayExecution,
+    Suspended,
+    UserRequest,
+    WrExecutive,
+    WrFreePage,
+    WrPageIn,
+    WrPoolAllocation,
+    WrDelayExecution,
+    WrSuspended,
+    WrUserRequest,
+    WrEventPair,
+    WrQueue,
+    WrLpcReceive,
+    WrLpcReply,
+    WrVirtualMemory,
+    WrPageOut,
+    WrRendezvous,
+    Spare2,
+    WrGuardedMutex,
+    Spare4,
+    Spare5,
+    Spare6,
+    WrKernel,
+    WrResource,
+    WrPushLock,
+    WrMutex,
+    WrQuantumEnd,
+    WrDispatchInt,
+    WrPreempted,
+    WrYieldExecution,
+    MaximumWaitReason
+} KWAIT_REASON;
+
+typedef enum _KPROFILE_SOURCE
+{
+    ProfileTime,
+    ProfileAlignmentFixup,
+    ProfileTotalIssues,
+    ProfilePipelineDry,
+    ProfileLoadInstructions,
+    ProfilePipelineFrozen,
+    ProfileBranchInstructions,
+    ProfileTotalNonissues,
+    ProfileDcacheMisses,
+    ProfileIcacheMisses,
+    ProfileCacheMisses,
+    ProfileBranchMispredictions,
+    ProfileStoreInstructions,
+    ProfileFpInstructions,
+    ProfileIntegerInstructions,
+    Profile2Issue,
+    Profile3Issue,
+    Profile4Issue,
+    ProfileSpecialInstructions,
+    ProfileTotalCycles,
+    ProfileIcacheIssues,
+    ProfileDcacheAccesses,
+    ProfileMemoryBarrierCycles,
+    ProfileLoadLinkedIssues,
+    ProfileMaximum
+} KPROFILE_SOURCE;
+
+typedef enum _NT_PRODUCT_TYPE
+{
+    NtProductWinNt = 1,
+    NtProductLanManNt,
+    NtProductServer
+} NT_PRODUCT_TYPE, *PNT_PRODUCT_TYPE;
+
+typedef enum _ALTERNATIVE_ARCHITECTURE_TYPE
+{
+    StandardDesign,
+    NEC98x86,
+    EndAlternatives
+} ALTERNATIVE_ARCHITECTURE_TYPE;
+#endif
+
+typedef enum _KTHREAD_STATE
+{
+    Initialized,
+    Ready,
+    Running,
+    Standby,
+    Terminated,
+    Waiting,
+    Transition,
+    DeferredReady,
+} KTHREAD_STATE, *PKTHREAD_STATE;
+
+typedef enum _KPROCESS_STATE
+{
+    ProcessInMemory,
+    ProcessOutOfMemory,
+    ProcessInTransition,
+} KPROCESS_STATE, *PKPROCESS_STATE;
+
+/* FUNCTION TYPES ************************************************************/
+
+#ifdef NTOS_MODE_USER
+typedef VOID
+(NTAPI *PKNORMAL_ROUTINE)(
+    IN PVOID  NormalContext,
+    IN PVOID  SystemArgument1,
+    IN PVOID  SystemArgument2);
+
+typedef VOID
+(NTAPI *PTIMER_APC_ROUTINE)(
+    IN PVOID  TimerContext,
+    IN ULONG  TimerLowValue,
+    IN LONG  TimerHighValue);
+#endif
 
 /* TYPES *********************************************************************/
 
+#ifdef NTOS_MODE_USER
+typedef CCHAR KPROCESSOR_MODE;
+
+typedef struct _KSYSTEM_TIME
+{
+    ULONG LowPart;
+    LONG High1Time;
+    LONG High2Time;
+} KSYSTEM_TIME, *PKSYSTEM_TIME;
+
+typedef struct _KUSER_SHARED_DATA
+{
+    ULONG TickCountLowDeprecated;
+    ULONG TickCountMultiplier;
+    volatile KSYSTEM_TIME InterruptTime;
+    volatile KSYSTEM_TIME SystemTime;
+    volatile KSYSTEM_TIME TimeZoneBias;
+    USHORT ImageNumberLow;
+    USHORT ImageNumberHigh;
+    WCHAR NtSystemRoot[260];
+    ULONG MaxStackTraceDepth;
+    ULONG CryptoExponent;
+    ULONG TimeZoneId;
+    ULONG LargePageMinimum;
+    ULONG Reserved2[7];
+    NT_PRODUCT_TYPE NtProductType;
+    BOOLEAN ProductTypeIsValid;
+    ULONG NtMajorVersion;
+    ULONG NtMinorVersion;
+    BOOLEAN ProcessorFeatures[PROCESSOR_FEATURE_MAX];
+    ULONG Reserved1;
+    ULONG Reserved3;
+    volatile ULONG TimeSlip;
+    ALTERNATIVE_ARCHITECTURE_TYPE AlternativeArchitecture;
+    LARGE_INTEGER SystemExpirationDate;
+    ULONG SuiteMask;
+    BOOLEAN KdDebuggerEnabled;
+    volatile ULONG ActiveConsoleId;
+    volatile ULONG DismountCount;
+    ULONG ComPlusPackage;
+    ULONG LastSystemRITEventTickCount;
+    ULONG NumberOfPhysicalPages;
+    BOOLEAN SafeBootMode;
+    ULONG TraceLogging;
+    ULONG Fill0;
+    ULONGLONG TestRetInstruction;
+    ULONG SystemCall;
+    ULONG SystemCallReturn;
+    ULONGLONG SystemCallPad[3];
+    union {
+        volatile KSYSTEM_TIME TickCount;
+        volatile ULONG64 TickCountQuad;
+    };
+    ULONG Cookie;
+    LONGLONG ConsoleSessionForegroundProcessId;
+    ULONG Wow64SharedInformation[MAX_WOW64_SHARED_ENTRIES];
+    ULONG UserModeGlobalLogging;
+} KUSER_SHARED_DATA, *PKUSER_SHARED_DATA;
+#endif
+
+#ifndef NTOS_MODE_USER
 typedef struct _CONFIGURATION_COMPONENT_DATA
 {
     struct _CONFIGURATION_COMPONENT_DATA *Parent;
@@ -57,26 +249,6 @@ typedef enum _KAPC_ENVIRONMENT
     CurrentApcEnvironment
 } KAPC_ENVIRONMENT;
 
-typedef struct _KDPC_DATA
-{
-    LIST_ENTRY  DpcListHead;
-    ULONG  DpcLock;
-    ULONG  DpcQueueDepth;
-    ULONG  DpcCount;
-} KDPC_DATA, *PKDPC_DATA;
-
-/* We don't want to force NTIFS usage only for a single structure */
-#ifndef _NTIFS_
-typedef struct _KAPC_STATE
-{
-    LIST_ENTRY  ApcListHead[2];
-    PKPROCESS   Process;
-    BOOLEAN     KernelApcInProgress;
-    BOOLEAN     KernelApcPending;
-    BOOLEAN     UserApcPending;
-} KAPC_STATE, *PKAPC_STATE, *RESTRICTED_POINTER PRKAPC_STATE;
-#endif
-
 typedef struct _KNODE
 {
    SLIST_HEADER DeadStackList;
@@ -100,7 +272,7 @@ typedef struct _KPROFILE
     PVOID RegionEnd;
     ULONG BucketShift;
     PVOID Buffer;
-    CSHORT Source;
+    KPROFILE_SOURCE Source;
     ULONG Affinity;
     BOOLEAN Active;
     struct _KPROCESS *Process;
@@ -108,26 +280,26 @@ typedef struct _KPROFILE
 
 typedef struct _KINTERRUPT
 {
-    CSHORT              Type;
-    CSHORT              Size;
-    LIST_ENTRY          InterruptListEntry;
-    PKSERVICE_ROUTINE   ServiceRoutine;
-    PVOID               ServiceContext;
-    KSPIN_LOCK          SpinLock;
-    ULONG               TickCount;
-    PKSPIN_LOCK         ActualLock;
-    PVOID               DispatchAddress;
-    ULONG               Vector;
-    KIRQL               Irql;
-    KIRQL               SynchronizeIrql;
-    BOOLEAN             FloatingSave;
-    BOOLEAN             Connected;
-    CHAR                Number;
-    UCHAR               ShareVector;
-    KINTERRUPT_MODE     Mode;
-    ULONG               ServiceCount;
-    ULONG               DispatchCount;
-    ULONG               DispatchCode[106];
+    CSHORT Type;
+    CSHORT Size;
+    LIST_ENTRY InterruptListEntry;
+    PKSERVICE_ROUTINE ServiceRoutine;
+    PVOID ServiceContext;
+    KSPIN_LOCK SpinLock;
+    ULONG TickCount;
+    PKSPIN_LOCK ActualLock;
+    PVOID DispatchAddress;
+    ULONG Vector;
+    KIRQL Irql;
+    KIRQL SynchronizeIrql;
+    BOOLEAN FloatingSave;
+    BOOLEAN Connected;
+    CHAR Number;
+    UCHAR ShareVector;
+    KINTERRUPT_MODE Mode;
+    ULONG ServiceCount;
+    ULONG DispatchCount;
+    ULONG DispatchCode[106];
 } KINTERRUPT, *PKINTERRUPT;
 
 typedef struct _KEVENT_PAIR
@@ -183,118 +355,194 @@ typedef enum _KOBJECTS
 
 typedef struct _KTHREAD
 {
-    /* For waiting on thread exit */
-    DISPATCHER_HEADER DispatcherHeader;    /* 00 */
-
-    /* List of mutants owned by the thread */
-    LIST_ENTRY        MutantListHead;      /* 10 */
-    PVOID             InitialStack;        /* 18 */
-    ULONG_PTR         StackLimit;          /* 1C */
-
-    /* Pointer to the thread's environment block in user memory */
-    struct _TEB       *Teb;                /* 20 */
-
-    /* Pointer to the thread's TLS array */
-    PVOID             TlsArray;            /* 24 */
-    PVOID             KernelStack;         /* 28 */
-    UCHAR             DebugActive;         /* 2C */
-
-    /* Thread state (one of THREAD_STATE_xxx constants below) */
-    UCHAR             State;               /* 2D */
-    BOOLEAN           Alerted[2];          /* 2E */
-    UCHAR             Iopl;                /* 30 */
-    UCHAR             NpxState;            /* 31 */
-    CHAR              Saturation;          /* 32 */
-    CHAR              Priority;            /* 33 */
-    KAPC_STATE        ApcState;            /* 34 */
-    ULONG             ContextSwitches;     /* 4C */
-    LONG              WaitStatus;          /* 50 */
-    KIRQL             WaitIrql;            /* 54 */
-    CHAR              WaitMode;            /* 55 */
-    UCHAR             WaitNext;            /* 56 */
-    UCHAR             WaitReason;          /* 57 */
-    union                                  /* 58 */
-    {
-        PKWAIT_BLOCK  WaitBlockList;      /* 58 */
-        PKGATE        GateObject;         /* 58 */
-    };                                     /* 58 */
-    LIST_ENTRY        WaitListEntry;       /* 5C */
-    ULONG             WaitTime;            /* 64 */
-    CHAR              BasePriority;        /* 68 */
-    UCHAR             DecrementCount;      /* 69 */
-    UCHAR             PriorityDecrement;   /* 6A */
-    CHAR              Quantum;             /* 6B */
-    KWAIT_BLOCK       WaitBlock[4];        /* 6C */
-    PVOID             LegoData;            /* CC */
-    union
-    {
-        struct
-        {
-            USHORT KernelApcDisable;
-            USHORT SpecialApcDisable;
-        };
-        ULONG      CombinedApcDisable;     /* D0 */
-    };
-    KAFFINITY         UserAffinity;        /* D4 */
-    UCHAR             SystemAffinityActive;/* D8 */
-    UCHAR             PowerState;          /* D9 */
-    UCHAR             NpxIrql;             /* DA */
-    UCHAR             Pad[1];              /* DB */
-    PVOID             ServiceTable;        /* DC */
-    struct _KQUEUE    *Queue;              /* E0 */
-    KSPIN_LOCK        ApcQueueLock;        /* E4 */
-    KTIMER            Timer;               /* E8 */
-    LIST_ENTRY        QueueListEntry;      /* 110 */
-    KAFFINITY         Affinity;            /* 118 */
-    UCHAR             Preempted;           /* 11C */
-    UCHAR             ProcessReadyQueue;   /* 11D */
-    UCHAR             KernelStackResident; /* 11E */
-    UCHAR             NextProcessor;       /* 11F */
-    PVOID             CallbackStack;       /* 120 */
-    struct _W32THREAD *Win32Thread;        /* 124 */
-    struct _KTRAP_FRAME *TrapFrame;        /* 128 */
-    PKAPC_STATE       ApcStatePointer[2];  /* 12C */
-    UCHAR             EnableStackSwap;     /* 134 */
-    UCHAR             LargeStack;          /* 135 */
-    UCHAR             ResourceIndex;       /* 136 */
-    UCHAR             PreviousMode;        /* 137 */
-    ULONG             KernelTime;          /* 138 */
-    ULONG             UserTime;            /* 13C */
-    KAPC_STATE        SavedApcState;       /* 140 */
-    UCHAR             Alertable;           /* 158 */
-    UCHAR             ApcStateIndex;       /* 159 */
-    UCHAR             ApcQueueable;        /* 15A */
-    UCHAR             AutoAlignment;       /* 15B */
-    PVOID             StackBase;           /* 15C */
-    KAPC              SuspendApc;          /* 160 */
-    KSEMAPHORE        SuspendSemaphore;    /* 190 */
-    LIST_ENTRY        ThreadListEntry;     /* 1A4 */
-    CHAR              FreezeCount;         /* 1AC */
-    UCHAR             SuspendCount;        /* 1AD */
-    UCHAR             IdealProcessor;      /* 1AE */
-    UCHAR             DisableBoost;        /* 1AF */
-    UCHAR             QuantumReset;        /* 1B0 */
-} KTHREAD;
+    DISPATCHER_HEADER DispatcherHeader;                 /* 00 */
+    LIST_ENTRY MutantListHead;                          /* 10 */
+    PVOID InitialStack;                                 /* 18 */
+    ULONG_PTR StackLimit;                               /* 1C */
+    PVOID KernelStack;                                  /* 20 */
+    KSPIN_LOCK ThreadLock;                              /* 24 */
+    union                                               /* 28 */
+    {                                                   /* 28 */
+        KAPC_STATE ApcState;                            /* 34 */
+        struct                                          /* 28 */
+        {                                               /* 28 */
+            UCHAR ApcStateFill[23];                     /* 34 */
+            UCHAR ApcQueueable;                         /* 3F */
+        };                                              /* 3F */
+    };                                                  /* 3F */
+    UCHAR NextProcessor;                                /* 40 */
+    UCHAR DeferredProcessor;                            /* 41 */
+    UCHAR AdjustReason;                                 /* 42 */
+    UCHAR AdjustIncrement;                              /* 43 */
+    KSPIN_LOCK ApcQueueLock;                            /* 44 */
+    ULONG ContextSwitches;                              /* 48 */
+    UCHAR State;                                        /* 4C */
+    UCHAR NpxState;                                     /* 4D */
+    UCHAR WaitIrql;                                     /* 4E */
+    UCHAR WaitMode;                                     /* 4F */
+    LONG WaitStatus;                                    /* 50 */
+    union                                               /* 54 */
+    {                                                   /* 54 */
+        PKWAIT_BLOCK WaitBlockList;                     /* 54 */
+        PKGATE GateObject;                              /* 54 */
+    };                                                  /* 54 */
+    UCHAR Alertable;                                    /* 58 */
+    UCHAR WaitNext;                                     /* 59 */
+    UCHAR WaitReason;                                   /* 5A */
+    UCHAR Priority;                                     /* 5B */
+    UCHAR EnableStackSwap;                              /* 5C */
+    UCHAR SwapBusy;                                     /* 5D */
+    UCHAR Alerted[2];                                   /* 5E */
+    union                                               /* 60 */
+    {                                                   /* 60 */
+        LIST_ENTRY WaitListEntry;                       /* 60 */
+        SINGLE_LIST_ENTRY SwapListEntry;                /* 60 */
+    };                                                  /* 68 */
+    PKQUEUE Queue;                                      /* 68 */
+    ULONG WaitTime;                                     /* 6C */
+    union                                               /* 70 */
+    {                                                   /* 70 */
+        struct                                          /* 70 */
+        {                                               /* 70 */
+            USHORT KernelApcDisable;                    /* 70 */
+            USHORT SpecialApcDisable;                   /* 72 */
+        };                                              /* 70 */
+        ULONG CombinedApcDisable;                       /* 70 */
+    };                                                  /* 74 */
+    struct _TEB *Teb;                                   /* 74 */
+    union                                               /* 78 */
+    {                                                   /* 78 */
+        KTIMER Timer;                                   /* 78 */
+        UCHAR TimerFill[40];                            /* 78 */
+    };                                                  /* 78 */
+    union                                               /* A0 */
+    {                                                   /* A0 */
+        struct                                          /* A0 */
+        {                                               /* A0 */
+            LONG AutoAlignment:1;                       /* A0 */
+            LONG DisableBoost:1;                        /* A0 */
+            LONG ReservedFlags:30;                      /* A0 */
+        };                                              /* A0 */
+        LONG ThreadFlags;                               /* A0 */
+    };                                                  /* A0 */
+    PVOID Padding;                                      /* A4 */
+    union                                               /* A8 */
+    {                                                   /* A8 */
+        KWAIT_BLOCK WaitBlock[4];                       /* A8 */
+        union                                           /* A8 */
+        {                                               /* A8 */
+            struct                                      /* A8 */
+            {                                           /* A8 */
+                UCHAR WaitBlockFill0[23];               /* A8 */
+                UCHAR SystemAffinityActive;             /* BF */
+            };                                          /* A8 */
+            struct                                      /* A8 */
+            {                                           /* A8 */
+                UCHAR WaitBlockFill1[47];               /* A8 */
+                UCHAR PreviousMode;                     /* D7 */
+            };                                          /* A8 */
+            struct                                      /* A8 */
+            {                                           /* A8 */
+                UCHAR WaitBlockFill2[71];               /* A8 */
+                UCHAR ResourceIndex;                    /* EF */
+            };                                          /* A8 */
+            struct                                      /* A8 */
+            {                                           /* A8 */
+                UCHAR WaitBlockFill3[95];               /* A8 */
+                UCHAR LargeStack;                       /* 107 */
+            };                                          /* A8 */
+        };                                              /* A8 */
+    };                                                  /* A8 */
+    LIST_ENTRY QueueListEntry;                          /* 108 */
+    PKTRAP_FRAME TrapFrame;                             /* 110 */
+    PVOID CallbackStack;                                /* 114 */
+    PVOID ServiceTable;                                 /* 118 */
+    UCHAR ApcStateIndex;                                /* 11C */
+    UCHAR IdealProcessor;                               /* 11D */
+    UCHAR Preempted;                                    /* 11E */
+    UCHAR ProcessReadyQueue;                            /* 11F */
+    UCHAR KernelStackResident;                          /* 120 */
+    CHAR BasePriority;                                  /* 121 */
+    CHAR PriorityDecrement;                             /* 122 */
+    CHAR Saturation;                                    /* 123 */
+    KAFFINITY UserAffinity;                             /* 124 */
+    struct _KPROCESS *Process;                          /* 128 */
+    KAFFINITY Affinity;                                 /* 12C */
+    PKAPC_STATE ApcStatePointer[2];                     /* 130 */
+    union                                               /* 138 */
+    {                                                   /* 138 */
+        KAPC_STATE SavedApcState;                       /* 138 */
+        union                                           /* 138 */
+        {                                               /* 138 */
+            UCHAR SavedApcStateFill[23];                /* 138 */
+            CHAR FreezeCount;                           /* 14F */
+        };                                              /* 138 */
+    };                                                  /* 138 */
+    CHAR SuspendCount;                                  /* 150 */
+    UCHAR UserIdealProcessor;                           /* 151 */
+    UCHAR CalloutActive;                                /* 152 */
+    UCHAR Iopl;                                         /* 153 */
+    PVOID Win32Thread;                                  /* 154 */
+    PVOID StackBase;                                    /* 158 */
+    union                                               /* 15C */
+    {                                                   /* 15C */
+        KAPC SuspendApc;                                /* 15C */
+        union                                           /* 15C */
+        {                                               /* 15C */
+            UCHAR SuspendApcFill0[1];                   /* 15C */
+            CHAR Quantum;                               /* 15D */
+        };                                              /* 15C */
+        union                                           /* 15C */
+        {                                               /* 15C */
+            UCHAR SuspendApcFill1[3];                   /* 15C */
+            UCHAR QuantumReset;                         /* 15F */
+        };                                              /* 15C */
+        union                                           /* 15C */
+        {                                               /* 15C */
+            UCHAR SuspendApcFill2[4];                   /* 15C */
+            ULONG KernelTime;                           /* 160 */
+        };                                              /* 15C */
+        union                                           /* 15C */
+        {                                               /* 15C */
+            UCHAR SuspendApcFill3[36];                  /* 15C */
+            PVOID TlsArray;                             /* 180 */
+        };                                              /* 15C */
+        union                                           /* 15C */
+        {                                               /* 15C */
+            UCHAR SuspendApcFill4[40];                  /* 15C */
+            PVOID LegoData;                             /* 184 */
+        };                                              /* 15C */
+        union                                           /* 15C */
+        {                                               /* 15C */
+            UCHAR SuspendApcFill5[47];                  /* 15C */
+            UCHAR PowerState;                           /* 18B */
+        };                                              /* 15C */
+    };                                                  /* 15C */
+    ULONG UserTime;                                     /* 18C */
+    union                                               /* 190 */
+    {                                                   /* 190 */
+        KSEMAPHORE SuspendSemaphore;                    /* 190 */
+        UCHAR SuspendSemaphorefill[20];                 /* 190 */
+    };                                                  /* 190 */
+    ULONG SListFaultCount;                              /* 1A4 */
+    LIST_ENTRY ThreadListEntry;                         /* 1A8 */
+    PVOID SListFaultAddress;                            /* 1B0 */
+} KTHREAD;                                              /* sizeof: 1B4 */
 
 #include <poppack.h>
 
-/*
- * NAME:           KPROCESS
- * DESCRIPTION:    Internal Kernel Process Structure.
- * PORTABILITY:    Architecture Dependent.
- * KERNEL VERSION: 5.2
- * DOCUMENTATION:  http://reactos.com/wiki/index.php/KPROCESS
- */
 typedef struct _KPROCESS
 {
     DISPATCHER_HEADER     Header;                    /* 000 */
     LIST_ENTRY            ProfileListHead;           /* 010 */
     PHYSICAL_ADDRESS      DirectoryTableBase;        /* 018 */
+#if defined(_M_IX86)
     KGDTENTRY             LdtDescriptor;             /* 020 */
     KIDTENTRY             Int21Descriptor;           /* 028 */
     USHORT                IopmOffset;                /* 030 */
     UCHAR                 Iopl;                      /* 032 */
     UCHAR                 Unused;                    /* 033 */
+#endif
     ULONG                 ActiveProcessors;          /* 034 */
     ULONG                 KernelTime;                /* 038 */
     ULONG                 UserTime;                  /* 03C */
@@ -327,16 +575,31 @@ typedef struct _KPROCESS
     LIST_ENTRY            ProcessListEntry;          /* 070 */
 } KPROCESS;
 
-typedef enum _KTHREAD_STATE
+typedef struct _KSERVICE_TABLE_DESCRIPTOR
 {
-    Initialized,
-    Ready,
-    Running,
-    Standby,
-    Terminated,
-    Waiting,
-    Transition,
-    DeferredReady,
-} KTHREAD_STATE, *PKTHREAD_STATE;
+    PULONG_PTR Base;
+    PULONG Count;
+    ULONG Limit;
+#if defined(_IA64_)
+    LONG TableBaseGpOffset;
+#endif
+    PUCHAR Number;
+} KSERVICE_TABLE_DESCRIPTOR, *PKSERVICE_TABLE_DESCRIPTOR;
+#endif /* !NTOS_MODE_USER */
+
+/* EXPORTED DATA *************************************************************/
+#ifndef NTOS_MODE_USER
+extern CHAR NTSYSAPI KeNumberProcessors;
+extern LOADER_PARAMETER_BLOCK NTSYSAPI KeLoaderBlock;
+extern ULONG NTSYSAPI KeDcacheFlushCount;
+extern ULONG NTSYSAPI KeIcacheFlushCount;
+extern KAFFINITY NTSYSAPI KeActiveProcessors;
+extern ULONG NTSYSAPI KiDmaIoCoherency; /* RISC Architectures only */
+extern ULONG NTSYSAPI KeMaximumIncrement;
+extern ULONG NTSYSAPI KeMinimumIncrement;
+extern ULONG NTSYSAPI NtBuildNumber;
+extern KSERVICE_TABLE_DESCRIPTOR NTSYSAPI KeServiceDescriptorTable[SSDT_MAX_ENTRIES];
+extern KSERVICE_TABLE_DESCRIPTOR NTSYSAPI KeServiceDescriptorTableShadow[SSDT_MAX_ENTRIES];
+#endif
 
 #endif