Add architecture-specific headers and move I386-specific definitions into them.
Added: trunk/reactos/include/ndk/arch/
Added: trunk/reactos/include/ndk/arch/ketypes.h
Added: trunk/reactos/include/ndk/arch/mmtypes.h
Modified: trunk/reactos/include/ndk/fixmes.txt
Added: trunk/reactos/include/ndk/i386/ketypes.h
Added: trunk/reactos/include/ndk/i386/mmtypes.h
Modified: trunk/reactos/include/ndk/ketypes.h
Modified: trunk/reactos/include/ndk/mmtypes.h

Added: trunk/reactos/include/ndk/arch/ketypes.h
--- trunk/reactos/include/ndk/arch/ketypes.h	2005-07-05 20:47:48 UTC (rev 16436)
+++ trunk/reactos/include/ndk/arch/ketypes.h	2005-07-05 21:03:46 UTC (rev 16437)
@@ -0,0 +1,18 @@
+/*
+ * PROJECT:         ReactOS Native Headers
+ * FILE:            include/ndk/arch/ketypes.h
+ * PURPOSE:         Architecture-specific definitions for Kernel Types
+ * PROGRAMMER:      Alex Ionescu (alex@relsoft.net)
+ * UPDATE HISTORY:
+ *                  Created 06/10/04
+ */
+#ifndef _ARCH_KETYPES_H
+#define _ARCH_KETYPES_H
+
+#ifdef _M_IX86
+#include <ndk/i386/ketypes.h>
+#else
+#error "Unknown processor"
+#endif
+
+#endif

Added: trunk/reactos/include/ndk/arch/mmtypes.h
--- trunk/reactos/include/ndk/arch/mmtypes.h	2005-07-05 20:47:48 UTC (rev 16436)
+++ trunk/reactos/include/ndk/arch/mmtypes.h	2005-07-05 21:03:46 UTC (rev 16437)
@@ -0,0 +1,18 @@
+/*
+ * PROJECT:         ReactOS Native Headers
+ * FILE:            include/ndk/arch/mmtypes.h
+ * PURPOSE:         Architecture-specific definitions for Memory Manager Types
+ * PROGRAMMER:      Alex Ionescu (alex@relsoft.net)
+ * UPDATE HISTORY:
+ *                  Created 06/10/04
+ */
+#ifndef _ARCH_MMTYPES_H
+#define _ARCH_MMTYPES_H
+
+#ifdef _M_IX86
+#include <ndk/i386/mmtypes.h>
+#else
+#error "Unknown processor"
+#endif
+
+#endif

Modified: trunk/reactos/include/ndk/fixmes.txt
--- trunk/reactos/include/ndk/fixmes.txt	2005-07-05 20:47:48 UTC (rev 16436)
+++ trunk/reactos/include/ndk/fixmes.txt	2005-07-05 21:03:46 UTC (rev 16437)
@@ -30,7 +30,7 @@
 	- MADDRESS_SPACE must be converted into the NT Type (Alex) [pstypes.h, mmtypes.h]
 
 	Priority 4:
-	- Kernel and Memory Types are not architecture-specific [ketypes.h, mmtypes.h]
+	- FIXED: Kernel and Memory Types are not architecture-specific (Eric) [ketypes.h, mmtypes.h]
 	- Win32K Builds with windows.h [extypes.h, ketypes.h]
 
 	Priority 5:

