+++ /dev/null
-/*++ NDK Version: 0098
-
-Copyright (c) Alex Ionescu. All rights reserved.
-
-Header Name:
-
- ketypes.h (X86)
-
-Abstract:
-
- i386 Type definitions for the Kernel services.
-
-Author:
-
- Alex Ionescu (alexi@tinykrnl.org) - Updated - 27-Feb-2006
-
---*/
-
-#ifndef _I386_KETYPES_H
-#define _I386_KETYPES_H
-
-//
-// Dependencies
-//
-
-//
-// KPCR Access for non-IA64 builds
-//
-#define K0IPCR ((ULONG_PTR)(KIP0PCRADDRESS))
-#define PCR ((KPCR *)K0IPCR)
-#if defined(CONFIG_SMP) || defined(NT_BUILD)
-#undef KeGetPcr
-#define KeGetPcr() ((KPCR *)__readfsdword(FIELD_OFFSET(KPCR, SelfPcr)))
-#endif
-
-//
-// CPU Vendors
-//
-typedef enum
-{
- CPU_NONE = 0,
- CPU_INTEL = 1,
- CPU_AMD = 2,
- CPU_CYRIX = 3,
- CPU_TRANSMETA = 4,
- CPU_VIA = 5,
- CPU_CENTAUR = CPU_VIA,
- CPU_RISE = 6,
- CPU_UNKNOWN = 7
-} CPU_VENDORS;
-
-//
-// Machine Types
-//
-#define MACHINE_TYPE_ISA 0x0000
-#define MACHINE_TYPE_EISA 0x0001
-#define MACHINE_TYPE_MCA 0x0002
-
-//
-// 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
-
-//
-// Selector Names
-//
-#define RPL_MASK 0x0003
-#define MODE_MASK 0x0001
-#define KGDT_R0_CODE 0x8
-#define KGDT_R0_DATA 0x10
-#define KGDT_R3_CODE 0x18
-#define KGDT_R3_DATA 0x20
-#define KGDT_TSS 0x28
-#define KGDT_R0_PCR 0x30
-#define KGDT_R3_TEB 0x38
-#define KGDT_LDT 0x48
-#define KGDT_DF_TSS 0x50
-#define KGDT_NMI_TSS 0x58
-
-//
-// Define the number of GDTs that can be queried by user mode
-//
-#define KGDT_NUMBER 10
-
-//
-// CR4
-//
-#define CR4_VME 0x1
-#define CR4_PVI 0x2
-#define CR4_TSD 0x4
-#define CR4_DE 0x8
-#define CR4_PSE 0x10
-#define CR4_PAE 0x20
-#define CR4_MCE 0x40
-#define CR4_PGE 0x80
-#define CR4_FXSR 0x200
-#define CR4_XMMEXCPT 0x400
-
-//
-// EFlags
-//
-#define EFLAGS_CF 0x01L
-#define EFLAGS_ZF 0x40L
-#define EFLAGS_TF 0x100L
-#define EFLAGS_INTERRUPT_MASK 0x200L
-#define EFLAGS_DF 0x400L
-#define EFLAGS_IOPL 0x3000L
-#define EFLAGS_NESTED_TASK 0x4000L
-#define EFLAGS_RF 0x10000
-#define EFLAGS_V86_MASK 0x20000
-#define EFLAGS_ALIGN_CHECK 0x40000
-#define EFLAGS_VIF 0x80000
-#define EFLAGS_VIP 0x100000
-#define EFLAGS_ID 0x200000
-#define EFLAGS_USER_SANITIZE 0x3F4DD7
-#define EFLAG_SIGN 0x8000
-#define EFLAG_ZERO 0x4000
-
-//
-// Legacy floating status word bit masks.
-//
-#define FSW_INVALID_OPERATION 0x1
-#define FSW_DENORMAL 0x2
-#define FSW_ZERO_DIVIDE 0x4
-#define FSW_OVERFLOW 0x8
-#define FSW_UNDERFLOW 0x10
-#define FSW_PRECISION 0x20
-#define FSW_STACK_FAULT 0x40
-
-//
-// Machine Specific Registers
-//
-#define MSR_AMD_ACCESS 0x9C5A203A
-#define MSR_IA32_MISC_ENABLE 0x01A0
-#define MSR_EFER 0xC0000080
-
-//
-// MSR internal Values
-//
-#define MSR_NXE 0x0800
-#define XHF_NOEXECUTE 0x100000
-#define MSR_XD_ENABLE_MASK 0xFFFFFFFB
-
-//
-// IPI Types
-//
-#define IPI_APC 1
-#define IPI_DPC 2
-#define IPI_FREEZE 4
-#define IPI_PACKET_READY 8
-#define IPI_SYNCH_REQUEST 16
-
-//
-// PRCB Flags
-//
-#define PRCB_MAJOR_VERSION 1
-#define PRCB_BUILD_DEBUG 1
-#define PRCB_BUILD_UNIPROCESSOR 2
-
-//
-// HAL Variables
-//
-#define INITIAL_STALL_COUNT 100
-#define MM_HAL_VA_START 0xFFC00000
-#define MM_HAL_VA_END 0xFFFFFFFF
-#define APIC_BASE 0xFFFE0000
-
-//
-// IOPM Definitions
-//
-#define IOPM_COUNT 1
-#define IOPM_SIZE 8192
-#define IOPM_FULL_SIZE 8196
-#define IO_ACCESS_MAP_NONE 0
-#define IOPM_DIRECTION_MAP_SIZE 32
-#define IOPM_OFFSET FIELD_OFFSET(KTSS, IoMaps[0].IoMap)
-#define KiComputeIopmOffset(MapNumber) \
- (MapNumber == IO_ACCESS_MAP_NONE) ? \
- (USHORT)(sizeof(KTSS)) : \
- (USHORT)(FIELD_OFFSET(KTSS, IoMaps[MapNumber-1].IoMap))
-
-typedef UCHAR KIO_ACCESS_MAP[IOPM_SIZE];
-
-typedef KIO_ACCESS_MAP *PKIO_ACCESS_MAP;
-
-//
-// Size of the XMM register save area in the FXSAVE format
-//
-#define SIZE_OF_FX_REGISTERS 128
-
-//
-// Static Kernel-Mode Address start (use MM_KSEG0_BASE for actual)
-//
-#define KSEG0_BASE 0x80000000
-
-//
-// Synchronization-level IRQL
-//
-#ifndef CONFIG_SMP
-#define SYNCH_LEVEL DISPATCH_LEVEL
-#else
-#if (NTDDI_VERSION < NTDDI_WS03)
-#define SYNCH_LEVEL (IPI_LEVEL - 1)
-#else
-#define SYNCH_LEVEL (IPI_LEVEL - 2)
-#endif
-#endif
-
-//
-// Number of pool lookaside lists per pool in the PRCB
-//
-#define NUMBER_POOL_LOOKASIDE_LISTS 32
-
-//
-// Structure for CPUID
-//
-typedef union _CPU_INFO
-{
- UINT32 AsUINT32[4];
- struct
- {
- ULONG Eax;
- ULONG Ebx;
- ULONG Ecx;
- ULONG Edx;
- };
-} CPU_INFO, *PCPU_INFO;
-
-//
-// 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 FAR *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;
-
-//
-// Defines the Callback Stack Layout for User Mode Callbacks
-//
-typedef struct _KCALLOUT_FRAME
-{
- ULONG InitialStack;
- ULONG TrapFrame;
- ULONG CallbackStack;
- ULONG Edi;
- ULONG Esi;
- ULONG Ebx;
- ULONG Ebp;
- ULONG ReturnAddress;
- ULONG Result;
- ULONG ResultLength;
-} KCALLOUT_FRAME, *PKCALLOUT_FRAME;
-
-//
-// LDT Entry Definition
-//
-#ifndef _LDT_ENTRY_DEFINED
-#define _LDT_ENTRY_DEFINED
-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;
-#endif
-
-//
-// 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;
-
-typedef struct _DESCRIPTOR
-{
- USHORT Pad;
- USHORT Limit;
- ULONG Base;
-} KDESCRIPTOR, *PKDESCRIPTOR;
-
-#ifndef NTOS_MODE_USER
-//
-// Macro to get current KPRCB
-//
-FORCEINLINE
-struct _KPRCB *
-KeGetCurrentPrcb(VOID)
-{
- return (struct _KPRCB *)(ULONG_PTR)__readfsdword(FIELD_OFFSET(KPCR, Prcb));
-}
-
-//
-// 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[SIZE_OF_FX_REGISTERS];
- 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;
-
-//
-// 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
-//
-typedef struct _KPROCESSOR_STATE
-{
- CONTEXT ContextFrame;
- KSPECIAL_REGISTERS SpecialRegisters;
-} KPROCESSOR_STATE, *PKPROCESSOR_STATE;
-
-//
-// Processor Region Control Block
-//
-#pragma pack(push,4)
-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];
-#if (NTDDI_VERSION >= NTDDI_LONGHORN)
- ULONG CFlushSize;
- UCHAR PrcbPad0[88];
-#else
- UCHAR PrcbPad0[92];
-#endif
- KSPIN_LOCK_QUEUE LockQueue[LockQueueMaximumLock];
- struct _KTHREAD *NpxThread;
- ULONG InterruptCount;
- ULONG KernelTime;
- ULONG UserTime;
- ULONG DpcTime;
- ULONG DebugDpcTime;
- ULONG InterruptTime;
- ULONG AdjustDpcThreshold;
- ULONG PageColor;
- UCHAR SkipTick;
- UCHAR DebuggerSavedIRQL;
-#if (NTDDI_VERSION >= NTDDI_WS03)
- UCHAR NodeColor;
-#if (NTDDI_VERSION >= NTDDI_LONGHORN)
- UCHAR PollSlot;
-#else
- UCHAR Spare1;
-#endif
- ULONG NodeShiftedColor;
-#else
- UCHAR Spare1[6];
-#endif
- struct _KNODE *ParentNode;
- ULONG MultiThreadProcessorSet;
- struct _KPRCB *MultiThreadSetMaster;
-#if (NTDDI_VERSION >= NTDDI_WS03)
- ULONG SecondaryColorMask;
-#if (NTDDI_VERSION >= NTDDI_LONGHORN)
- ULONG DpcTimeLimit;
-#else
- LONG Sleeping;
-#endif
-#else
- ULONG ThreadStartCount[2];
-#endif
- ULONG CcFastReadNoWait;
- ULONG CcFastReadWait;
- ULONG CcFastReadNotPossible;
- ULONG CcCopyReadNoWait;
- ULONG CcCopyReadWait;
- ULONG CcCopyReadNoWaitMiss;
-#if (NTDDI_VERSION < NTDDI_LONGHORN)
- ULONG KeAlignmentFixupCount;
-#endif
- ULONG SpareCounter0;
-#if (NTDDI_VERSION < NTDDI_LONGHORN)
- ULONG KeDcacheFlushCount;
- ULONG KeExceptionDispatchCount;
- ULONG KeFirstLevelTbFills;
- ULONG KeFloatingEmulationCount;
- ULONG KeIcacheFlushCount;
- ULONG KeSecondLevelTbFills;
- ULONG KeSystemCalls;
-#endif
- volatile ULONG IoReadOperationCount;
- volatile ULONG IoWriteOperationCount;
- volatile ULONG IoOtherOperationCount;
- LARGE_INTEGER IoReadTransferCount;
- LARGE_INTEGER IoWriteTransferCount;
- LARGE_INTEGER IoOtherTransferCount;
-#if (NTDDI_VERSION >= NTDDI_LONGHORN)
- ULONG CcFastMdlReadNoWait;
- ULONG CcFastMdlReadWait;
- ULONG CcFastMdlReadNotPossible;
- ULONG CcMapDataNoWait;
- ULONG CcMapDataWait;
- ULONG CcPinMappedDataCount;
- ULONG CcPinReadNoWait;
- ULONG CcPinReadWait;
- ULONG CcMdlReadNoWait;
- ULONG CcMdlReadWait;
- ULONG CcLazyWriteHotSpots;
- ULONG CcLazyWriteIos;
- ULONG CcLazyWritePages;
- ULONG CcDataFlushes;
- ULONG CcDataPages;
- ULONG CcLostDelayedWrites;
- ULONG CcFastReadResourceMiss;
- ULONG CcCopyReadWaitMiss;
- ULONG CcFastMdlReadResourceMiss;
- ULONG CcMapDataNoWaitMiss;
- ULONG CcMapDataWaitMiss;
- ULONG CcPinReadNoWaitMiss;
- ULONG CcPinReadWaitMiss;
- ULONG CcMdlReadNoWaitMiss;
- ULONG CcMdlReadWaitMiss;
- ULONG CcReadAheadIos;
- ULONG KeAlignmentFixupCount;
- ULONG KeExceptionDispatchCount;
- ULONG KeSystemCalls;
- ULONG PrcbPad1[3];
-#else
- ULONG SpareCounter1[8];
-#endif
- PP_LOOKASIDE_LIST PPLookasideList[16];
- PP_LOOKASIDE_LIST PPNPagedLookasideList[NUMBER_POOL_LOOKASIDE_LISTS];
- PP_LOOKASIDE_LIST PPPagedLookasideList[NUMBER_POOL_LOOKASIDE_LISTS];
- volatile ULONG PacketBarrier;
- volatile ULONG ReverseStall;
- PVOID IpiFrame;
- UCHAR PrcbPad2[52];
- volatile PVOID CurrentPacket[3];
- volatile ULONG TargetSet;
- volatile PKIPI_WORKER WorkerRoutine;
- volatile ULONG IpiFrozen;
- UCHAR PrcbPad3[40];
- volatile ULONG RequestSummary;
- volatile struct _KPRCB *SignalDone;
- UCHAR PrcbPad4[56];
- struct _KDPC_DATA DpcData[2];
- PVOID DpcStack;
- ULONG MaximumDpcQueueDepth;
- ULONG DpcRequestRate;
- ULONG MinimumDpcRate;
- volatile UCHAR DpcInterruptRequested;
- volatile UCHAR DpcThreadRequested;
- volatile UCHAR DpcRoutineActive;
- volatile UCHAR DpcThreadActive;
- ULONG PrcbLock;
- ULONG DpcLastCount;
- volatile ULONG TimerHand;
- volatile ULONG TimerRequest;
- PVOID DpcThread;
- KEVENT DpcEvent;
- UCHAR ThreadDpcEnable;
- volatile BOOLEAN QuantumEnd;
- UCHAR PrcbPad50;
- volatile UCHAR IdleSchedule;
- LONG DpcSetEventRequest;
-#if (NTDDI_VERSION >= NTDDI_LONGHORN)
- LONG Sleeping;
- ULONG PeriodicCount;
- ULONG PeriodicBias;
- UCHAR PrcbPad5[6];
-#else
- UCHAR PrcbPad5[18];
-#endif
- LONG TickOffset;
- KDPC CallDpc;
-#if (NTDDI_VERSION >= NTDDI_LONGHORN)
- LONG ClockKeepAlive;
- UCHAR ClockCheckSlot;
- UCHAR ClockPollCycle;
- UCHAR PrcbPad6[2];
- LONG DpcWatchdogPeriod;
- LONG DpcWatchDogCount;
- LONG ThreadWatchdogPeriod;
- LONG ThreadWatchDogCount;
- ULONG PrcbPad70[2];
-#else
- ULONG PrcbPad7[8];
-#endif
- LIST_ENTRY WaitListHead;
- ULONG ReadySummary;
- ULONG QueueIndex;
-#if (NTDDI_VERSION >= NTDDI_LONGHORN)
- SINGLE_LIST_ENTRY DeferredReadyListHead;
- ULONGLONG StartCycles;
- ULONGLONG CycleTime;
- ULONGLONG PrcbPad71[3];
- LIST_ENTRY DispatcherReadyListHead[32];
-#else
- LIST_ENTRY DispatcherReadyListHead[32];
- SINGLE_LIST_ENTRY DeferredReadyListHead;
- ULONG PrcbPad72[11];
-#endif
- PVOID ChainedInterruptList;
- LONG LookasideIrpFloat;
- volatile LONG MmPageFaultCount;
- volatile LONG MmCopyOnWriteCount;
- volatile LONG MmTransitionCount;
- volatile LONG MmCacheTransitionCount;
- volatile LONG MmDemandZeroCount;
- volatile LONG MmPageReadCount;
- volatile LONG MmPageReadIoCount;
- volatile LONG MmCacheReadCount;
- volatile LONG MmCacheIoCount;
- volatile LONG MmDirtyPagesWriteCount;
- volatile LONG MmDirtyWriteIoCount;
- volatile LONG MmMappedPagesWriteCount;
- volatile LONG MmMappedWriteIoCount;
-#if (NTDDI_VERSION >= NTDDI_LONGHORN)
- ULONG CachedCommit;
- ULONG CachedResidentAvailable;
- PVOID HyperPte;
- UCHAR CpuVendor;
- UCHAR PrcbPad9[3];
-#else
- ULONG SpareFields0[1];
-#endif
- CHAR VendorString[13];
- UCHAR InitialApicId;
- UCHAR LogicalProcessorsPerPhysicalProcessor;
- ULONG MHz;
- ULONG FeatureBits;
- LARGE_INTEGER UpdateSignature;
- volatile LARGE_INTEGER IsrTime;
- LARGE_INTEGER SpareField1;
- FX_SAVE_AREA NpxSaveArea;
- PROCESSOR_POWER_STATE PowerState;
-#if (NTDDI_VERSION >= NTDDI_LONGHORN)
- KDPC DpcWatchdogDoc;
- KTIMER DpcWatchdogTimer;
- PVOID WheaInfo;
- PVOID EtwSupport;
- SLIST_HEADER InterruptObjectPool;
- LARGE_INTEGER HyperCallPagePhysical;
- LARGE_INTEGER HyperCallPageVirtual;
- PVOID RateControl;
- CACHE_DESCRIPTOR Cache[5];
- ULONG CacheCount;
- ULONG CacheProcessorMask[5];
- UCHAR LogicalProcessorsPerCore;
- UCHAR PrcbPad8[3];
- ULONG PackageProcessorSet;
- ULONG CoreProcessorSet;
-#endif
-} 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;
- struct _KPRCB *Prcb;
- KIRQL Irql;
- ULONG IRR;
- ULONG IrrActive;
- ULONG IDR;
- PVOID KdVersionBlock;
- PKIDTENTRY IDT;
- PKGDTENTRY GDT;
- struct _KTSS *TSS;
- USHORT MajorVersion;
- USHORT MinorVersion;
- KAFFINITY SetMember;
- ULONG StallScaleFactor;
- UCHAR SpareUnused;
- UCHAR Number;
- UCHAR Spare0;
- UCHAR SecondLevelCacheAssociativity;
- ULONG VdmAlert;
- ULONG KernelReserved[14];
- ULONG SecondLevelCacheSize;
- ULONG HalReserved[16];
- ULONG InterruptMode;
- UCHAR Spare1;
- ULONG KernelReserved2[17];
- KPRCB PrcbData;
-} KIPCR, *PKIPCR;
-#pragma pack(pop)
-
-//
-// TSS Definition
-//
-typedef struct _KiIoAccessMap
-{
- UCHAR DirectionMap[IOPM_DIRECTION_MAP_SIZE];
- UCHAR IoMap[IOPM_FULL_SIZE];
-} KIIO_ACCESS_MAP;
-
-typedef struct _KTSS
-{
- USHORT Backlink;
- USHORT Reserved0;
- ULONG Esp0;
- USHORT Ss0;
- USHORT Reserved1;
- ULONG NotUsed1[4];
- 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 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[IOPM_COUNT];
- UCHAR IntDirectionMap[IOPM_DIRECTION_MAP_SIZE];
-} KTSS, *PKTSS;
-
-//
-// i386 CPUs don't have exception frames
-//
-typedef struct _KEXCEPTION_FRAME KEXCEPTION_FRAME, *PKEXCEPTION_FRAME;
-
-#endif /* NTOS_MODE_USER */
-
-typedef enum _WOW64_SERVICE_TYPES
-{
- ServiceNoTurbo = 0x0000,
- Service0Arg = 0x0001,
- Service0ArgReloadState = 0x0002,
- Service1ArgSp = 0x0003,
- Service1ArgNSp = 0x0004,
- Service2ArgNSpNSp = 0x0005,
- Service2ArgNSpNSpReloadState = 0x0006,
- Service2ArgSpNSp = 0x0007,
- Service2ArgSpSp = 0x0008,
- Service2ArgNSpSp = 0x0009,
- Service3ArgNSpNSpNSp = 0x000A,
- Service3ArgSpSpSp = 0x000B,
- Service3ArgSpNSpNSp = 0x000C,
- Service3ArgSpNSpNSpReloadState = 0x000D,
- Service3ArgSpSpNSp = 0x000E,
- Service3ArgNSpSpNSp = 0x000F,
- Service3ArgSpNSpSp = 0x0010,
- Service4ArgNSpNSpNSpNSp = 0x0011,
- Service4ArgSpSpNSpNSp = 0x0012,
- Service4ArgSpSpNSpNSpReloadState = 0x0013,
- Service4ArgSpNSpNSpNSp = 0x0014,
- Service4ArgSpNSpNSpNSpReloadState = 0x0015,
- Service4ArgNSpSpNSpNSp = 0x0016,
- Service4ArgSpSpSpNSp = 0x0017,
- ServiceCpupTdQuerySystemTime = 0x0018,
- ServiceCpupTdGetCurrentProcessorNumber = 0x0019,
- ServiceCpupTdReadWriteFile = 0x001A,
- ServiceCpupTdDeviceIoControlFile = 0x001B,
- ServiceCpupTdRemoveIoCompletion = 0x001C,
- ServiceCpupTdWaitForMultipleObjects = 0x001D,
- ServiceCpupTdWaitForMultipleObjects32 = 0x001E,
- Wow64ServiceTypesCount // = 0x001F
-} WOW64_SERVICE_TYPES, *PWOW64_SERVICE_TYPES;
-
-typedef enum _VDM_INDEX
-{
- VDM_INDEX_Invalid = 0,
- VDM_INDEX_0F,
- VDM_INDEX_ESPrefix,
- VDM_INDEX_CSPrefix,
- VDM_INDEX_SSPrefix,
- VDM_INDEX_DSPrefix,
- VDM_INDEX_FSPrefix,
- VDM_INDEX_GSPrefix,
- VDM_INDEX_OPER32Prefix,
- VDM_INDEX_ADDR32Prefix,
- VDM_INDEX_INSB,
- VDM_INDEX_INSW,
- VDM_INDEX_OUTSB,
- VDM_INDEX_OUTSW,
- VDM_INDEX_PUSHF,
- VDM_INDEX_POPF,
- VDM_INDEX_INTnn,
- VDM_INDEX_INTO,
- VDM_INDEX_IRET,
- VDM_INDEX_NPX,
- VDM_INDEX_INBimm,
- VDM_INDEX_INWimm,
- VDM_INDEX_OUTBimm,
- VDM_INDEX_OUTWimm,
- VDM_INDEX_INB,
- VDM_INDEX_INW,
- VDM_INDEX_OUTB,
- VDM_INDEX_OUTW,
- VDM_INDEX_LOCKPrefix,
- VDM_INDEX_REPNEPrefix,
- VDM_INDEX_REPPrefix,
- VDM_INDEX_CLI,
- VDM_INDEX_STI,
- VDM_INDEX_HLT,
- MAX_VDM_INDEX
-} VDM_INDEX, *PVDM_INDEX;
-
-#endif /* _I386_KETYPES_H */