- Add some more misc. public definitions and fix exfuncs.h so that it can be included...
[reactos.git] / reactos / include / ndk / i386 / ketypes.h
index 70e2e4c..9473ce2 100644 (file)
-/*\r
- * PROJECT:         ReactOS Native Headers\r
- * FILE:            include/ndk/i386/ketypes.h\r
- * PURPOSE:         I386-specific definitions for Kernel Types not defined in DDK/IFS\r
- * PROGRAMMER:      Alex Ionescu (alex@relsoft.net)\r
- * UPDATE HISTORY:\r
- *                  Created 06/10/04\r
- */\r
-#ifndef _I386_KETYPES_H\r
-#define _I386_KETYPES_H\r
-\r
-/* DEPENDENCIES **************************************************************/\r
-\r
-/* CONSTANTS *****************************************************************/\r
-\r
-/* X86 80386 Segment Types */\r
-#define I386_TSS               0x9\r
-#define I386_ACTIVE_TSS        0xB\r
-#define I386_CALL_GATE         0xC\r
-#define I386_INTERRUPT_GATE    0xE\r
-#define I386_TRAP_GATE         0xF\r
-\r
-/* EXPORTED DATA *************************************************************/\r
-\r
-/* ENUMERATIONS **************************************************************/\r
-\r
-/* TYPES *********************************************************************/\r
-\r
-typedef struct _FNSAVE_FORMAT\r
-{\r
-    ULONG ControlWord;\r
-    ULONG StatusWord;\r
-    ULONG TagWord;\r
-    ULONG ErrorOffset;\r
-    ULONG ErrorSelector;\r
-    ULONG DataOffset;\r
-    ULONG DataSelector;\r
-    UCHAR RegisterArea[80];\r
-} FNSAVE_FORMAT, *PFNSAVE_FORMAT;\r
-\r
-typedef struct _FXSAVE_FORMAT\r
-{\r
-    USHORT ControlWord;\r
-    USHORT StatusWord;\r
-    USHORT TagWord;\r
-    USHORT ErrorOpcode;\r
-    ULONG ErrorOffset;\r
-    ULONG ErrorSelector;\r
-    ULONG DataOffset;\r
-    ULONG DataSelector;\r
-    ULONG MXCsr;\r
-    ULONG MXCsrMask;\r
-    UCHAR RegisterArea[128];\r
-    UCHAR Reserved3[128];\r
-    UCHAR Reserved4[224];\r
-    UCHAR Align16Byte[8];\r
-} FXSAVE_FORMAT, *PFXSAVE_FORMAT;\r
-\r
-typedef struct _FX_SAVE_AREA\r
-{\r
-    union\r
-    {\r
-        FNSAVE_FORMAT FnArea;\r
-        FXSAVE_FORMAT FxArea;\r
-    } U;\r
-    ULONG NpxSavedCpu;\r
-    ULONG Cr0NpxState;\r
-} FX_SAVE_AREA, *PFX_SAVE_AREA;\r
-\r
-typedef struct _KTRAP_FRAME\r
-{\r
-    PVOID DebugEbp;\r
-    PVOID DebugEip;\r
-    PVOID DebugArgMark;\r
-    PVOID DebugPointer;\r
-    PVOID TempCs;\r
-    PVOID TempEip;\r
-    ULONG Dr0;\r
-    ULONG Dr1;\r
-    ULONG Dr2;\r
-    ULONG Dr3;\r
-    ULONG Dr6;\r
-    ULONG Dr7;\r
-    USHORT Gs;\r
-    USHORT Reserved1;\r
-    USHORT Es;\r
-    USHORT Reserved2;\r
-    USHORT Ds;\r
-    USHORT Reserved3;\r
-    ULONG Edx;\r
-    ULONG Ecx;\r
-    ULONG Eax;\r
-    ULONG PreviousMode;\r
-    PVOID ExceptionList;\r
-    USHORT Fs;\r
-    USHORT Reserved4;\r
-    ULONG Edi;\r
-    ULONG Esi;\r
-    ULONG Ebx;\r
-    ULONG Ebp;\r
-    ULONG ErrorCode;\r
-    ULONG Eip;\r
-    ULONG Cs;\r
-    ULONG Eflags;\r
-    ULONG Esp;\r
-    USHORT Ss;\r
-    USHORT Reserved5;\r
-    USHORT V86_Es;\r
-    USHORT Reserved6;\r
-    USHORT V86_Ds;\r
-    USHORT Reserved7;\r
-    USHORT V86_Fs;\r
-    USHORT Reserved8;\r
-    USHORT V86_Gs;\r
-    USHORT Reserved9;\r
-} KTRAP_FRAME, *PKTRAP_FRAME;\r
-\r
-typedef struct _LDT_ENTRY\r
-{\r
-    WORD LimitLow;\r
-    WORD BaseLow;\r
-    union\r
-    {\r
-        struct\r
-        {\r
-            BYTE BaseMid;\r
-            BYTE Flags1;\r
-            BYTE Flags2;\r
-            BYTE BaseHi;\r
-        } Bytes;\r
-        struct\r
-        {\r
-            DWORD BaseMid : 8;\r
-            DWORD Type : 5;\r
-            DWORD Dpl : 2;\r
-            DWORD Pres : 1;\r
-            DWORD LimitHi : 4;\r
-            DWORD Sys : 1;\r
-            DWORD Reserved_0 : 1;\r
-            DWORD Default_Big : 1;\r
-            DWORD Granularity : 1;\r
-            DWORD BaseHi : 8;\r
-        } Bits;\r
-    } HighWord;\r
-} LDT_ENTRY, *PLDT_ENTRY, *LPLDT_ENTRY;\r
-\r
-typedef struct _KGDTENTRY\r
-{\r
-    USHORT LimitLow;\r
-    USHORT BaseLow;\r
-    union\r
-    {\r
-        struct\r
-        {\r
-            UCHAR BaseMid;\r
-            UCHAR Flags1;\r
-            UCHAR Flags2;\r
-            UCHAR BaseHi;\r
-        } Bytes;\r
-        struct\r
-        {\r
-            ULONG BaseMid       : 8;\r
-            ULONG Type          : 5;\r
-            ULONG Dpl           : 2;\r
-            ULONG Pres          : 1;\r
-            ULONG LimitHi       : 4;\r
-            ULONG Sys           : 1;\r
-            ULONG Reserved_0    : 1;\r
-            ULONG Default_Big   : 1;\r
-            ULONG Granularity   : 1;\r
-            ULONG BaseHi        : 8;\r
-        } Bits;\r
-    } HighWord;\r
-} KGDTENTRY, *PKGDTENTRY;\r
-\r
-typedef struct _KIDT_ACCESS\r
-{\r
-    union\r
-    {\r
-        struct\r
-        {\r
-            UCHAR Reserved;\r
-            UCHAR SegmentType:4;\r
-            UCHAR SystemSegmentFlag:1;\r
-            UCHAR Dpl:2;\r
-            UCHAR Present:1;\r
-        };\r
-        USHORT Value;\r
-    };\r
-} KIDT_ACCESS, *PKIDT_ACCESS;\r
-\r
-typedef struct _KIDTENTRY\r
-{\r
-    USHORT Offset;\r
-    USHORT Selector;\r
-    USHORT Access;\r
-    USHORT ExtendedOffset;\r
-} KIDTENTRY, *PKIDTENTRY;\r
-\r
-typedef struct _HARDWARE_PTE_X86\r
-{\r
-    ULONG Valid             : 1;\r
-    ULONG Write             : 1;\r
-    ULONG Owner             : 1;\r
-    ULONG WriteThrough      : 1;\r
-    ULONG CacheDisable      : 1;\r
-    ULONG Accessed          : 1;\r
-    ULONG Dirty             : 1;\r
-    ULONG LargePage         : 1;\r
-    ULONG Global            : 1;\r
-    ULONG CopyOnWrite       : 1;\r
-    ULONG Prototype         : 1;\r
-    ULONG reserved          : 1;\r
-    ULONG PageFrameNumber   : 20;\r
-} HARDWARE_PTE_X86, *PHARDWARE_PTE_X86;\r
-\r
-typedef struct _DESCRIPTOR\r
-{\r
-    WORD Pad;\r
-    WORD Limit;\r
-    DWORD Base;\r
-} KDESCRIPTOR, *PKDESCRIPTOR;\r
-\r
-typedef struct _KSPECIAL_REGISTERS\r
-{\r
-    DWORD Cr0;\r
-    DWORD Cr2;\r
-    DWORD Cr3;\r
-    DWORD Cr4;\r
-    DWORD KernelDr0;\r
-    DWORD KernelDr1;\r
-    DWORD KernelDr2;\r
-    DWORD KernelDr3;\r
-    DWORD KernelDr6;\r
-    DWORD KernelDr7;\r
-    KDESCRIPTOR Gdtr;\r
-    KDESCRIPTOR Idtr;\r
-    WORD Tr;\r
-    WORD Ldtr;\r
-    DWORD Reserved[6];\r
-} KSPECIAL_REGISTERS, *PKSPECIAL_REGISTERS;\r
-\r
-#pragma pack(push,4)\r
-\r
-typedef struct _KPROCESSOR_STATE\r
-{\r
-    PCONTEXT ContextFrame;\r
-    KSPECIAL_REGISTERS SpecialRegisters;\r
-} KPROCESSOR_STATE;\r
-\r
-/* Processor Control Block */\r
-typedef struct _KPRCB\r
-{\r
-    USHORT MinorVersion;\r
-    USHORT MajorVersion;\r
-    struct _KTHREAD *CurrentThread;\r
-    struct _KTHREAD *NextThread;\r
-    struct _KTHREAD *IdleThread;\r
-    UCHAR Number;\r
-    UCHAR Reserved;\r
-    USHORT BuildType;\r
-    KAFFINITY SetMember;\r
-    UCHAR CpuType;\r
-    UCHAR CpuID;\r
-    USHORT CpuStep;\r
-    KPROCESSOR_STATE ProcessorState;\r
-    ULONG KernelReserved[16];\r
-    ULONG HalReserved[16];\r
-    UCHAR PrcbPad0[92];\r
-    PVOID LockQueue[33]; // Used for Queued Spinlocks\r
-    struct _KTHREAD *NpxThread;\r
-    ULONG InterruptCount;\r
-    ULONG KernelTime;\r
-    ULONG UserTime;\r
-    ULONG DpcTime;\r
-    ULONG DebugDpcTime;\r
-    ULONG InterruptTime;\r
-    ULONG AdjustDpcThreshold;\r
-    ULONG PageColor;\r
-    UCHAR SkipTick;\r
-    UCHAR DebuggerSavedIRQL;\r
-    UCHAR Spare1[6];\r
-    struct _KNODE *ParentNode;\r
-    ULONG MultiThreadProcessorSet;\r
-    struct _KPRCB *MultiThreadSetMaster;\r
-    ULONG ThreadStartCount[2];\r
-    ULONG CcFastReadNoWait;\r
-    ULONG CcFastReadWait;\r
-    ULONG CcFastReadNotPossible;\r
-    ULONG CcCopyReadNoWait;\r
-    ULONG CcCopyReadWait;\r
-    ULONG CcCopyReadNoWaitMiss;\r
-    ULONG KeAlignmentFixupCount;\r
-    ULONG KeContextSwitches;\r
-    ULONG KeDcacheFlushCount;\r
-    ULONG KeExceptionDispatchCount;\r
-    ULONG KeFirstLevelTbFills;\r
-    ULONG KeFloatingEmulationCount;\r
-    ULONG KeIcacheFlushCount;\r
-    ULONG KeSecondLevelTbFills;\r
-    ULONG KeSystemCalls;\r
-    ULONG IoReadOperationCount;\r
-    ULONG IoWriteOperationCount;\r
-    ULONG IoOtherOperationCount;\r
-    LARGE_INTEGER IoReadTransferCount;\r
-    LARGE_INTEGER IoWriteTransferCount;\r
-    LARGE_INTEGER IoOtherTransferCount;\r
-    ULONG SpareCounter1[8];\r
-    PP_LOOKASIDE_LIST PPLookasideList[16];\r
-    PP_LOOKASIDE_LIST PPNPagedLookasideList[32];\r
-    PP_LOOKASIDE_LIST PPPagedLookasideList[32];\r
-    ULONG PacketBarrier;\r
-    ULONG ReverseStall;\r
-    PVOID IpiFrame;\r
-    UCHAR PrcbPad2[52];\r
-    PVOID CurrentPacket[3];\r
-    ULONG TargetSet;\r
-    ULONG_PTR WorkerRoutine;\r
-    ULONG IpiFrozen;\r
-    UCHAR PrcbPad3[40];\r
-    ULONG RequestSummary;\r
-    struct _KPRCB *SignalDone;\r
-    UCHAR PrcbPad4[56];\r
-    struct _KDPC_DATA DpcData[2];\r
-    PVOID DpcStack;\r
-    ULONG MaximumDpcQueueDepth;\r
-    ULONG DpcRequestRate;\r
-    ULONG MinimumDpcRate;\r
-    UCHAR DpcInterruptRequested;\r
-    UCHAR DpcThreadRequested;\r
-    UCHAR DpcRoutineActive;\r
-    UCHAR DpcThreadActive;\r
-    ULONG PrcbLock;\r
-    ULONG DpcLastCount;\r
-    ULONG TimerHand;\r
-    ULONG TimerRequest;\r
-    PVOID DpcThread;\r
-    struct _KEVENT *DpcEvent;\r
-    UCHAR ThreadDpcEnable;\r
-    BOOLEAN QuantumEnd;\r
-    UCHAR PrcbPad50;\r
-    UCHAR IdleSchedule;\r
-    ULONG DpcSetEventRequest;\r
-    UCHAR PrcbPad5[18];\r
-    LONG TickOffset;\r
-    struct _KDPC* CallDpc;\r
-    ULONG PrcbPad7[8];\r
-    LIST_ENTRY WaitListHead;\r
-    ULONG ReadySummary;\r
-    ULONG SelectNextLast;\r
-    LIST_ENTRY DispatcherReadyListHead[32];\r
-    SINGLE_LIST_ENTRY DeferredReadyListHead;\r
-    ULONG PrcbPad72[11];\r
-    PVOID ChainedInterruptList;\r
-    LONG LookasideIrpFloat;\r
-    LONG MmPageFaultCount;\r
-    LONG MmCopyOnWriteCount;\r
-    LONG MmTransitionCount;\r
-    LONG MmCacheTransitionCount;\r
-    LONG MmDemandZeroCount;\r
-    LONG MmPageReadCount;\r
-    LONG MmPageReadIoCount;\r
-    LONG MmCacheReadCount;\r
-    LONG MmCacheIoCount;\r
-    LONG MmDirtyPagesWriteCount;\r
-    LONG MmDirtyWriteIoCount;\r
-    LONG MmMappedPagesWriteCount;\r
-    LONG MmMappedWriteIoCount;\r
-    ULONG SpareFields0[1];\r
-    CHAR VendorString[13];\r
-    UCHAR InitialApicId;\r
-    UCHAR LogicalProcessorsPerPhysicalProcessor;\r
-    ULONG MHz;\r
-    ULONG FeatureBits;\r
-    LARGE_INTEGER UpdateSignature;\r
-    LARGE_INTEGER IsrTime;\r
-    LARGE_INTEGER SpareField1;\r
-    FX_SAVE_AREA NpxSaveArea;\r
-    PROCESSOR_POWER_STATE PowerState;\r
-} KPRCB, *PKPRCB;\r
-\r
-/*\r
- * This is the complete, internal KPCR structure\r
- */\r
-typedef struct _KIPCR\r
-{\r
-    KPCR_TIB  Tib;                /* 00 */\r
-    struct _KPCR  *Self;          /* 1C */\r
-    struct _KPRCB  *Prcb;         /* 20 */\r
-    KIRQL  Irql;                  /* 24 */\r
-    ULONG  IRR;                   /* 28 */\r
-    ULONG  IrrActive;             /* 2C */\r
-    ULONG  IDR;                   /* 30 */\r
-    PVOID  KdVersionBlock;        /* 34 */\r
-    PUSHORT  IDT;                 /* 38 */\r
-    PUSHORT  GDT;                 /* 3C */\r
-    struct _KTSS  *TSS;           /* 40 */\r
-    USHORT  MajorVersion;         /* 44 */\r
-    USHORT  MinorVersion;         /* 46 */\r
-    KAFFINITY  SetMember;         /* 48 */\r
-    ULONG  StallScaleFactor;      /* 4C */\r
-    UCHAR  SparedUnused;          /* 50 */\r
-    UCHAR  Number;                /* 51 */\r
-    UCHAR  Reserved;              /* 52 */\r
-    UCHAR  L2CacheAssociativity;  /* 53 */\r
-    ULONG  VdmAlert;              /* 54 */\r
-    ULONG  KernelReserved[14];    /* 58 */\r
-    ULONG  L2CacheSize;           /* 90 */\r
-    ULONG  HalReserved[16];       /* 94 */\r
-    ULONG  InterruptMode;         /* D4 */\r
-    UCHAR  KernelReserved2[0x48]; /* D8 */\r
-    KPRCB  PrcbData;              /* 120 */\r
-} KIPCR, *PKIPCR;\r
-\r
-#pragma pack(pop)\r
-\r
-#include <pshpack1.h>\r
-\r
-typedef struct _KTSSNOIOPM\r
-{\r
-    USHORT PreviousTask;\r
-    USHORT Reserved1;\r
-    ULONG  Esp0;\r
-    USHORT Ss0;\r
-    USHORT Reserved2;\r
-    ULONG  Esp1;\r
-    USHORT Ss1;\r
-    USHORT Reserved3;\r
-    ULONG  Esp2;\r
-    USHORT Ss2;\r
-    USHORT Reserved4;\r
-    ULONG  Cr3;\r
-    ULONG  Eip;\r
-    ULONG  Eflags;\r
-    ULONG  Eax;\r
-    ULONG  Ecx;\r
-    ULONG  Edx;\r
-    ULONG  Ebx;\r
-    ULONG  Esp;\r
-    ULONG  Ebp;\r
-    ULONG  Esi;\r
-    ULONG  Edi;\r
-    USHORT Es;\r
-    USHORT Reserved5;\r
-    USHORT Cs;\r
-    USHORT Reserved6;\r
-    USHORT Ss;\r
-    USHORT Reserved7;\r
-    USHORT Ds;\r
-    USHORT Reserved8;\r
-    USHORT Fs;\r
-    USHORT Reserved9;\r
-    USHORT Gs;\r
-    USHORT Reserved10;\r
-    USHORT Ldt;\r
-    USHORT Reserved11;\r
-    USHORT Trap;\r
-    USHORT IoMapBase;\r
-    /* no interrupt redirection map */\r
-    UCHAR IoBitmap[1];\r
-} KTSSNOIOPM;\r
-\r
-typedef struct _KTSS\r
-{\r
-    USHORT PreviousTask;\r
-    USHORT Reserved1;\r
-    ULONG  Esp0;\r
-    USHORT Ss0;\r
-    USHORT Reserved2;\r
-    ULONG  Esp1;\r
-    USHORT Ss1;\r
-    USHORT Reserved3;\r
-    ULONG  Esp2;\r
-    USHORT Ss2;\r
-    USHORT Reserved4;\r
-    ULONG  Cr3;\r
-    ULONG  Eip;\r
-    ULONG  Eflags;\r
-    ULONG  Eax;\r
-    ULONG  Ecx;\r
-    ULONG  Edx;\r
-    ULONG  Ebx;\r
-    ULONG  Esp;\r
-    ULONG  Ebp;\r
-    ULONG  Esi;\r
-    ULONG  Edi;\r
-    USHORT Es;\r
-    USHORT Reserved5;\r
-    USHORT Cs;\r
-    USHORT Reserved6;\r
-    USHORT Ss;\r
-    USHORT Reserved7;\r
-    USHORT Ds;\r
-    USHORT Reserved8;\r
-    USHORT Fs;\r
-    USHORT Reserved9;\r
-    USHORT Gs;\r
-    USHORT Reserved10;\r
-    USHORT Ldt;\r
-    USHORT Reserved11;\r
-    USHORT Trap;\r
-    USHORT IoMapBase;\r
-    /* no interrupt redirection map */\r
-    UCHAR  IoBitmap[8193];\r
-} KTSS;\r
-\r
-#include <poppack.h>\r
-\r
-/* i386 Doesn't have Exception Frames */\r
-typedef struct _KEXCEPTION_FRAME\r
-{\r
-\r
-} KEXCEPTION_FRAME, *PKEXCEPTION_FRAME;\r
-\r
-#endif\r
+/*++ NDK Version: 0095
+
+Copyright (c) Alex Ionescu.  All rights reserved.
+
+Header Name:
+
+    ketypes.h (X86)
+
+Abstract:
+
+    i386 Type definitions for the Kernel services.
+
+Author:
+
+    Alex Ionescu (alex.ionescu@reactos.com)   06-Oct-2004
+
+--*/
+
+#ifndef _I386_KETYPES_H
+#define _I386_KETYPES_H
+
+//
+// Dependencies
+//
+
+//
+// X86 80386 Segment Types
+//
+#define I386_TASK_GATE          0x5
+#define I386_TSS                0x9
+#define I386_ACTIVE_TSS         0xB
+#define I386_CALL_GATE          0xC
+#define I386_INTERRUPT_GATE     0xE
+#define I386_TRAP_GATE          0xF
+
+//
+// IPI Types
+//
+#define IPI_APC                 1
+#define IPI_DPC                 2
+#define IPI_FREEZE              3
+#define IPI_PACKET_READY        4
+#define IPI_SYNCH_REQUEST       10
+
+//
+// FN/FX (FPU) Save Area Structures
+//
+typedef struct _FNSAVE_FORMAT
+{
+    ULONG ControlWord;
+    ULONG StatusWord;
+    ULONG TagWord;
+    ULONG ErrorOffset;
+    ULONG ErrorSelector;
+    ULONG DataOffset;
+    ULONG DataSelector;
+    UCHAR RegisterArea[80];
+} FNSAVE_FORMAT, *PFNSAVE_FORMAT;
+
+typedef struct _FXSAVE_FORMAT
+{
+    USHORT ControlWord;
+    USHORT StatusWord;
+    USHORT TagWord;
+    USHORT ErrorOpcode;
+    ULONG ErrorOffset;
+    ULONG ErrorSelector;
+    ULONG DataOffset;
+    ULONG DataSelector;
+    ULONG MXCsr;
+    ULONG MXCsrMask;
+    UCHAR RegisterArea[128];
+    UCHAR Reserved3[128];
+    UCHAR Reserved4[224];
+    UCHAR Align16Byte[8];
+} FXSAVE_FORMAT, *PFXSAVE_FORMAT;
+
+typedef struct _FX_SAVE_AREA
+{
+    union
+    {
+        FNSAVE_FORMAT FnArea;
+        FXSAVE_FORMAT FxArea;
+    } U;
+    ULONG NpxSavedCpu;
+    ULONG Cr0NpxState;
+} FX_SAVE_AREA, *PFX_SAVE_AREA;
+
+//
+// Trap Frame Definition
+//
+typedef struct _KTRAP_FRAME
+{
+    ULONG DbgEbp;
+    ULONG DbgEip;
+    ULONG DbgArgMark;
+    ULONG DbgArgPointer;
+    ULONG TempSegCs;
+    ULONG TempEsp;
+    ULONG Dr0;
+    ULONG Dr1;
+    ULONG Dr2;
+    ULONG Dr3;
+    ULONG Dr6;
+    ULONG Dr7;
+    ULONG SegGs;
+    ULONG SegEs;
+    ULONG SegDs;
+    ULONG Edx;
+    ULONG Ecx;
+    ULONG Eax;
+    ULONG PreviousPreviousMode;
+    struct _EXCEPTION_REGISTRATION_RECORD *ExceptionList;
+    ULONG SegFs;
+    ULONG Edi;
+    ULONG Esi;
+    ULONG Ebx;
+    ULONG Ebp;
+    ULONG ErrCode;
+    ULONG Eip;
+    ULONG SegCs;
+    ULONG EFlags;
+    ULONG HardwareEsp;
+    ULONG HardwareSegSs;
+    ULONG V86Es;
+    ULONG V86Ds;
+    ULONG V86Fs;
+    ULONG V86Gs;
+} KTRAP_FRAME, *PKTRAP_FRAME;
+
+//
+// LDT Entry Definition
+//
+typedef struct _LDT_ENTRY
+{
+    USHORT LimitLow;
+    USHORT BaseLow;
+    union
+    {
+        struct
+        {
+            UCHAR BaseMid;
+            UCHAR Flags1;
+            UCHAR Flags2;
+            UCHAR BaseHi;
+        } Bytes;
+        struct
+        {
+            ULONG BaseMid : 8;
+            ULONG Type : 5;
+            ULONG Dpl : 2;
+            ULONG Pres : 1;
+            ULONG LimitHi : 4;
+            ULONG Sys : 1;
+            ULONG Reserved_0 : 1;
+            ULONG Default_Big : 1;
+            ULONG Granularity : 1;
+            ULONG BaseHi : 8;
+        } Bits;
+    } HighWord;
+} LDT_ENTRY, *PLDT_ENTRY, *LPLDT_ENTRY;
+
+//
+// GDT Entry Definition
+//
+typedef struct _KGDTENTRY
+{
+    USHORT LimitLow;
+    USHORT BaseLow;
+    union
+    {
+        struct
+        {
+            UCHAR BaseMid;
+            UCHAR Flags1;
+            UCHAR Flags2;
+            UCHAR BaseHi;
+        } Bytes;
+        struct
+        {
+            ULONG BaseMid       : 8;
+            ULONG Type          : 5;
+            ULONG Dpl           : 2;
+            ULONG Pres          : 1;
+            ULONG LimitHi       : 4;
+            ULONG Sys           : 1;
+            ULONG Reserved_0    : 1;
+            ULONG Default_Big   : 1;
+            ULONG Granularity   : 1;
+            ULONG BaseHi        : 8;
+        } Bits;
+    } HighWord;
+} KGDTENTRY, *PKGDTENTRY;
+
+//
+// IDT Entry Access Definition
+//
+typedef struct _KIDT_ACCESS
+{
+    union
+    {
+        struct
+        {
+            UCHAR Reserved;
+            UCHAR SegmentType:4;
+            UCHAR SystemSegmentFlag:1;
+            UCHAR Dpl:2;
+            UCHAR Present:1;
+        };
+        USHORT Value;
+    };
+} KIDT_ACCESS, *PKIDT_ACCESS;
+
+//
+// IDT Entry Definition
+//
+typedef struct _KIDTENTRY
+{
+    USHORT Offset;
+    USHORT Selector;
+    USHORT Access;
+    USHORT ExtendedOffset;
+} KIDTENTRY, *PKIDTENTRY;
+
+//
+// Page Table Entry Definition
+//
+typedef struct _HARDWARE_PTE_X86
+{
+    ULONG Valid             : 1;
+    ULONG Write             : 1;
+    ULONG Owner             : 1;
+    ULONG WriteThrough      : 1;
+    ULONG CacheDisable      : 1;
+    ULONG Accessed          : 1;
+    ULONG Dirty             : 1;
+    ULONG LargePage         : 1;
+    ULONG Global            : 1;
+    ULONG CopyOnWrite       : 1;
+    ULONG Prototype         : 1;
+    ULONG reserved          : 1;
+    ULONG PageFrameNumber   : 20;
+} HARDWARE_PTE_X86, *PHARDWARE_PTE_X86;
+
+typedef struct _DESCRIPTOR
+{
+    USHORT Pad;
+    USHORT Limit;
+    ULONG Base;
+} KDESCRIPTOR, *PKDESCRIPTOR;
+
+//
+// Special Registers Structure (outside of CONTEXT)
+//
+typedef struct _KSPECIAL_REGISTERS
+{
+    ULONG Cr0;
+    ULONG Cr2;
+    ULONG Cr3;
+    ULONG Cr4;
+    ULONG KernelDr0;
+    ULONG KernelDr1;
+    ULONG KernelDr2;
+    ULONG KernelDr3;
+    ULONG KernelDr6;
+    ULONG KernelDr7;
+    KDESCRIPTOR Gdtr;
+    KDESCRIPTOR Idtr;
+    USHORT Tr;
+    USHORT Ldtr;
+    ULONG Reserved[6];
+} KSPECIAL_REGISTERS, *PKSPECIAL_REGISTERS;
+
+//
+// Processor State Data
+//
+#pragma pack(push,4)
+typedef struct _KPROCESSOR_STATE
+{
+    PCONTEXT ContextFrame;
+    KSPECIAL_REGISTERS SpecialRegisters;
+} KPROCESSOR_STATE;
+
+//
+// Processor Region Control Block
+//
+typedef struct _KPRCB
+{
+    USHORT MinorVersion;
+    USHORT MajorVersion;
+    struct _KTHREAD *CurrentThread;
+    struct _KTHREAD *NextThread;
+    struct _KTHREAD *IdleThread;
+    UCHAR Number;
+    UCHAR Reserved;
+    USHORT BuildType;
+    KAFFINITY SetMember;
+    UCHAR CpuType;
+    UCHAR CpuID;
+    USHORT CpuStep;
+    KPROCESSOR_STATE ProcessorState;
+    ULONG KernelReserved[16];
+    ULONG HalReserved[16];
+    UCHAR PrcbPad0[92];
+    PVOID LockQueue[33]; // Used for Queued Spinlocks
+    struct _KTHREAD *NpxThread;
+    ULONG InterruptCount;
+    ULONG KernelTime;
+    ULONG UserTime;
+    ULONG DpcTime;
+    ULONG DebugDpcTime;
+    ULONG InterruptTime;
+    ULONG AdjustDpcThreshold;
+    ULONG PageColor;
+    UCHAR SkipTick;
+    UCHAR DebuggerSavedIRQL;
+    UCHAR Spare1[6];
+    struct _KNODE *ParentNode;
+    ULONG MultiThreadProcessorSet;
+    struct _KPRCB *MultiThreadSetMaster;
+    ULONG ThreadStartCount[2];
+    ULONG CcFastReadNoWait;
+    ULONG CcFastReadWait;
+    ULONG CcFastReadNotPossible;
+    ULONG CcCopyReadNoWait;
+    ULONG CcCopyReadWait;
+    ULONG CcCopyReadNoWaitMiss;
+    ULONG KeAlignmentFixupCount;
+    ULONG KeContextSwitches;
+    ULONG KeDcacheFlushCount;
+    ULONG KeExceptionDispatchCount;
+    ULONG KeFirstLevelTbFills;
+    ULONG KeFloatingEmulationCount;
+    ULONG KeIcacheFlushCount;
+    ULONG KeSecondLevelTbFills;
+    ULONG KeSystemCalls;
+    ULONG IoReadOperationCount;
+    ULONG IoWriteOperationCount;
+    ULONG IoOtherOperationCount;
+    LARGE_INTEGER IoReadTransferCount;
+    LARGE_INTEGER IoWriteTransferCount;
+    LARGE_INTEGER IoOtherTransferCount;
+    ULONG SpareCounter1[8];
+    PP_LOOKASIDE_LIST PPLookasideList[16];
+    PP_LOOKASIDE_LIST PPNPagedLookasideList[32];
+    PP_LOOKASIDE_LIST PPPagedLookasideList[32];
+    ULONG PacketBarrier;
+    ULONG ReverseStall;
+    PVOID IpiFrame;
+    UCHAR PrcbPad2[52];
+    PVOID CurrentPacket[3];
+    ULONG TargetSet;
+    ULONG_PTR WorkerRoutine;
+    ULONG IpiFrozen;
+    UCHAR PrcbPad3[40];
+    ULONG RequestSummary;
+    struct _KPRCB *SignalDone;
+    UCHAR PrcbPad4[56];
+    struct _KDPC_DATA DpcData[2];
+    PVOID DpcStack;
+    ULONG MaximumDpcQueueDepth;
+    ULONG DpcRequestRate;
+    ULONG MinimumDpcRate;
+    UCHAR DpcInterruptRequested;
+    UCHAR DpcThreadRequested;
+    UCHAR DpcRoutineActive;
+    UCHAR DpcThreadActive;
+    ULONG PrcbLock;
+    ULONG DpcLastCount;
+    ULONG TimerHand;
+    ULONG TimerRequest;
+    PVOID DpcThread;
+    struct _KEVENT *DpcEvent;
+    UCHAR ThreadDpcEnable;
+    BOOLEAN QuantumEnd;
+    UCHAR PrcbPad50;
+    UCHAR IdleSchedule;
+    ULONG DpcSetEventRequest;
+    UCHAR PrcbPad5[18];
+    LONG TickOffset;
+    struct _KDPC* CallDpc;
+    ULONG PrcbPad7[8];
+    LIST_ENTRY WaitListHead;
+    ULONG ReadySummary;
+    ULONG SelectNextLast;
+    LIST_ENTRY DispatcherReadyListHead[32];
+    SINGLE_LIST_ENTRY DeferredReadyListHead;
+    ULONG PrcbPad72[11];
+    PVOID ChainedInterruptList;
+    LONG LookasideIrpFloat;
+    LONG MmPageFaultCount;
+    LONG MmCopyOnWriteCount;
+    LONG MmTransitionCount;
+    LONG MmCacheTransitionCount;
+    LONG MmDemandZeroCount;
+    LONG MmPageReadCount;
+    LONG MmPageReadIoCount;
+    LONG MmCacheReadCount;
+    LONG MmCacheIoCount;
+    LONG MmDirtyPagesWriteCount;
+    LONG MmDirtyWriteIoCount;
+    LONG MmMappedPagesWriteCount;
+    LONG MmMappedWriteIoCount;
+    ULONG SpareFields0[1];
+    CHAR VendorString[13];
+    UCHAR InitialApicId;
+    UCHAR LogicalProcessorsPerPhysicalProcessor;
+    ULONG MHz;
+    ULONG FeatureBits;
+    LARGE_INTEGER UpdateSignature;
+    LARGE_INTEGER IsrTime;
+    LARGE_INTEGER SpareField1;
+    FX_SAVE_AREA NpxSaveArea;
+    PROCESSOR_POWER_STATE PowerState;
+} KPRCB, *PKPRCB;
+
+//
+// Processor Control Region
+//
+typedef struct _KIPCR
+{
+    union
+    {
+        NT_TIB NtTib;
+        struct 
+        {
+            struct _EXCEPTION_REGISTRATION_RECORD *Used_ExceptionList;
+            PVOID Used_StackBase;
+            PVOID PerfGlobalGroupMask;
+            PVOID TssCopy;
+            ULONG ContextSwitches;
+            KAFFINITY SetMemberCopy;
+            PVOID Used_Self;
+        };
+    };
+    struct _KPCR *Self;          /* 1C */
+    struct _KPRCB *Prcb;         /* 20 */
+    KIRQL Irql;                  /* 24 */
+    ULONG IRR;                   /* 28 */
+    ULONG IrrActive;             /* 2C */
+    ULONG IDR;                   /* 30 */
+    PVOID KdVersionBlock;        /* 34 */
+#ifdef _REACTOS_
+    PUSHORT IDT;                 /* 38 */
+    PUSHORT GDT;                 /* 3C */
+#else
+    PKIDTENTRY IDT;              /* 38 */
+    PKGDTENTRY GDT;              /* 3C */
+#endif
+    struct _KTSS *TSS;           /* 40 */
+    USHORT MajorVersion;         /* 44 */
+    USHORT MinorVersion;         /* 46 */
+    KAFFINITY SetMember;         /* 48 */
+    ULONG StallScaleFactor;      /* 4C */
+    UCHAR SparedUnused;          /* 50 */
+    UCHAR Number;                /* 51 */
+    UCHAR Reserved;              /* 52 */
+    UCHAR L2CacheAssociativity;  /* 53 */
+    ULONG VdmAlert;              /* 54 */
+    ULONG KernelReserved[14];    /* 58 */
+    ULONG L2CacheSize;           /* 90 */
+    ULONG HalReserved[16];       /* 94 */
+    ULONG InterruptMode;         /* D4 */
+    UCHAR KernelReserved2[0x48]; /* D8 */
+    KPRCB PrcbData;              /* 120 */
+} KIPCR, *PKIPCR;
+#pragma pack(pop)
+
+//
+// TSS Definition
+//
+typedef struct _KiIoAccessMap
+{
+    UCHAR DirectionMap[32];
+    UCHAR IoMap[8196];
+} KIIO_ACCESS_MAP;
+
+#include <pshpack1.h>
+typedef struct _KTSS
+{
+    USHORT Backlink;
+    USHORT Reserved0;
+    ULONG Esp0;
+    USHORT Ss0;
+    USHORT Reserved1;
+    ULONG NotUsed1[4];
+    ULONG CR3;
+    ULONG Eip;
+    ULONG NotUsed2[9];
+    USHORT Es;
+    USHORT Reserved2;
+    USHORT Cs;
+    USHORT Reserved3;
+    USHORT Ss;
+    USHORT Reserved4;
+    USHORT Ds;
+    USHORT Reserved5;
+    USHORT Fs;
+    USHORT Reserved6;
+    USHORT Gs;
+    USHORT Reserved7;
+    USHORT LDT;
+    USHORT Reserved8;
+    USHORT Flags;
+    USHORT IoMapBase;
+    KIIO_ACCESS_MAP IoMaps[1];
+    UCHAR IntDirectionMap[32];
+} KTSS, *PKTSS;
+#include <poppack.h>
+
+//
+// i386 CPUs don't have exception frames
+//
+typedef struct _KEXCEPTION_FRAME KEXCEPTION_FRAME, *PKEXCEPTION_FRAME;
+
+#endif