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]