Author: tkreuzer Date: Wed Oct 14 18:45:35 2009 New Revision: 43455
URL: http://svn.reactos.org/svn/reactos?rev=43455&view=rev Log: Merge amd64 NDK from amd64 branch: 34711, 34712, 34842, 34925, 34967, 34970, 35323, 35324, 35347, 35348, 35361, 35436, 35509, 35588, 35739, 35823, 35952, 35966, 36360, 37323, 37434, 37472, 37536, 37820, 37821, 37869, 37990, 38013, 38014, 43426, 43454
Added: trunk/reactos/include/ndk/amd64/ (props changed) - copied from r34711, branches/ros-amd64-bringup/reactos/include/ndk/amd64/ trunk/reactos/include/ndk/amd64/asm.h - copied, changed from r35966, branches/ros-amd64-bringup/reactos/include/ndk/amd64/asm.h trunk/reactos/include/ndk/amd64/asmmacro.S (contents, props changed) - copied, changed from r37472, branches/ros-amd64-bringup/reactos/include/ndk/amd64/asmmacro.S Modified: trunk/reactos/ (props changed) trunk/reactos/include/ndk/amd64/ketypes.h trunk/reactos/include/ndk/amd64/mmtypes.h trunk/reactos/include/ndk/arch/ketypes.h trunk/reactos/include/ndk/asm.h trunk/reactos/include/ndk/pstypes.h
Propchange: trunk/reactos/ ------------------------------------------------------------------------------ --- svn:mergeinfo (original) +++ svn:mergeinfo Wed Oct 14 18:45:35 2009 @@ -1,1 +1,1 @@ -/branches/ros-amd64-bringup/reactos:34743,34812,34839,34917,35515,35746,35771,35789,35902,35904-35906,35942,35947-35949,35953,36013,36388-36389,36570,36614,36930,37873,37991,38148,38151,38265,38268,39151,39333,39345,40991,41000,41027-41028,41050,41052,41082-41086,41549,43080 +/branches/ros-amd64-bringup/reactos:34711-34712,34743,34812,34839,34842,34917,35323-35324,35347-35348,35361,35436,35509,35515,35588,35739,35746,35771,35789,35823,35902,35904-35906,35942,35947-35949,35952-35953,35966,36013,36360,36388-36389,36570,36614,36930,37323,37434,37472,37475,37536,37820-37821,37869,37873,37990-37991,38013-38014,38148,38151,38265,38268,39151,39333,39345,40991,41000,41027-41028,41050,41052,41082-41086,41549,43080,43426,43454
Propchange: trunk/reactos/include/ndk/amd64/ ------------------------------------------------------------------------------ --- svn:mergeinfo (added) +++ svn:mergeinfo Wed Oct 14 18:45:35 2009 @@ -1,0 +1,1 @@ +/branches/ros-amd64-bringup/reactos/include/ndk/amd64:34925,34967,34970,35323-35324,35347-35348,35361,35436,35509,35588,35739,35823,35952,35966,36360,37323,37434,37472,37475,37536,37820-37821,37869,37990,38013-38014,43426,43454
Copied: trunk/reactos/include/ndk/amd64/asm.h (from r35966, branches/ros-amd64-bringup/reactos/include/ndk/amd64/asm.h) URL: http://svn.reactos.org/svn/reactos/trunk/reactos/include/ndk/amd64/asm.h?p2=... ============================================================================== --- branches/ros-amd64-bringup/reactos/include/ndk/amd64/asm.h [iso-8859-1] (original) +++ trunk/reactos/include/ndk/amd64/asm.h [iso-8859-1] Wed Oct 14 18:45:35 2009 @@ -50,6 +50,11 @@ #define KTHREAD_STACK_LIMIT 0x30 #define KTHREAD_WAIT_IRQL 0x156
+// +// KPRCB Offsets +// +#define KPRCB_CurrentThread 0x08 +
// // KPCR Offsets @@ -57,12 +62,145 @@ #define KPCR_TSS_BASE 0x08 #define KPCR_SELF 0x18 #define KPCR_STALL_SCALE_FACTOR 0x64 - -// -// Trap Frame Offsets -// +#define KPCR_PRCB 0x180 + +// +// KTRAP_FRAME Offsets +// +#define KTRAP_FRAME_P1Home 0x00 +#define KTRAP_FRAME_P2Home 0x08 +#define KTRAP_FRAME_P3Home 0x10 +#define KTRAP_FRAME_P4Home 0x18 +#define KTRAP_FRAME_P5 0x20 +#define KTRAP_FRAME_PreviousMode 0x28 +#define KTRAP_FRAME_PreviousIrql 0x29 +#define KTRAP_FRAME_FaultIndicator 0x2A +#define KTRAP_FRAME_ExceptionActive 0x2B +#define KTRAP_FRAME_MxCsr 0x2C +#define KTRAP_FRAME_Rax 0x30 +#define KTRAP_FRAME_Rcx 0x38 +#define KTRAP_FRAME_Rdx 0x40 +#define KTRAP_FRAME_R8 0x48 +#define KTRAP_FRAME_R9 0x50 +#define KTRAP_FRAME_R10 0x58 +#define KTRAP_FRAME_R11 0x60 +#define KTRAP_FRAME_GsBase 0x68 +#define KTRAP_FRAME_Xmm0 0x70 +#define KTRAP_FRAME_Xmm1 0x80 +#define KTRAP_FRAME_Xmm2 0x90 +#define KTRAP_FRAME_Xmm3 0xA0 +#define KTRAP_FRAME_Xmm4 0xB0 +#define KTRAP_FRAME_Xmm5 0xC0 +#define KTRAP_FRAME_FaultAddress 0xD0 +#define KTRAP_FRAME_Dr0 0xD8 +#define KTRAP_FRAME_Dr1 0xE0 +#define KTRAP_FRAME_Dr2 0xE8 +#define KTRAP_FRAME_Dr3 0xF0 +#define KTRAP_FRAME_Dr6 0xF8 +#define KTRAP_FRAME_Dr7 0x100 +#define KTRAP_FRAME_DebugControl 0x108 +#define KTRAP_FRAME_LastBranchToRip 0x110 +#define KTRAP_FRAME_LastBranchFromRip 0x118 +#define KTRAP_FRAME_LastExceptionToRip 0x120 +#define KTRAP_FRAME_LastExceptionFromRip 0x128 +#define KTRAP_FRAME_SegDs 0x130 +#define KTRAP_FRAME_SegEs 0x132 +#define KTRAP_FRAME_SegFs 0x134 +#define KTRAP_FRAME_SegGs 0x136 +#define KTRAP_FRAME_TrapFrame 0x138 +#define KTRAP_FRAME_Rbx 0x140 +#define KTRAP_FRAME_Rdi 0x148 +#define KTRAP_FRAME_Rsi 0x150 +#define KTRAP_FRAME_Rbp 0x158 +#define KTRAP_FRAME_ErrorCode 0x160 +#define KTRAP_FRAME_Rip 0x168 +#define KTRAP_FRAME_SegCs 0x170 +#define KTRAP_FRAME_Logging 0x173 +#define KTRAP_FRAME_EFlags 0x178 +#define KTRAP_FRAME_Rsp 0x180 +#define KTRAP_FRAME_SegSs 0x188 +#define KTRAP_FRAME_CodePatchCycle 0x18c +#define SIZE_KTRAP_FRAME 0x190 #define KTRAP_FRAME_ALIGN 0x10 #define KTRAP_FRAME_LENGTH 0x190 + +// +// CONTEXT Offsets +// +#define CONTEXT_P1Home 0 +#define CONTEXT_P2Home 0x08 +#define CONTEXT_P3Home 0x10 +#define CONTEXT_P4Home 0x18 +#define CONTEXT_P5Home 0x20 +#define CONTEXT_P6Home 0x28 +#define CONTEXT_ContextFlags 0x30 +#define CONTEXT_MxCsr 0x34 +#define CONTEXT_SegCs 0x38 +#define CONTEXT_SegDs 0x3a +#define CONTEXT_SegEs 0x3c +#define CONTEXT_SegFs 0x3e +#define CONTEXT_SegGs 0x40 +#define CONTEXT_SegSs 0x42 +#define CONTEXT_EFlags 0x44 +#define CONTEXT_Dr0 0x48 +#define CONTEXT_Dr1 0x50 +#define CONTEXT_Dr2 0x58 +#define CONTEXT_Dr3 0x60 +#define CONTEXT_Dr6 0x68 +#define CONTEXT_Dr7 0x70 +#define CONTEXT_Rax 0x78 +#define CONTEXT_Rcx 0x80 +#define CONTEXT_Rdx 0x88 +#define CONTEXT_Rbx 0x90 +#define CONTEXT_Rsp 0x98 +#define CONTEXT_Rbp 0xa0 +#define CONTEXT_Rsi 0xa8 +#define CONTEXT_Rdi 0xb0 +#define CONTEXT_R8 0xb8 +#define CONTEXT_R9 0xc0 +#define CONTEXT_R10 0xc8 +#define CONTEXT_R11 0xd0 +#define CONTEXT_R12 0xd8 +#define CONTEXT_R13 0xe0 +#define CONTEXT_R14 0xe8 +#define CONTEXT_R15 0xf0 +#define CONTEXT_Rip 0xf8 +#define CONTEXT_Header 0x100 +#define CONTEXT_Legacy 0x120 +#define CONTEXT_Xmm0 0x1a0 +#define CONTEXT_Xmm1 0x1b0 +#define CONTEXT_Xmm2 0x1c0 +#define CONTEXT_Xmm3 0x1d0 +#define CONTEXT_Xmm4 0x1e0 +#define CONTEXT_Xmm5 0x1f0 +#define CONTEXT_Xmm6 0x200 +#define CONTEXT_Xmm7 0x210 +#define CONTEXT_Xmm8 0x220 +#define CONTEXT_Xmm9 0x230 +#define CONTEXT_Xmm10 0x240 +#define CONTEXT_Xmm11 0x250 +#define CONTEXT_Xmm12 0x260 +#define CONTEXT_Xmm13 0x270 +#define CONTEXT_Xmm14 0x280 +#define CONTEXT_Xmm15 0x290 +#define CONTEXT_VectorRegister 0x300 +#define CONTEXT_VectorControl 0x4a0 +#define CONTEXT_DebugControl 0x4a8 +#define CONTEXT_LastBranchToRip 0x4b0 +#define CONTEXT_LastBranchFromRip 0x4b8 +#define CONTEXT_LastExceptionToRip 0x4c0 +#define CONTEXT_LastExceptionFromRip 0x4c8 + +// +// EXCEPTION_RECORD Offsets +// +#define EXCEPTION_RECORD_ExceptionCode 0x00 +#define EXCEPTION_RECORD_ExceptionFlags 0x04 +#define EXCEPTION_RECORD_ExceptionRecord 0x08 +#define EXCEPTION_RECORD_ExceptionAddress 0x10 +#define EXCEPTION_RECORD_NumberParameters 0x18 +#define EXCEPTION_RECORD_ExceptionInformation 0x20 +#define SIZE_EXCEPTION_RECORD 0x98
// // CR0 @@ -80,10 +218,35 @@ #define CR0_PG 0x80000000
// +// 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 + +// // Generic Definitions // #define PRIMARY_VECTOR_BASE 0x30 #define MAXIMUM_IDTVECTOR 0xFF + +// +// Usermode callout frame definitions +// +#define CBSTACK_STACK 0x0 +#define CBSTACK_TRAP_FRAME 0x8 +#define CBSTACK_CALLBACK_STACK 0x10 +#define CBSTACK_RBP 0x18 +#define CBSTACK_RESULT 0x20 +#define CBSTACK_RESULT_LENGTH 0x28 +#define CBSTACK_FRAME_POINTER CBSTACK_RBP
/* Following ones are ASM only! ***********************************************/ @@ -110,6 +273,43 @@ #define EFLAG_SELECT (EFLAG_SIGN + EFLAG_ZERO) #define EFLAGS_USER_SANITIZE 0x3F4DD7
+// +// NTSTATUS and Bugcheck Codes +// +#define STATUS_ACCESS_VIOLATION 0xC0000005 +#define STATUS_IN_PAGE_ERROR 0xC0000006 +#define STATUS_GUARD_PAGE_VIOLATION 0x80000001 +#define STATUS_PRIVILEGED_INSTRUCTION 0xC0000096 +#define STATUS_STACK_OVERFLOW 0xC00000FD +#define KI_EXCEPTION_ACCESS_VIOLATION 0x10000004 +#define STATUS_INVALID_SYSTEM_SERVICE 0xC000001C +#define STATUS_NO_CALLBACK_ACTIVE 0xC0000258 +#define STATUS_CALLBACK_POP_STACK 0xC0000423 +#define STATUS_ARRAY_BOUNDS_EXCEEDED 0xC000008C +#define STATUS_ILLEGAL_INSTRUCTION 0xC000001D +#define STATUS_INVALID_LOCK_SEQUENCE 0xC000001E +#define STATUS_BREAKPOINT 0x80000003 +#define STATUS_SINGLE_STEP 0x80000004 +#define STATUS_INTEGER_DIVIDE_BY_ZERO 0xC0000094 +#define STATUS_INTEGER_OVERFLOW 0xC0000095 +#define STATUS_FLOAT_DENORMAL_OPERAND 0xC000008D +#define STATUS_FLOAT_DIVIDE_BY_ZERO 0xC000008E +#define STATUS_FLOAT_INEXACT_RESULT 0xC000008F +#define STATUS_FLOAT_INVALID_OPERATION 0xC0000090 +#define STATUS_FLOAT_OVERFLOW 0xC0000091 +#define STATUS_FLOAT_STACK_CHECK 0xC0000092 +#define STATUS_FLOAT_UNDERFLOW 0xC0000093 +#define STATUS_FLOAT_MULTIPLE_FAULTS 0xC00002B4 +#define STATUS_FLOAT_MULTIPLE_TRAPS 0xC00002B5 +#define APC_INDEX_MISMATCH 0x01 +#define IRQL_NOT_GREATER_OR_EQUAL 0x09 +#define IRQL_NOT_LESS_OR_EQUAL 0x0A +#define TRAP_CAUSE_UNKNOWN 0x12 +#define KMODE_EXCEPTION_NOT_HANDLED 0x13 +#define IRQL_GT_ZERO_AT_SYSTEM_SERVICE 0x4A +#define UNEXPECTED_KERNEL_MODE_TRAP 0x7F +#define ATTEMPTED_SWITCH_FROM_DPC 0xB8 +#define HARDWARE_INTERRUPT_STORM 0xF2
// // IRQL Levels
Copied: trunk/reactos/include/ndk/amd64/asmmacro.S (from r37472, branches/ros-amd64-bringup/reactos/include/ndk/amd64/asmmacro.S) URL: http://svn.reactos.org/svn/reactos/trunk/reactos/include/ndk/amd64/asmmacro.... ============================================================================== --- branches/ros-amd64-bringup/reactos/include/ndk/amd64/asmmacro.S [iso-8859-1] (original) +++ trunk/reactos/include/ndk/amd64/asmmacro.S [iso-8859-1] Wed Oct 14 18:45:35 2009 @@ -63,11 +63,11 @@ .macro .endprolog .endm
-.macro UNIMPLEMENTED2 line, func +.macro UNIMPLEMENTED2 file, line, func jmp 3f .equ expr, 12 1: .asciz "\func" -2: .asciz __FILE__ +2: .asciz "\file" 3: sub rsp, 0x20 lea rcx, _MsgUnimplemented[rip] @@ -77,5 +77,5 @@ call _DbgPrint add rsp, 0x20 .endm -#define UNIMPLEMENTED UNIMPLEMENTED2 __LINE__, +#define UNIMPLEMENTED UNIMPLEMENTED2 __FILE__, __LINE__,
Propchange: trunk/reactos/include/ndk/amd64/asmmacro.S ------------------------------------------------------------------------------ svn:eol-style = native
Propchange: trunk/reactos/include/ndk/amd64/asmmacro.S ------------------------------------------------------------------------------ --- svn:mergeinfo (added) +++ svn:mergeinfo Wed Oct 14 18:45:35 2009 @@ -1,0 +1,1 @@ +/branches/ros-amd64-bringup/reactos/include/ndk/amd64/asmmacro.S:37475,37536,37820-37821,37869,37990,38013-38014,43426,43454
Modified: trunk/reactos/include/ndk/amd64/ketypes.h URL: http://svn.reactos.org/svn/reactos/trunk/reactos/include/ndk/amd64/ketypes.h... ============================================================================== --- trunk/reactos/include/ndk/amd64/ketypes.h [iso-8859-1] (original) +++ trunk/reactos/include/ndk/amd64/ketypes.h [iso-8859-1] Wed Oct 14 18:45:35 2009 @@ -1,23 +1,25 @@ /*++ NDK Version: 0098
Copyright (c) Alex Ionescu. All rights reserved. +Copyright (c) Timo Kreuzer. All rights reserved.
Header Name:
- ketypes.h (X86) + ketypes.h (AMD64)
Abstract:
- i386 Type definitions for the Kernel services. + amd64 Type definitions for the Kernel services.
Author:
Alex Ionescu (alexi@tinykrnl.org) - Updated - 27-Feb-2006 + Timo Kreuzer (timo.kreuzer@reactos.org) - Updated - 14-Aug-2008
--*/
-#ifndef _I386_KETYPES_H -#define _I386_KETYPES_H +#ifndef _AMD64_KETYPES_H +#define _AMD64_KETYPES_H
// // Dependencies @@ -26,12 +28,13 @@ // // KPCR Access for non-IA64 builds // -#define K0IPCR ((ULONG_PTR)(KIP0PCRADDRESS)) -#define PCR ((volatile KPCR * const)K0IPCR) -#if defined(CONFIG_SMP) || defined(NT_BUILD) -#undef KeGetPcr -#define KeGetPcr() ((volatile KPCR * const)__readfsdword(0x1C)) -#endif +//#define K0IPCR ((ULONG_PTR)(KIP0PCRADDRESS)) +//#define PCR ((volatile KPCR * const)K0IPCR) +#define PCR ((volatile KPCR * const)__readgsqword(FIELD_OFFSET(KPCR, Self))) +//#if defined(CONFIG_SMP) || defined(NT_BUILD) +//#undef KeGetPcr +//#define KeGetPcr() ((volatile KPCR * const)__readfsdword(0x1C)) +//#endif
// // Machine Types @@ -55,16 +58,13 @@ // #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 KGDT_64_R0_CODE 0x0010 +#define KGDT_64_R0_SS 0x0018 +#define KGDT_64_DATA 0x0028 // 2b +#define KGDT_64_R3_CODE 0x0030 // 33 +#define KGDT_TSS 0x0040 +#define KGDT_32_R3_TEB 0x0050 // 53 +
// // CR4 @@ -131,7 +131,7 @@ // // Static Kernel-Mode Address start (use MM_KSEG0_BASE for actual) // -#define KSEG0_BASE 0x80000000 +#define KSEG0_BASE 0xfffff80000000000ULL
// // Synchronization-level IRQL @@ -139,7 +139,7 @@ #ifndef CONFIG_SMP #define SYNCH_LEVEL DISPATCH_LEVEL #else -#define SYNCH_LEVEL (IPI_LEVEL - 1) +#define SYNCH_LEVEL (IPI_LEVEL - 2) #endif
// @@ -147,109 +147,134 @@ // 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; - -// -// LDT Entry Definition -// -#ifndef _LDT_ENTRY_DEFINED -#define _LDT_ENTRY_DEFINED -typedef struct _LDT_ENTRY -{ - USHORT LimitLow; - USHORT BaseLow; + UINT64 P1Home; + UINT64 P2Home; + UINT64 P3Home; + UINT64 P4Home; + UINT64 P5; + CHAR PreviousMode; + UCHAR PreviousIrql; + UCHAR FaultIndicator; + UCHAR ExceptionActive; + ULONG MxCsr; + UINT64 Rax; + UINT64 Rcx; + UINT64 Rdx; + UINT64 R8; + UINT64 R9; + UINT64 R10; + UINT64 R11; + union + { + UINT64 GsBase; + UINT64 GsSwap; + }; + M128A Xmm0; + M128A Xmm1; + M128A Xmm2; + M128A Xmm3; + M128A Xmm4; + M128A Xmm5; + union + { + UINT64 FaultAddress; + UINT64 ContextRecord; + UINT64 TimeStampCKCL; + }; + UINT64 Dr0; + UINT64 Dr1; + UINT64 Dr2; + UINT64 Dr3; + UINT64 Dr6; + UINT64 Dr7; union { struct { - UCHAR BaseMid; - UCHAR Flags1; - UCHAR Flags2; - UCHAR BaseHi; - } Bytes; + UINT64 DebugControl; + UINT64 LastBranchToRip; + UINT64 LastBranchFromRip; + UINT64 LastExceptionToRip; + UINT64 LastExceptionFromRip; + }; 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 + UINT64 LastBranchControl; + ULONG LastBranchMSR; + }; + }; + USHORT SegDs; + USHORT SegEs; + USHORT SegFs; + USHORT SegGs; + UINT64 TrapFrame; + UINT64 Rbx; + UINT64 Rdi; + UINT64 Rsi; + UINT64 Rbp; + union + { + UINT64 ErrorCode; + UINT64 ExceptionFrame; + UINT64 TimeStampKlog; + }; + UINT64 Rip; + USHORT SegCs; + UCHAR Fill0; + UCHAR Logging; + USHORT Fill1[2]; + ULONG EFlags; + ULONG Fill2; + UINT64 Rsp; + USHORT SegSs; + USHORT Fill3; + LONG CodePatchCycle; +} KTRAP_FRAME, *PKTRAP_FRAME; + +// +// Dummy LDT_ENTRY +// +typedef ULONG LDT_ENTRY;
// // GDT Entry Definition // -typedef struct _KGDTENTRY -{ - USHORT LimitLow; - USHORT BaseLow; - union - { - struct +typedef union _KGDTENTRY64 +{ + struct + { + USHORT LimitLow; + USHORT BaseLow; + union { - 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; + struct + { + UCHAR BaseMiddle; + UCHAR Flags1; + UCHAR Flags2; + UCHAR BaseHigh; + } Bytes; + struct + { + ULONG BaseMiddle:8; + ULONG Type:5; + ULONG Dpl:2; + ULONG Present:1; + ULONG LimitHigh:4; + ULONG System:1; + ULONG LongMode:1; + ULONG DefaultBig:1; + ULONG Granularity:1; + ULONG BaseHigh:8; + } Bits; + }; + ULONG BaseUpper; + ULONG MustBeZero; + }; + UINT64 Alignment; +} KGDTENTRY64, *PKGDTENTRY64; +#define KGDTENTRY KGDTENTRY64 +#define PKGDTENTRY PKGDTENTRY64
// // IDT Entry Access Definition @@ -273,96 +298,67 @@ // // IDT Entry Definition // -typedef struct _KIDTENTRY -{ - USHORT Offset; - USHORT Selector; - USHORT Access; - USHORT ExtendedOffset; -} KIDTENTRY, *PKIDTENTRY; - -typedef struct _DESCRIPTOR -{ - USHORT Pad; +typedef union _KIDTENTRY64 +{ + struct + { + USHORT OffsetLow; + USHORT Selector; + USHORT IstIndex:3; + USHORT Reserved0:5; + USHORT Type:5; + USHORT Dpl:2; + USHORT Present:1; + USHORT OffsetMiddle; + ULONG OffsetHigh; + ULONG Reserved1; + }; + UINT64 Alignment; +} KIDTENTRY64, *PKIDTENTRY64; +#define KIDTENTRY KIDTENTRY64 +#define PKIDTENTRY PKIDTENTRY64 + +typedef struct _KDESCRIPTOR +{ + USHORT Pad[3]; USHORT Limit; - ULONG Base; + PVOID 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[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;
// // 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; + UINT64 Cr0; + UINT64 Cr2; + UINT64 Cr3; + UINT64 Cr4; + UINT64 KernelDr0; + UINT64 KernelDr1; + UINT64 KernelDr2; + UINT64 KernelDr3; + UINT64 KernelDr6; + UINT64 KernelDr7; + struct _KDESCRIPTOR Gdtr; + struct _KDESCRIPTOR Idtr; USHORT Tr; USHORT Ldtr; - ULONG Reserved[6]; + ULONG MxCsr; + UINT64 DebugControl; + UINT64 LastBranchToRip; + UINT64 LastBranchFromRip; + UINT64 LastExceptionToRip; + UINT64 LastExceptionFromRip; + UINT64 Cr8; + UINT64 MsrGsBase; + UINT64 MsrGsSwap; + UINT64 MsrStar; + UINT64 MsrLStar; + UINT64 MsrCStar; + UINT64 MsrSyscallMask; } KSPECIAL_REGISTERS, *PKSPECIAL_REGISTERS;
// @@ -370,9 +366,70 @@ // typedef struct _KPROCESSOR_STATE { + KSPECIAL_REGISTERS SpecialRegisters; CONTEXT ContextFrame; - KSPECIAL_REGISTERS SpecialRegisters; } KPROCESSOR_STATE, *PKPROCESSOR_STATE; + +#if (NTDDI_VERSION >= NTDDI_LONGHORN) +typedef struct _GENERAL_LOOKASIDE_POOL +{ + union + { + SLIST_HEADER ListHead; + SINGLE_LIST_ENTRY SingleListHead; + }; + USHORT Depth; + USHORT MaximumDepth; + ULONG TotalAllocates; + union + { + ULONG AllocateMisses; + ULONG AllocateHits; + }; + union + { + ULONG TotalFrees; + ULONG FreeMisses; + }; + ULONG FreeHits; + POOL_TYPE Type; + ULONG Tag; + ULONG Size; + union + { + PVOID AllocateEx; + PVOID Allocate; + }; + union + { + PVOID FreeEx; + PVOID Free; + }; + LIST_ENTRY ListEntry; + ULONG LastTotalAllocates; + union + { + ULONG LastAllocateMisses; + ULONG LastAllocateHits; + }; + ULONG Future[2]; +} GENERAL_LOOKASIDE_POOL, *PGENERAL_LOOKASIDE_POOL; +#else +#define GENERAL_LOOKASIDE_POOL PP_LOOKASIDE_LIST +#endif + +typedef struct _KREQUEST_PACKET +{ + PVOID CurrentPacket[3]; + PVOID WorkerRoutine; +} KREQUEST_PACKET, *PKREQUEST_PACKET; + +typedef struct _REQUEST_MAILBOX +{ + INT64 RequestSummary; + KREQUEST_PACKET RequestPacket; + PVOID Virtual[7]; +} REQUEST_MAILBOX, *PREQUEST_MAILBOX;
// // Processor Region Control Block @@ -380,89 +437,214 @@ #pragma pack(push,4) typedef struct _KPRCB { - USHORT MinorVersion; - USHORT MajorVersion; + ULONG MxCsr; +#if (NTDDI_VERSION >= NTDDI_LONGHORN) + USHORT Number; +#else + UCHAR Number; + UCHAR NestingLevel; +#endif + UCHAR InterruptRequest; + UCHAR IdleHalt; struct _KTHREAD *CurrentThread; struct _KTHREAD *NextThread; struct _KTHREAD *IdleThread; - UCHAR Number; - UCHAR Reserved; - USHORT BuildType; - KAFFINITY SetMember; - UCHAR CpuType; - UCHAR CpuID; +#if (NTDDI_VERSION >= NTDDI_LONGHORN) + UCHAR NestingLevel; + UCHAR Group; + UCHAR PrcbPad00[6]; +#else + UINT64 UserRsp; +#endif + UINT64 RspBase; + UINT64 PrcbLock; + UINT64 SetMember; + KPROCESSOR_STATE ProcessorState; + CHAR CpuType; + CHAR CpuID; +#if (NTDDI_VERSION >= NTDDI_LONGHORN) + union + { + USHORT CpuStep; + struct + { + UCHAR CpuStepping; + UCHAR CpuModel; + }; + }; +#else USHORT CpuStep; - KPROCESSOR_STATE ProcessorState; - ULONG KernelReserved[16]; - ULONG HalReserved[16]; +#endif + ULONG MHz; + UINT64 HalReserved[8]; + USHORT MinorVersion; + USHORT MajorVersion; + UCHAR BuildType; + UCHAR CpuVendor; +#if (NTDDI_VERSION >= NTDDI_LONGHORN) + UCHAR CoresPerPhysicalProcessor; + UCHAR LogicalProcessorsPerCore; +#else + UCHAR InitialApicId; + UCHAR LogicalProcessorsPerPhysicalProcessor; +#endif + ULONG ApicMask; #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 +#else + UCHAR CFlushSize; + UCHAR PrcbPad0x[3]; +#endif + PVOID AcpiReserved; +#if (NTDDI_VERSION >= NTDDI_LONGHORN) + ULONG InitialApicId; + ULONG Stride; + UINT64 PrcbPad01[3]; +#else + UINT64 PrcbPad00[4]; +#endif + KSPIN_LOCK_QUEUE LockQueue[LockQueueMaximumLock]; // 2003: 33, vista:49 + PP_LOOKASIDE_LIST PPLookasideList[16]; + GENERAL_LOOKASIDE_POOL PPNPagedLookasideList[32]; + GENERAL_LOOKASIDE_POOL PPPagedLookasideList[32]; + UINT64 PacketBarrier; + SINGLE_LIST_ENTRY DeferredReadyListHead; + LONG MmPageFaultCount; + LONG MmCopyOnWriteCount; + LONG MmTransitionCount; +#if (NTDDI_VERSION < NTDDI_LONGHORN) + LONG MmCacheTransitionCount; +#endif + LONG MmDemandZeroCount; + LONG MmPageReadCount; + LONG MmPageReadIoCount; +#if (NTDDI_VERSION < NTDDI_LONGHORN) + LONG MmCacheReadCount; + LONG MmCacheIoCount; +#endif + LONG MmDirtyPagesWriteCount; + LONG MmDirtyWriteIoCount; + LONG MmMappedPagesWriteCount; + LONG MmMappedWriteIoCount; +#if (NTDDI_VERSION >= NTDDI_LONGHORN) + ULONG KeSystemCalls; + ULONG KeContextSwitches; 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; + LONG LookasideIrpFloat; +#else + LONG LookasideIrpFloat; ULONG KeSystemCalls; #endif - volatile ULONG IoReadOperationCount; - volatile ULONG IoWriteOperationCount; - volatile ULONG IoOtherOperationCount; + LONG IoReadOperationCount; + LONG IoWriteOperationCount; + LONG IoOtherOperationCount; LARGE_INTEGER IoReadTransferCount; LARGE_INTEGER IoWriteTransferCount; LARGE_INTEGER IoOtherTransferCount; -#if (NTDDI_VERSION >= NTDDI_LONGHORN) +#if (NTDDI_VERSION < NTDDI_LONGHORN) + ULONG KeContextSwitches; + UCHAR PrcbPad2[12]; +#endif + UINT64 TargetSet; + ULONG IpiFrozen; + UCHAR PrcbPad3[116]; + REQUEST_MAILBOX RequestMailbox[64]; + UINT64 SenderSummary; + UCHAR PrcbPad4[120]; + KDPC_DATA DpcData[2]; + PVOID DpcStack; +#if (NTDDI_VERSION >= NTDDI_LONGHORN) + PVOID SparePtr0; +#else + PVOID SavedRsp; +#endif + LONG MaximumDpcQueueDepth; + ULONG DpcRequestRate; + ULONG MinimumDpcRate; + UCHAR DpcInterruptRequested; + UCHAR DpcThreadRequested; + UCHAR DpcRoutineActive; + UCHAR DpcThreadActive; + UINT64 TimerHand; + UINT64 TimerRequest; + LONG TickOffset; + LONG MasterOffset; + ULONG DpcLastCount; + UCHAR ThreadDpcEnable; + UCHAR QuantumEnd; + UCHAR PrcbPad50; + UCHAR IdleSchedule; + LONG DpcSetEventRequest; +#if (NTDDI_VERSION >= NTDDI_LONGHORN) + ULONG KeExceptionDispatchCount; +#else + LONG PrcbPad40; + PVOID DpcThread; +#endif + KEVENT DpcEvent; +#if (NTDDI_VERSION >= NTDDI_LONGHORN) + PVOID PrcbPad51; +#endif + KDPC CallDpc; +#if (NTDDI_VERSION >= NTDDI_LONGHORN) + LONG ClockKeepAlive; + UCHAR ClockCheckSlot; + UCHAR ClockPollCycle; + UCHAR PrcbPad6[2]; + LONG DpcWatchdogPeriod; + LONG DpcWatchdogCount; + UINT64 PrcbPad70[2]; +#else + UINT64 PrcbPad7[4]; +#endif + LIST_ENTRY WaitListHead; +#if (NTDDI_VERSION >= NTDDI_LONGHORN) + UINT64 WaitLock; +#endif + ULONG ReadySummary; + ULONG QueueIndex; +#if (NTDDI_VERSION >= NTDDI_LONGHORN) + UINT64 PrcbPad71[12]; +#endif + LIST_ENTRY DispatcherReadyListHead[32]; + ULONG InterruptCount; + ULONG KernelTime; + ULONG UserTime; + ULONG DpcTime; + ULONG InterruptTime; + ULONG AdjustDpcThreshold; + UCHAR SkipTick; + UCHAR DebuggerSavedIRQL; + UCHAR PollSlot; +#if (NTDDI_VERSION >= NTDDI_LONGHORN) + UCHAR PrcbPad80[5]; + ULONG DpcTimeCount; + ULONG DpcTimeLimit; + ULONG PeriodicCount; + ULONG PeriodicBias; + UINT64 PrcbPad81[2]; +#else + UCHAR PrcbPad8[13]; +#endif + struct _KNODE *ParentNode; + UINT64 MultiThreadProcessorSet; + struct _KPRCB *MultiThreadSetMaster; +#if (NTDDI_VERSION >= NTDDI_LONGHORN) + UINT64 StartCycles; + LONG MmSpinLockOrdering; + ULONG PageColor; + ULONG NodeColor; + ULONG NodeShiftedColor; + ULONG SecondaryColorMask; +#endif + LONG Sleeping; +#if (NTDDI_VERSION >= NTDDI_LONGHORN) + UINT64 CycleTime; ULONG CcFastMdlReadNoWait; ULONG CcFastMdlReadWait; ULONG CcFastMdlReadNotPossible; @@ -489,137 +671,65 @@ ULONG CcMdlReadNoWaitMiss; ULONG CcMdlReadWaitMiss; ULONG CcReadAheadIos; + LONG MmCacheTransitionCount; + LONG MmCacheReadCount; + LONG MmCacheIoCount; + ULONG PrcbPad91[3]; + PROCESSOR_POWER_STATE PowerState; ULONG KeAlignmentFixupCount; - ULONG KeExceptionDispatchCount; - ULONG KeSystemCalls; - ULONG PrcbPad1[3]; -#else - ULONG SpareCounter1[8]; -#endif - PP_LOOKASIDE_LIST PPLookasideList[16]; - PP_LOOKASIDE_LIST PPNPagedLookasideList[32]; - PP_LOOKASIDE_LIST PPPagedLookasideList[32]; - 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) + UCHAR VendorString[13]; + UCHAR PrcbPad10[3]; + ULONG FeatureBits; + LARGE_INTEGER UpdateSignature; + KDPC DpcWatchdogDpc; + KTIMER DpcWatchdogTimer; + CACHE_DESCRIPTOR Cache[5]; + ULONG CacheCount; 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; + SLIST_HEADER HypercallPageList; + PVOID HypercallPageVirtual; + PVOID VirtualApicAssist; + UINT64* StatisticsPage; PVOID RateControl; + UINT64 CacheProcessorMask[5]; + UINT64 PackageProcessorSet; + UINT64 CoreProcessorSet; +#else + ULONG PrcbPad90[1]; + ULONG DebugDpcTime; + ULONG PageColor; + ULONG NodeColor; + ULONG NodeShiftedColor; + ULONG SecondaryColorMask; + UCHAR PrcbPad9[12]; + ULONG CcFastReadNoWait; + ULONG CcFastReadWait; + ULONG CcFastReadNotPossible; + ULONG CcCopyReadNoWait; + ULONG CcCopyReadWait; + ULONG CcCopyReadNoWaitMiss; + ULONG KeAlignmentFixupCount; + ULONG KeDcacheFlushCount; + ULONG KeExceptionDispatchCount; + ULONG KeFirstLevelTbFills; + ULONG KeFloatingEmulationCount; + ULONG KeIcacheFlushCount; + ULONG KeSecondLevelTbFills; + UCHAR VendorString[13]; + UCHAR PrcbPad10[2]; + ULONG FeatureBits; + LARGE_INTEGER UpdateSignature; + PROCESSOR_POWER_STATE PowerState; CACHE_DESCRIPTOR Cache[5]; ULONG CacheCount; - ULONG CacheProcessorMask[5]; - UCHAR LogicalProcessorsPerCore; - UCHAR PrcbPad8[3]; - ULONG PackageProcessorSet; - ULONG CoreProcessorSet; -#endif -} KPRCB, *PKPRCB; +#endif +} + KPRCB, *PKPRCB;
// // Processor Control Region @@ -631,41 +741,40 @@ NT_TIB NtTib; struct { - struct _EXCEPTION_REGISTRATION_RECORD *Used_ExceptionList; - PVOID Used_StackBase; - PVOID PerfGlobalGroupMask; - PVOID TssCopy; - ULONG ContextSwitches; - KAFFINITY SetMemberCopy; + union _KGDTENTRY64 *GdtBase; + struct _KTSS64 *TssBase; + ULONG64 UserRsp; + struct _KPCR *Self; + struct _KPRCB *CurrentPrcb; + PKSPIN_LOCK_QUEUE LockArray; PVOID Used_Self; }; }; - struct _KPCR *Self; - struct _KPRCB *Prcb; + union _KIDTENTRY64 *IdtBase; + ULONG64 Unused[2]; KIRQL Irql; - ULONG IRR; - ULONG IrrActive; - ULONG IDR; - PVOID KdVersionBlock; - PKIDTENTRY IDT; - PKGDTENTRY GDT; - struct _KTSS *TSS; + UCHAR SecondLevelCacheAssociativity; + UCHAR ObsoleteNumber; + UCHAR Fill0; + ULONG Unused0[3]; USHORT MajorVersion; USHORT MinorVersion; - KAFFINITY SetMember; ULONG StallScaleFactor; - UCHAR SparedUnused; - UCHAR Number; - UCHAR Reserved; - UCHAR L2CacheAssociativity; - ULONG VdmAlert; - ULONG KernelReserved[14]; + PVOID Unused1[3]; + ULONG KernelReserved[15]; ULONG SecondLevelCacheSize; ULONG HalReserved[16]; - ULONG InterruptMode; - UCHAR Spare1; - ULONG KernelReserved2[17]; - KPRCB PrcbData; + ULONG Unused2; + ULONG Fill1; + PVOID KdVersionBlock; // 0x108 + PVOID Unused3; + ULONG PcrAlign1[24]; + ULONG Fill2[2]; // 0x178 + KPRCB Prcb; // 0x180 + + // hack: + ULONG ContextSwitches; + } KIPCR, *PKIPCR; #pragma pack(pop)
@@ -678,48 +787,37 @@ UCHAR IoMap[8196]; } 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[1]; - UCHAR IntDirectionMap[32]; -} KTSS, *PKTSS; + +#pragma pack(push,4) +typedef struct _KTSS64 +{ + /* 000 */ ULONG Reserved0; + /* 004 */ UINT64 Rsp0; + /* 00c */ UINT64 Rsp1; + /* 014 */ UINT64 Rsp2; + /* 01c */ UINT64 Ist[8]; + /* 05c */ UINT64 Reserved1; + /* 064 */ USHORT Reserved2; + /* 066 */ USHORT IoMapBase; +} KTSS64, *PKTSS64; +#pragma pack(pop) +#define KTSS KTSS64 +#define PKTSS PKTSS64
// // i386 CPUs don't have exception frames // typedef struct _KEXCEPTION_FRAME KEXCEPTION_FRAME, *PKEXCEPTION_FRAME; -#endif -#endif + +// +// Inline function to get current KPRCB +// +FORCEINLINE +struct _KPRCB * +KeGetCurrentPrcb(VOID) +{ + return (struct _KPRCB *)__readgsqword(FIELD_OFFSET(KIPCR, CurrentPrcb)); +} + +#endif +#endif
Modified: trunk/reactos/include/ndk/amd64/mmtypes.h URL: http://svn.reactos.org/svn/reactos/trunk/reactos/include/ndk/amd64/mmtypes.h... ============================================================================== --- trunk/reactos/include/ndk/amd64/mmtypes.h [iso-8859-1] (original) +++ trunk/reactos/include/ndk/amd64/mmtypes.h [iso-8859-1] Wed Oct 14 18:45:35 2009 @@ -1,18 +1,20 @@ /*++ NDK Version: 0095
Copyright (c) Alex Ionescu. All rights reserved. +Copyright (c) Timo Kreuzer All rights reserved.
Header Name:
- mmtypes.h (X86) + mmtypes.h (AMD64)
Abstract:
- i386 Type definitions for the Memory Manager + AMD64 Type definitions for the Memory Manager
Author:
Alex Ionescu (alex.ionescu@reactos.com) 06-Oct-2004 + Timo Kreuzer (timo.kreuzer@reactos.com) 15-Aug-2008
--*/
@@ -43,127 +45,154 @@ #endif
// -// PAE SEG0 Base? -// -#define KSEG0_BASE_PAE 0xE0000000 - -// // Page Table Entry Definitions // -typedef struct _HARDWARE_PTE_X86 +typedef struct _HARDWARE_PTE { - 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; + ULONG64 Valid:1; + ULONG64 Write:1; + ULONG64 Owner:1; + ULONG64 WriteThrough:1; + ULONG64 CacheDisable:1; + ULONG64 Accessed:1; + ULONG64 Dirty:1; + ULONG64 LargePage:1; + ULONG64 Global:1; + ULONG64 CopyOnWrite:1; + ULONG64 Prototype:1; + ULONG64 reserved0:1; + ULONG64 PageFrameNumber:28; + ULONG64 reserved1:12; + ULONG64 SoftwareWsIndex:11; + ULONG64 NoExecute:1; +} HARDWARE_PTE, *PHARDWARE_PTE;
typedef struct _MMPTE_SOFTWARE { - ULONG Valid:1; - ULONG PageFileLow:4; - ULONG Protection:5; - ULONG Prototype:1; - ULONG Transition:1; - ULONG PageFileHigh:20; -} MMPTE_SOFTWARE; + ULONG64 Valid:1; + ULONG64 PageFileLow:4; + ULONG64 Protection:5; + ULONG64 Prototype:1; + ULONG64 Transition:1; + ULONG64 UsedPageTableEntries:10; + ULONG64 Reserved:10; + ULONG64 PageFileHigh:32; +} MMPTE_SOFTWARE, *PMMPTE_SOFTWARE;
typedef struct _MMPTE_TRANSITION { - ULONG Valid:1; - ULONG Write:1; - ULONG Owner:1; - ULONG WriteThrough:1; - ULONG CacheDisable:1; - ULONG Protection:5; - ULONG Prototype:1; - ULONG Transition:1; - ULONG PageFrameNumber:20; + ULONG64 Valid:1; + ULONG64 Write:1; + ULONG64 Owner:1; + ULONG64 WriteThrough:1; + ULONG64 CacheDisable:1; + ULONG64 Protection:5; + ULONG64 Prototype:1; + ULONG64 Transition:1; +#if (NTDDI_VERSION >= NTDDI_LONGHORN) + ULONG64 PageFrameNumber:36; + ULONG64 Unused:16; +#else + ULONG64 PageFrameNumber:28; + ULONG64 Unused:24; +#endif } MMPTE_TRANSITION;
typedef struct _MMPTE_PROTOTYPE { - ULONG Valid:1; - ULONG ProtoAddressLow:7; - ULONG ReadOnly:1; - ULONG WhichPool:1; - ULONG Prototype:1; - ULONG ProtoAddressHigh:21; + ULONG64 Valid:1; + ULONG64 Unused0:7; + ULONG64 ReadOnly:1; + ULONG64 Unused1:1; + ULONG64 Prototype:1; + ULONG64 Protection:5; + LONG64 ProtoAddress:48; } MMPTE_PROTOTYPE;
typedef struct _MMPTE_SUBSECTION { - ULONG Valid:1; - ULONG SubsectionAddressLow:4; - ULONG Protection:5; - ULONG Prototype:1; - ULONG SubsectionAddressHigh:20; - ULONG WhichPool:1; + ULONG64 Valid:1; + ULONG64 Unused0:4; + ULONG64 Protection:5; + ULONG64 Prototype:1; + ULONG64 Unused1:5; + LONG64 SubsectionAddress:48; } MMPTE_SUBSECTION;
typedef struct _MMPTE_LIST { - ULONG Valid:1; - ULONG OneEntry:1; - ULONG filler0:8; - ULONG NextEntry:20; - ULONG Prototype:1; - ULONG filler1:1; + ULONG64 Valid:1; + ULONG64 OneEntry:1; + ULONG64 filler0:3; + ULONG64 Protection:5; + ULONG64 Prototype:1; + ULONG64 Transition:1; + ULONG64 filler1:20; + ULONG64 NextEntry:32; } MMPTE_LIST; - -#ifndef CONFIG_SMP
typedef struct _MMPTE_HARDWARE { - 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; + ULONG64 Valid:1; +#if (NTDDI_VERSION >= NTDDI_LONGHORN) + ULONG64 Dirty1:1; +#else +#ifdef CONFIG_SMP + ULONG64 Writable:1; +#else + ULONG64 Write:1; +#endif +#endif + ULONG64 Owner:1; + ULONG64 WriteThrough:1; + ULONG64 CacheDisable:1; + ULONG64 Accessed:1; + ULONG64 Dirty:1; + ULONG64 LargePage:1; + ULONG64 Global:1; + ULONG64 CopyOnWrite:1; + ULONG64 Prototype:1; +#if (NTDDI_VERSION >= NTDDI_LONGHORN) + ULONG64 Write:1; + ULONG64 PageFrameNumber:36; + ULONG64 reserved1:4; +#else +#ifdef CONFIG_SMP + ULONG64 Write:1; +#else + ULONG64 reserved0:1; +#endif + ULONG64 PageFrameNumber:28; + ULONG64 reserved1:12; +#endif + ULONG64 SoftwareWsIndex:11; + ULONG64 NoExecute:1; } MMPTE_HARDWARE, *PMMPTE_HARDWARE;
+typedef struct _MMPTE_HARDWARE_LARGEPAGE +{ + ULONG64 Valid:1; + ULONG64 Write:1; + ULONG64 Owner:1; + ULONG64 WriteThrough:1; + ULONG64 CacheDisable:1; + ULONG64 Accessed:1; + ULONG64 Dirty:1; + ULONG64 LargePage:1; + ULONG64 Global:1; + ULONG64 CopyOnWrite:1; + ULONG64 Prototype:1; + ULONG64 reserved0:1; + ULONG64 PAT:1; + ULONG64 reserved1:8; +#if (NTDDI_VERSION >= NTDDI_LONGHORN) + ULONG64 PageFrameNumber:27; + ULONG64 reserved2:16; #else + ULONG64 PageFrameNumber:19; + ULONG64 reserved2:24; +#endif +} MMPTE_HARDWARE_LARGEPAGE, *PMMPTE_HARDWARE_LARGEPAGE;
-typedef struct _MMPTE_HARDWARE -{ - ULONG Valid:1; - ULONG Writable: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 Write:1; - ULONG PageFrameNumber:20; -} MMPTE_HARDWARE, *PMMPTE_HARDWARE;
-#endif - -// -// Use the right PTE structure -// -#define HARDWARE_PTE HARDWARE_PTE_X86 -#define PHARDWARE_PTE PHARDWARE_PTE_X86 - -#endif +#endif // !AMD64_MMTYPES_H
Modified: trunk/reactos/include/ndk/arch/ketypes.h URL: http://svn.reactos.org/svn/reactos/trunk/reactos/include/ndk/arch/ketypes.h?... ============================================================================== --- trunk/reactos/include/ndk/arch/ketypes.h [iso-8859-1] (original) +++ trunk/reactos/include/ndk/arch/ketypes.h [iso-8859-1] Wed Oct 14 18:45:35 2009 @@ -24,6 +24,8 @@ // #ifdef _M_IX86 #include <i386/ketypes.h> +#elif defined(_M_AMD64) +#include <amd64/ketypes.h> #elif defined(_M_PPC) #include <powerpc/ketypes.h> #elif defined(_M_ARM)
Modified: trunk/reactos/include/ndk/asm.h URL: http://svn.reactos.org/svn/reactos/trunk/reactos/include/ndk/asm.h?rev=43455... ============================================================================== --- trunk/reactos/include/ndk/asm.h [iso-8859-1] (original) +++ trunk/reactos/include/ndk/asm.h [iso-8859-1] Wed Oct 14 18:45:35 2009 @@ -16,7 +16,9 @@ Alex Ionescu (alex.ionescu@reactos.com) 06-Oct-2004
--*/ - +#ifdef _M_AMD64 +# include "amd64/asm.h" +#else #ifndef _ASM_H #define _ASM_H
@@ -639,5 +641,6 @@
- - +#endif + +
Modified: trunk/reactos/include/ndk/pstypes.h URL: http://svn.reactos.org/svn/reactos/trunk/reactos/include/ndk/pstypes.h?rev=4... ============================================================================== --- trunk/reactos/include/ndk/pstypes.h [iso-8859-1] (original) +++ trunk/reactos/include/ndk/pstypes.h [iso-8859-1] Wed Oct 14 18:45:35 2009 @@ -1077,7 +1077,7 @@ #endif PPS_IMPERSONATION_INFORMATION ImpersonationInfo; LIST_ENTRY IrpList; - ULONG TopLevelIrp; + ULONG_PTR TopLevelIrp; PDEVICE_OBJECT DeviceToVerify; #if (NTDDI_VERSION >= NTDDI_LONGHORN) PPSP_RATE_APC RateControlApc;