Added: trunk/reactos/include/ndk/i386/ketypes.h
--- trunk/reactos/include/ndk/i386/ketypes.h	2005-07-05 20:47:48 UTC (rev 16436)
+++ trunk/reactos/include/ndk/i386/ketypes.h	2005-07-05 21:03:46 UTC (rev 16437)
@@ -0,0 +1,518 @@
+/*
+ * PROJECT:         ReactOS Native Headers
+ * FILE:            include/ndk/i386/ketypes.h
+ * PURPOSE:         I386-specific definitions for Kernel Types not defined in DDK/IFS
+ * PROGRAMMER:      Alex Ionescu (alex@relsoft.net)
+ * UPDATE HISTORY:
+ *                  Created 06/10/04
+ */
+#ifndef _I386_KETYPES_H
+#define _I386_KETYPES_H
+
+/* DEPENDENCIES **************************************************************/
+
+/* CONSTANTS *****************************************************************/
+
+/* X86 80386 Segment Types */
+#define I386_TSS               0x9
+#define I386_ACTIVE_TSS        0xB
+#define I386_CALL_GATE         0xC
+#define I386_INTERRUPT_GATE    0xE
+#define I386_TRAP_GATE         0xF
+
+/* EXPORTED DATA *************************************************************/
+
+/* ENUMERATIONS **************************************************************/
+
+/* TYPES *********************************************************************/
+
+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;
+
+typedef struct _KTRAP_FRAME
+{
+    PVOID DebugEbp;
+    PVOID DebugEip;
+    PVOID DebugArgMark;
+    PVOID DebugPointer;
+    PVOID TempCs;
+    PVOID TempEip;
+    ULONG Dr0;
+    ULONG Dr1;
+    ULONG Dr2;
+    ULONG Dr3;
+    ULONG Dr6;
+    ULONG Dr7;
+    USHORT Gs;
+    USHORT Reserved1;
+    USHORT Es;
+    USHORT Reserved2;
+    USHORT Ds;
+    USHORT Reserved3;
+    ULONG Edx;
+    ULONG Ecx;
+    ULONG Eax;
+    ULONG PreviousMode;
+    PVOID ExceptionList;
+    USHORT Fs;
+    USHORT Reserved4;
+    ULONG Edi;
+    ULONG Esi;
+    ULONG Ebx;
+    ULONG Ebp;
+    ULONG ErrorCode;
+    ULONG Eip;
+    ULONG Cs;
+    ULONG Eflags;
+    ULONG Esp;
+    USHORT Ss;
+    USHORT Reserved5;
+    USHORT V86_Es;
+    USHORT Reserved6;
+    USHORT V86_Ds;
+    USHORT Reserved7;
+    USHORT V86_Fs;
+    USHORT Reserved8;
+    USHORT V86_Gs;
+    USHORT Reserved9;
+} KTRAP_FRAME, *PKTRAP_FRAME;
+
+/* FIXME: Win32k uses windows.h! */
+#ifndef __WIN32K__
+typedef struct _LDT_ENTRY
+{
+    WORD LimitLow;
+    WORD BaseLow;
+    union
+    {
+        struct
+        {
+            BYTE BaseMid;
+            BYTE Flags1;
+            BYTE Flags2;
+            BYTE BaseHi;
+        } Bytes;
+        struct
+        {
+            DWORD BaseMid : 8;
+            DWORD Type : 5;
+            DWORD Dpl : 2;
+            DWORD Pres : 1;
+            DWORD LimitHi : 4;
+            DWORD Sys : 1;
+            DWORD Reserved_0 : 1;
+            DWORD Default_Big : 1;
+            DWORD Granularity : 1;
+            DWORD BaseHi : 8;
+        } Bits;
+    } HighWord;
+} LDT_ENTRY, *PLDT_ENTRY, *LPLDT_ENTRY;
+#endif
+
+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;
+
+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;
+
+typedef struct _KIDTENTRY
+{
+    USHORT Offset;
+    USHORT Selector;
+    USHORT Access;
+    USHORT ExtendedOffset;
+} KIDTENTRY, *PKIDTENTRY;
+
+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
+{
+    WORD Pad;
+    WORD Limit;
+    DWORD Base;
+} KDESCRIPTOR, *PKDESCRIPTOR;
+
+typedef struct _KSPECIAL_REGISTERS
+{
+    DWORD Cr0;
+    DWORD Cr2;
+    DWORD Cr3;
+    DWORD Cr4;
+    DWORD KernelDr0;
+    DWORD KernelDr1;
+    DWORD KernelDr2;
+    DWORD KernelDr3;
+    DWORD KernelDr6;
+    DWORD KernelDr7;
+    KDESCRIPTOR Gdtr;
+    KDESCRIPTOR Idtr;
+    WORD Tr;
+    WORD Ldtr;
+    DWORD Reserved[6];
+} KSPECIAL_REGISTERS, *PKSPECIAL_REGISTERS;
+
+#pragma pack(push,4)
+
+typedef struct _KPROCESSOR_STATE
+{
+    PCONTEXT ContextFrame;
+    KSPECIAL_REGISTERS SpecialRegisters;
+} KPROCESSOR_STATE;
+
+/* Processor Control Block */
+typedef struct _KPRCB
+{
+    USHORT MinorVersion;
+    USHORT MajorVersion;
+    struct _KTHREAD *CurrentThread;
+    struct _KTHREAD *NextThread;
+    struct _KTHREAD *IdleThread;
+    UCHAR Number;
+    UCHAR Reserved;
+    USHORT BuildType;
+    ULONG 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;
+
+/*
+ * This is the complete, internal KPCR structure
+ */
+typedef struct _KIPCR
+{
+    KPCR_TIB  Tib;                /* 00 */
+    struct _KPCR  *Self;          /* 1C */
+    struct _KPRCB  *Prcb;         /* 20 */
+    KIRQL  Irql;                  /* 24 */
+    ULONG  IRR;                   /* 28 */
+    ULONG  IrrActive;             /* 2C */
+    ULONG  IDR;                   /* 30 */
+    PVOID  KdVersionBlock;        /* 34 */
+    PUSHORT  IDT;                 /* 38 */
+    PUSHORT  GDT;                 /* 3C */
+    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)
+
+#include <pshpack1.h>
+
+typedef struct _KTSSNOIOPM
+{
+    USHORT PreviousTask;
+    USHORT Reserved1;
+    ULONG  Esp0;
+    USHORT Ss0;
+    USHORT Reserved2;
+    ULONG  Esp1;
+    USHORT Ss1;
+    USHORT Reserved3;
+    ULONG  Esp2;
+    USHORT Ss2;
+    USHORT Reserved4;
+    ULONG  Cr3;
+    ULONG  Eip;
+    ULONG  Eflags;
+    ULONG  Eax;
+    ULONG  Ecx;
+    ULONG  Edx;
+    ULONG  Ebx;
+    ULONG  Esp;
+    ULONG  Ebp;
+    ULONG  Esi;
+    ULONG  Edi;
+    USHORT Es;
+    USHORT Reserved5;
+    USHORT Cs;
+    USHORT Reserved6;
+    USHORT Ss;
+    USHORT Reserved7;
+    USHORT Ds;
+    USHORT Reserved8;
+    USHORT Fs;
+    USHORT Reserved9;
+    USHORT Gs;
+    USHORT Reserved10;
+    USHORT Ldt;
+    USHORT Reserved11;
+    USHORT Trap;
+    USHORT IoMapBase;
+    /* no interrupt redirection map */
+    UCHAR IoBitmap[1];
+} KTSSNOIOPM;
+
+typedef struct _KTSS
+{
+    USHORT PreviousTask;
+    USHORT Reserved1;
+    ULONG  Esp0;
+    USHORT Ss0;
+    USHORT Reserved2;
+    ULONG  Esp1;
+    USHORT Ss1;
+    USHORT Reserved3;
+    ULONG  Esp2;
+    USHORT Ss2;
+    USHORT Reserved4;
+    ULONG  Cr3;
+    ULONG  Eip;
+    ULONG  Eflags;
+    ULONG  Eax;
+    ULONG  Ecx;
+    ULONG  Edx;
+    ULONG  Ebx;
+    ULONG  Esp;
+    ULONG  Ebp;
+    ULONG  Esi;
+    ULONG  Edi;
+    USHORT Es;
+    USHORT Reserved5;
+    USHORT Cs;
+    USHORT Reserved6;
+    USHORT Ss;
+    USHORT Reserved7;
+    USHORT Ds;
+    USHORT Reserved8;
+    USHORT Fs;
+    USHORT Reserved9;
+    USHORT Gs;
+    USHORT Reserved10;
+    USHORT Ldt;
+    USHORT Reserved11;
+    USHORT Trap;
+    USHORT IoMapBase;
+    /* no interrupt redirection map */
+    UCHAR  IoBitmap[8193];
+} KTSS;
+
+#include <poppack.h>
+
+/* i386 Doesn't have Exception Frames */
+typedef struct _KEXCEPTION_FRAME
+{
+
+} KEXCEPTION_FRAME, *PKEXCEPTION_FRAME;
+
+#endif

Added: trunk/reactos/include/ndk/i386/mmtypes.h
--- trunk/reactos/include/ndk/i386/mmtypes.h	2005-07-05 20:47:48 UTC (rev 16436)
+++ trunk/reactos/include/ndk/i386/mmtypes.h	2005-07-05 21:03:46 UTC (rev 16437)
@@ -0,0 +1,12 @@
+/*
+ * PROJECT:         ReactOS Native Headers
+ * FILE:            include/ndk/i386/mmtypes.h
+ * PURPOSE:         I386-specific definitions for Memory Manager Types not defined in DDK/IFS
+ * PROGRAMMER:      Alex Ionescu (alex@relsoft.net)
+ * UPDATE HISTORY:
+ *                  Created 06/10/04
+ */
+#ifndef _I386_MMTYPES_H
+#define _I386_MMTYPES_H
+
+#endif

Modified: trunk/reactos/include/ndk/ketypes.h
--- trunk/reactos/include/ndk/ketypes.h	2005-07-05 20:47:48 UTC (rev 16436)
+++ trunk/reactos/include/ndk/ketypes.h	2005-07-05 21:03:46 UTC (rev 16437)
@@ -15,6 +15,8 @@
 #include "mmtypes.h"
 #include <arc/arc.h>
 
+#include "arch/ketypes.h"
+
 /* CONSTANTS *****************************************************************/
 #define SSDT_MAX_ENTRIES 4
 #define PROCESSOR_FEATURE_MAX 64
@@ -23,13 +25,6 @@
 
 #define THREAD_WAIT_OBJECTS 4
 
-/* X86 80386 Segment Types */
-#define I386_TSS               0x9
-#define I386_ACTIVE_TSS        0xB
-#define I386_CALL_GATE         0xC
-#define I386_INTERRUPT_GATE    0xE
-#define I386_TRAP_GATE         0xF
-
 /* EXPORTED DATA *************************************************************/
 extern CHAR NTOSAPI KeNumberProcessors;
 extern LOADER_PARAMETER_BLOCK NTOSAPI KeLoaderBlock;
@@ -82,496 +77,6 @@
 } KAPC_STATE, *PKAPC_STATE, *RESTRICTED_POINTER PRKAPC_STATE;
 #endif
 
