-/*\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