-/* FIXME: Most of these should go to i386 directory */
-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;
-
-typedef struct _KTRAP_FRAME
-{
-    PVOID DebugEbp;
-    PVOID DebugEip;
-    PVOID DebugArgMark;
-    PVOID DebugPointer;
-    PVOID TempCs;
-    PVOID TempEip;
-    ULONG Dr0;
-    ULONG Dr1;
-    ULONG Dr2;
-    ULONG Dr3;
-    ULONG Dr6;
-    ULONG Dr7;
-    USHORT Gs;
-    USHORT Reserved1;
-    USHORT Es;
-    USHORT Reserved2;
-    USHORT Ds;
-    USHORT Reserved3;
-    ULONG Edx;
-    ULONG Ecx;
-    ULONG Eax;
-    ULONG PreviousMode;
-    PVOID ExceptionList;
-    USHORT Fs;
-    USHORT Reserved4;
-    ULONG Edi;
-    ULONG Esi;
-    ULONG Ebx;
-    ULONG Ebp;
-    ULONG ErrorCode;
-    ULONG Eip;
-    ULONG Cs;
-    ULONG Eflags;
-    ULONG Esp;
-    USHORT Ss;
-    USHORT Reserved5;
-    USHORT V86_Es;
-    USHORT Reserved6;
-    USHORT V86_Ds;
-    USHORT Reserved7;
-    USHORT V86_Fs;
-    USHORT Reserved8;
-    USHORT V86_Gs;
-    USHORT Reserved9;
-} KTRAP_FRAME, *PKTRAP_FRAME;
-
-/* FIXME: Win32k uses windows.h! */
-#ifndef __WIN32K__
-typedef struct _LDT_ENTRY
-{
-    WORD LimitLow;
-    WORD BaseLow;
-    union
-    {
-        struct
-        {
-            BYTE BaseMid;
-            BYTE Flags1;
-            BYTE Flags2;
-            BYTE BaseHi;
-        } Bytes;
-        struct
-        {
-            DWORD BaseMid : 8;
-            DWORD Type : 5;
-            DWORD Dpl : 2;
-            DWORD Pres : 1;
-            DWORD LimitHi : 4;
-            DWORD Sys : 1;
-            DWORD Reserved_0 : 1;
-            DWORD Default_Big : 1;
-            DWORD Granularity : 1;
-            DWORD BaseHi : 8;
-        } Bits;
-    } HighWord;
-} LDT_ENTRY, *PLDT_ENTRY, *LPLDT_ENTRY;
-#endif
-
-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;
-
-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;
-
-typedef struct _KIDTENTRY
-{
-    USHORT Offset;
-    USHORT Selector;
-    USHORT Access;
-    USHORT ExtendedOffset;
-} KIDTENTRY, *PKIDTENTRY;
-
-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
-{
-    WORD Pad;
-    WORD Limit;
-    DWORD Base;
-} KDESCRIPTOR, *PKDESCRIPTOR;
-
-typedef struct _KSPECIAL_REGISTERS
-{
-    DWORD Cr0;
-    DWORD Cr2;
-    DWORD Cr3;
-    DWORD Cr4;
-    DWORD KernelDr0;
-    DWORD KernelDr1;
-    DWORD KernelDr2;
-    DWORD KernelDr3;
-    DWORD KernelDr6;
-    DWORD KernelDr7;
-    KDESCRIPTOR Gdtr;
-    KDESCRIPTOR Idtr;
-    WORD Tr;
-    WORD Ldtr;
-    DWORD Reserved[6];
-} KSPECIAL_REGISTERS, *PKSPECIAL_REGISTERS;
-
-#pragma pack(push,4)
-
-typedef struct _KPROCESSOR_STATE
-{
-    PCONTEXT ContextFrame;
-    KSPECIAL_REGISTERS SpecialRegisters;
-} KPROCESSOR_STATE;
-
-/* Processor Control Block */
-typedef struct _KPRCB
-{
-    USHORT MinorVersion;
-    USHORT MajorVersion;
-    struct _KTHREAD *CurrentThread;
-    struct _KTHREAD *NextThread;
-    struct _KTHREAD *IdleThread;
-    UCHAR Number;
-    UCHAR Reserved;
-    USHORT BuildType;
-    ULONG 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;
-
-/*
- * This is the complete, internal KPCR structure
- */
-typedef struct _KIPCR
-{
-    KPCR_TIB  Tib;                /* 00 */
-    struct _KPCR  *Self;          /* 1C */
-    struct _KPRCB  *Prcb;         /* 20 */
-    KIRQL  Irql;                  /* 24 */
-    ULONG  IRR;                   /* 28 */
-    ULONG  IrrActive;             /* 2C */
-    ULONG  IDR;                   /* 30 */
-    PVOID  KdVersionBlock;        /* 34 */
[truncated at 1000 lines; 145 more skipped]