Merge amd64 NDK from amd64 branch:
authorTimo Kreuzer <timo.kreuzer@reactos.org>
Wed, 14 Oct 2009 16:45:35 +0000 (16:45 +0000)
committerTimo Kreuzer <timo.kreuzer@reactos.org>
Wed, 14 Oct 2009 16:45:35 +0000 (16:45 +0000)
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

svn path=/trunk/; revision=43455

1  2  3  4 
reactos/include/ndk/amd64/asm.h
reactos/include/ndk/amd64/asmmacro.S
reactos/include/ndk/amd64/ketypes.h
reactos/include/ndk/amd64/mmtypes.h
reactos/include/ndk/asm.h
reactos/include/ndk/pstypes.h

index 0000000,0000000,ff049f0,bed49f7..0636261
mode 000000,000000,100644,100644..100644
--- /dev/null
--- /dev/null
@@@@@ -1,0 -1,0 -1,152 -1,219 +1,352 @@@@@
   -
   -//
   -// Trap Frame Offsets
   -//
++  /*++ NDK Version: 0095
++  
++  Copyright (c) Timo Kreuzer.  All rights reserved.
++  
++  Header Name:
++  
++      amd64/asm.h
++  
++  Abstract:
++  
++      ASM Offsets for dealing with de-referencing structures in registers.
++  
++  Author:
++  
++      Timo Kreuzer (timo.kreuzer@reactos.org)   06-Sep-2008
++  
++  --*/
++  #ifndef _ASM_AMD64_H
++  #define _ASM_AMD64_H
++  
++  
++  #define SIZEOF_FX_SAVE_AREA 528 // HACK
++  
++  //
++  // CPU Modes
++  //
++  #define KernelMode                              0x0
++  #define UserMode                                0x1
++  
++  //
++  // CPU Types
++  //
++  #define CPU_INTEL                               0x1
++  #define CPU_AMD                                 0x2
++  
++  //
++  // KTSS Offsets
++  //
++  #define KTSS64_RSP0                             0x04
++  #define KTSS64_RSP1                             0x0c
++  #define KTSS64_RSP2                             0x14
++  #define KTSS64_IST                              0x1c   
++  #define KTSS64_IO_MAP_BASE                      0x66
++  
++  //
++  // KTHREAD Offsets
++  //
++  #define KTHREAD_DEBUG_ACTIVE                    0x03
++  #define KTHREAD_INITIAL_STACK                   0x28
++  #define KTHREAD_STACK_LIMIT                     0x30
++  #define KTHREAD_WAIT_IRQL                       0x156
++  
++++//
++++// KPRCB Offsets
++++//
++++#define KPRCB_CurrentThread 0x08
++++
++  
++  //
++  // KPCR Offsets
++  //
++  #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
++  //
++  #define CR0_PE                                  0x1
++  #define CR0_MP                                  0x2
++  #define CR0_EM                                  0x4
++  #define CR0_TS                                  0x8
++  #define CR0_ET                                  0x10
++  #define CR0_NE                                  0x20
++  #define CR0_WP                                  0x10000
++  #define CR0_AM                                  0x40000
++  #define CR0_NW                                  0x20000000
++  #define CR0_CD                                  0x40000000
++  #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! ***********************************************/
++  
++  #ifdef __ASM__
++  
++  //
++  // PCR Access
++  //
++  #define PCR                                     gs:
++  
++  //
++  // EFLAGS
++  //
++  #define EFLAGS_TF                               0x100
++  #define EFLAGS_INTERRUPT_MASK                   0x200
++  #define EFLAGS_NESTED_TASK                      0x4000
++  #define EFLAGS_V86_MASK                         0x20000
++  #define EFLAGS_ALIGN_CHECK                      0x40000
++  #define EFLAGS_VIF                              0x80000
++  #define EFLAGS_VIP                              0x100000
++  #define EFLAG_SIGN                              0x8000
++  #define EFLAG_ZERO                              0x4000
++  #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
++  //
++  #define PASSIVE_LEVEL                              0
++  #define LOW_LEVEL                                  0
++  #define APC_LEVEL                                  1
++  #define DISPATCH_LEVEL                             2
++  #define CLOCK_LEVEL                               13
++  #define IPI_LEVEL                                 14
++  #define POWER_LEVEL                               14
++  #define PROFILE_LEVEL                             15
++  #define HIGH_LEVEL                                15
++  
++  //
++  // Quantum Decrements
++  //
++  #define CLOCK_QUANTUM_DECREMENT                 0x3
++  
++  //
++  // Machine types
++  //
++  #define MACHINE_TYPE_ISA                        0x0000
++  #define MACHINE_TYPE_EISA                       0x0001
++  #define MACHINE_TYPE_MCA                        0x0002
++  
++  //
++  // Kernel Feature Bits
++  //
++  #define KF_RDTSC                                0x00000002
++  
++  //
++  // Kernel Stack Size
++  //
++  #define KERNEL_STACK_SIZE                       0x6000
++  
++  #endif // __ASM__
++  
++  #endif // !_ASM_AMD64_H
++  
index 0000000,0000000,0000000,9d7a180..1aab23a
mode 000000,000000,000000,100644..100644
--- /dev/null
--- /dev/null
--- /dev/null
@@@@@ -1,0 -1,0 -1,0 -1,81 +1,81 @@@@@
   -.macro UNIMPLEMENTED2 line, func
+++ /*
+++  * COPYRIGHT:       See COPYING in the top level directory
+++  * PROJECT:         ReactOS Kernel
+++  * FILE:            ntoskrnl/include/amd64/asmmacro.S
+++  * PURPOSE:         Macros for x64 assembly
+++  * PROGRAMMERS:     Timo Kreuzer (timo.kreuzer@reactos.org)
+++  */
+++ 
+++ .intel_syntax noprefix
+++ .code64
+++ 
+++ /* Macros for x64 stack unwind OPs */
+++ 
+++ .macro .proc name
+++     .func name
+++     .global _\name
+++     _\name:
+++     .cfi_startproc
+++     .equ cfa_current_offset, -8
+++ .endm
+++ 
+++ .macro .endproc
+++     .cfi_endproc
+++     .endfunc
+++ .endm
+++ 
+++ .macro .allocstack size
+++     .cfi_adjust_cfa_offset \size
+++     .set cfa_current_offset, cfa_current_offset - \size
+++ .endm
+++ 
+++ .macro .pushframe code
+++     .if (\code == 0)
+++         .cfi_adjust_cfa_offset 0x28
+++         .set cfa_current_offset, cfa_current_offset - 0x28
+++     .else
+++         .cfi_adjust_cfa_offset 0x30
+++         .set cfa_current_offset, cfa_current_offset - 0x30
+++     .endif
+++ .endm
+++ 
+++ .macro .pushreg reg
+++     .cfi_adjust_cfa_offset 8
+++     .equ cfa_current_offset, cfa_current_offset - 8
+++     .cfi_offset \reg, cfa_current_offset
+++ .endm
+++ 
+++ .macro .savereg reg, offset
+++     // checkme!!!
+++     .cfi_offset \reg, \offset
+++ .endm
+++ 
+++ .macro .savexmm128 reg, offset
+++     // checkme!!!
+++     .cfi_offset \reg, \offset
+++ .endm
+++ 
+++ .macro .setframe reg, offset
+++     .cfi_def_cfa reg, \offset
+++     .equ cfa_current_offset, \offset
+++ .endm
+++ 
+++ .macro .endprolog
+++ .endm
+++ 
   -2:  .asciz __FILE__
++++.macro UNIMPLEMENTED2 file, line, func
+++     jmp 3f
+++     .equ expr, 12
+++ 1:  .asciz "\func"
   -#define UNIMPLEMENTED UNIMPLEMENTED2 __LINE__,
++++2:  .asciz "\file"
+++ 3:
+++     sub rsp, 0x20
+++     lea rcx, _MsgUnimplemented[rip]
+++     lea rdx, 1b[rip]
+++     lea r8, 2b[rip]
+++     mov r9, \line
+++     call _DbgPrint
+++     add rsp, 0x20
+++ .endm
++++#define UNIMPLEMENTED UNIMPLEMENTED2 __FILE__, __LINE__,
+++ 
index 0000000,414ef1d,5135a31,32df59f..733996f
mode 000000,100644,100644,100644..100644
--- /dev/null
@@@@@ -1,0 -1,725 -1,801 -1,800 +1,823 @@@@@
 -      ketypes.h (X86)
+   /*++ NDK Version: 0098
+   
+   Copyright (c) Alex Ionescu.  All rights reserved.
++  Copyright (c) Timo Kreuzer.  All rights reserved.
+   
+   Header Name:
+   
 -      i386 Type definitions for the Kernel services.
++      ketypes.h (AMD64)
+   
+   Abstract:
+   
 -  #ifndef _I386_KETYPES_H
 -  #define _I386_KETYPES_H
++      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
+   
+   --*/
+   
 -  #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
++  #ifndef _AMD64_KETYPES_H
++  #define _AMD64_KETYPES_H
+   
+   //
+   // Dependencies
+   //
+   
+   //
+   // KPCR Access for non-IA64 builds
+   //
  - #define PCR ((volatile KPCR * const)__readgsqword(KPCR_SELF))
++  //#define K0IPCR                  ((ULONG_PTR)(KIP0PCRADDRESS))
++  //#define PCR                     ((volatile KPCR * const)K0IPCR)
 -  #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 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
+   //
+   #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 KSEG0_BASE              0x80000000
++  #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
+   //
+   #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_NESTED_TASK      0x4000L
+   #define EFLAGS_V86_MASK         0x20000
+   #define EFLAGS_ALIGN_CHECK      0x40000
+   #define EFLAGS_VIF              0x80000
+   #define EFLAGS_VIP              0x100000
+   #define EFLAGS_USER_SANITIZE    0x3F4DD7
+   #define EFLAG_SIGN              0x8000
+   #define EFLAG_ZERO              0x4000
+   
+   //
+   // 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     0x64
+   
+   //
+   // IOPM Definitions
+   //
+   #define IO_ACCESS_MAP_NONE      0
+   #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))
+   
+   //
+   // Static Kernel-Mode Address start (use MM_KSEG0_BASE for actual)
+   //
 -  #define SYNCH_LEVEL             (IPI_LEVEL - 1)
++  #define KSEG0_BASE 0xfffff80000000000ULL
+   
+   //
+   // Synchronization-level IRQL
+   //
+   #ifndef CONFIG_SMP
+   #define SYNCH_LEVEL             DISPATCH_LEVEL
+   #else
 -      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;
++  #define SYNCH_LEVEL             (IPI_LEVEL - 2)
+   #endif
+   
+   //
+   // Trap Frame Definition
+   //
+   typedef struct _KTRAP_FRAME
+   {
  --    UINT64 GsBase;
  --    UINT64 GsSwap;
++      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;
  --    UINT64 FaultAddress;
  --    UINT64 ContextRecord;
  --    UINT64 TimeStampCKCL;
++++    union
++++    {
++++        UINT64 GsBase;
++++        UINT64 GsSwap;
++++    };
++      M128A Xmm0;
++      M128A Xmm1;
++      M128A Xmm2;
++      M128A Xmm3;
++      M128A Xmm4;
++      M128A Xmm5;
  --    UINT64 DebugControl;
  --    UINT64 LastBranchToRip;
  --    UINT64 LastBranchFromRip;
  --    UINT64 LastExceptionToRip;
  --    UINT64 LastExceptionFromRip;
  --    UINT64 LastBranchControl;
  --    ULONG LastBranchMSR;
++++    union
++++    {
++++        UINT64 FaultAddress;
++++        UINT64 ContextRecord;
++++        UINT64 TimeStampCKCL;
++++    };
++      UINT64 Dr0;
++      UINT64 Dr1;
++      UINT64 Dr2;
++      UINT64 Dr3;
++      UINT64 Dr6;
++      UINT64 Dr7;
 -              UCHAR BaseMid;
 -              UCHAR Flags1;
 -              UCHAR Flags2;
 -              UCHAR BaseHi;
 -          } Bytes;
+ ++    union
+ ++    {
+ ++        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 DebugControl;
++++            UINT64 LastBranchToRip;
++++            UINT64 LastBranchFromRip;
++++            UINT64 LastExceptionToRip;
++++            UINT64 LastExceptionFromRip;
++++        };
+ ++        struct
+ ++        {
  --    UINT64 ErrorCode;
  --    UINT64 ExceptionFrame;
  --    UINT64 TimeStampKlog;
++++            UINT64 LastBranchControl;
++++            ULONG LastBranchMSR;
++++        };
++++    };
++      USHORT SegDs;
++      USHORT SegEs;
++      USHORT SegFs;
++      USHORT SegGs;
++      UINT64 TrapFrame;
++      UINT64 Rbx;
++      UINT64 Rdi;
++      UINT64 Rsi;
++      UINT64 Rbp;
 -  typedef struct _KGDTENTRY
++++    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
+   //
 -      USHORT LimitLow;
 -      USHORT BaseLow;
 -      union
++  typedef union _KGDTENTRY64
+   {
 -          struct
++      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;
++          USHORT LimitLow;
++          USHORT BaseLow;
++          union
+           {
 -  typedef struct _KIDTENTRY
++              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
+   //
+   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
+   //
 -      USHORT Offset;
 -      USHORT Selector;
 -      USHORT Access;
 -      USHORT ExtendedOffset;
 -  } KIDTENTRY, *PKIDTENTRY;
++  typedef union _KIDTENTRY64
+   {
 -  typedef struct _DESCRIPTOR
++      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
+   
 -      USHORT Pad;
++  typedef struct _KDESCRIPTOR
+   {
 -      ULONG Base;
++      USHORT Pad[3];
+       USHORT Limit;
 -  //
 -  // 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;
++      PVOID Base;
+   } KDESCRIPTOR, *PKDESCRIPTOR;
+   
+   #ifndef NTOS_MODE_USER
 -      ULONG Cr0;
 -      ULONG Cr2;
 -      ULONG Cr3;
 -      ULONG Cr4;
 -      ULONG KernelDr0;
 -      ULONG KernelDr1;
 -      ULONG KernelDr2;
 -      ULONG KernelDr3;
 -      ULONG KernelDr6;
 -      ULONG KernelDr7;
 -      KDESCRIPTOR Gdtr;
 -      KDESCRIPTOR Idtr;
+   
+   //
+   // Special Registers Structure (outside of CONTEXT)
+   //
+   typedef struct _KSPECIAL_REGISTERS
+   {
 -      ULONG Reserved[6];
++      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;
 -      CONTEXT ContextFrame;
++      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;
+   
+   //
+   // Processor State Data
+   //
+   typedef struct _KPROCESSOR_STATE
+   {
 -      USHORT MinorVersion;
 -      USHORT MajorVersion;
+       KSPECIAL_REGISTERS SpecialRegisters;
++      CONTEXT ContextFrame;
+   } 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
+   //
+   #pragma pack(push,4)
+   typedef struct _KPRCB
+   {
 -      UCHAR Number;
 -      UCHAR Reserved;
 -      USHORT BuildType;
 -      KAFFINITY SetMember;
 -      UCHAR CpuType;
 -      UCHAR CpuID;
 -      USHORT CpuStep;
 -      KPROCESSOR_STATE ProcessorState;
 -      ULONG KernelReserved[16];
 -      ULONG HalReserved[16];
++      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;
 -      ULONG CFlushSize;
 -      UCHAR PrcbPad0[88];
+   #if (NTDDI_VERSION >= NTDDI_LONGHORN)
 -      UCHAR PrcbPad0[92];
++      UCHAR NestingLevel;
++      UCHAR Group;
++      UCHAR PrcbPad00[6];
+   #else
 -      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;
++      UINT64 UserRsp;
+   #endif
 -      UCHAR PollSlot;
++      UINT64 RspBase;
++      UINT64 PrcbLock;
++      UINT64 SetMember;
++      KPROCESSOR_STATE ProcessorState;
++      CHAR CpuType;
++      CHAR CpuID;
+   #if (NTDDI_VERSION >= NTDDI_LONGHORN)
 -      UCHAR Spare1;
++      union
++      {
++          USHORT CpuStep;
++          struct
++          {
++              UCHAR CpuStepping;
++              UCHAR CpuModel;
++          };
++      };
+   #else
 -      ULONG NodeShiftedColor;
++      USHORT CpuStep;
+   #endif
 -      UCHAR Spare1[6];
++      ULONG MHz;
++      UINT64 HalReserved[8];
++      USHORT MinorVersion;
++      USHORT MajorVersion;
++      UCHAR BuildType;
++      UCHAR CpuVendor;
++  #if (NTDDI_VERSION >= NTDDI_LONGHORN)
++      UCHAR CoresPerPhysicalProcessor;
++      UCHAR LogicalProcessorsPerCore;
+   #else
 -      struct _KNODE *ParentNode;
 -      ULONG MultiThreadProcessorSet;
 -      struct _KPRCB *MultiThreadSetMaster;
 -  #if (NTDDI_VERSION >= NTDDI_WS03)
 -      ULONG SecondaryColorMask;
++      UCHAR InitialApicId;
++      UCHAR LogicalProcessorsPerPhysicalProcessor;
+   #endif
 -      ULONG DpcTimeLimit;
++      ULONG ApicMask;
+   #if (NTDDI_VERSION >= NTDDI_LONGHORN)
 -      LONG Sleeping;
++      ULONG CFlushSize;
+   #else
 -      ULONG ThreadStartCount[2];
++      UCHAR CFlushSize;
++      UCHAR PrcbPad0x[3];
+   #endif
++      PVOID AcpiReserved;
++  #if (NTDDI_VERSION >= NTDDI_LONGHORN)
++      ULONG InitialApicId;
++      ULONG Stride;
++      UINT64 PrcbPad01[3];
+   #else
 -  #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;
++      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;
 -      volatile ULONG IoReadOperationCount;
 -      volatile ULONG IoWriteOperationCount;
 -      volatile ULONG IoOtherOperationCount;
++      LONG LookasideIrpFloat;
++  #else
++      LONG LookasideIrpFloat;
+       ULONG KeSystemCalls;
+   #endif
 -      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];
++      LONG IoReadOperationCount;
++      LONG IoWriteOperationCount;
++      LONG IoOtherOperationCount;
+       LARGE_INTEGER IoReadTransferCount;
+       LARGE_INTEGER IoWriteTransferCount;
+       LARGE_INTEGER IoOtherTransferCount;
++  #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)
 -      ULONG SpareCounter1[8];
++      PVOID SparePtr0;
+   #else
 -      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;
++      PVOID SavedRsp;
+   #endif
 -      volatile UCHAR DpcInterruptRequested;
 -      volatile UCHAR DpcThreadRequested;
 -      volatile UCHAR DpcRoutineActive;
 -      volatile UCHAR DpcThreadActive;
 -      ULONG PrcbLock;
++      LONG MaximumDpcQueueDepth;
+       ULONG DpcRequestRate;
+       ULONG MinimumDpcRate;
 -      volatile ULONG TimerHand;
 -      volatile ULONG TimerRequest;
 -      PVOID DpcThread;
 -      KEVENT DpcEvent;
++      UCHAR DpcInterruptRequested;
++      UCHAR DpcThreadRequested;
++      UCHAR DpcRoutineActive;
++      UCHAR DpcThreadActive;
++      UINT64 TimerHand;
++      UINT64 TimerRequest;
++      LONG TickOffset;
++      LONG MasterOffset;
+       ULONG DpcLastCount;
 -      volatile BOOLEAN QuantumEnd;
+       UCHAR ThreadDpcEnable;
 -      volatile UCHAR IdleSchedule;
++      UCHAR QuantumEnd;
+       UCHAR PrcbPad50;
 -      LONG Sleeping;
 -      ULONG PeriodicCount;
 -      ULONG PeriodicBias;
 -      UCHAR PrcbPad5[6];
++      UCHAR IdleSchedule;
+       LONG DpcSetEventRequest;
+   #if (NTDDI_VERSION >= NTDDI_LONGHORN)
 -      UCHAR PrcbPad5[18];
++      ULONG KeExceptionDispatchCount;
+   #else
 -      LONG TickOffset;
++      LONG PrcbPad40;
++      PVOID DpcThread;
++  #endif
++      KEVENT DpcEvent;
++  #if (NTDDI_VERSION >= NTDDI_LONGHORN)
++      PVOID PrcbPad51;
+   #endif
 -      LONG DpcWatchDogCount;
 -      LONG ThreadWatchdogPeriod;
 -      LONG ThreadWatchDogCount;
 -      ULONG PrcbPad70[2];
+       KDPC CallDpc;
+   #if (NTDDI_VERSION >= NTDDI_LONGHORN)
+       LONG ClockKeepAlive;
+       UCHAR ClockCheckSlot;
+       UCHAR ClockPollCycle;
+       UCHAR PrcbPad6[2];
+       LONG DpcWatchdogPeriod;
 -      ULONG PrcbPad7[8];
++      LONG DpcWatchdogCount;
++      UINT64 PrcbPad70[2];
+   #else
 -      SINGLE_LIST_ENTRY DeferredReadyListHead;
 -      ULONGLONG StartCycles;
 -      ULONGLONG CycleTime;
 -      ULONGLONG PrcbPad71[3];
++      UINT64 PrcbPad7[4];
+   #endif
+       LIST_ENTRY WaitListHead;
++  #if (NTDDI_VERSION >= NTDDI_LONGHORN)
++      UINT64 WaitLock;
++  #endif
+       ULONG ReadySummary;
+       ULONG QueueIndex;
+   #if (NTDDI_VERSION >= NTDDI_LONGHORN)
 -      LIST_ENTRY DispatcherReadyListHead[32];
 -      SINGLE_LIST_ENTRY DeferredReadyListHead;
 -      ULONG PrcbPad72[11];
++      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
 -      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;
++      UCHAR PrcbPad8[13];
+   #endif
 -      ULONG CachedCommit;
 -      ULONG CachedResidentAvailable;
 -      PVOID HyperPte;
 -      UCHAR CpuVendor;
 -      UCHAR PrcbPad9[3];
 -  #else
 -      ULONG SpareFields0[1];
++      struct _KNODE *ParentNode;
++      UINT64 MultiThreadProcessorSet;
++      struct _KPRCB *MultiThreadSetMaster;
+   #if (NTDDI_VERSION >= NTDDI_LONGHORN)
 -      CHAR VendorString[13];
 -      UCHAR InitialApicId;
 -      UCHAR LogicalProcessorsPerPhysicalProcessor;
 -      ULONG MHz;
++      UINT64 StartCycles;
++      LONG MmSpinLockOrdering;
++      ULONG PageColor;
++      ULONG NodeColor;
++      ULONG NodeShiftedColor;
++      ULONG SecondaryColorMask;
+   #endif
 -      volatile LARGE_INTEGER IsrTime;
 -      LARGE_INTEGER SpareField1;
 -      FX_SAVE_AREA NpxSaveArea;
 -      PROCESSOR_POWER_STATE PowerState;
 -  #if (NTDDI_VERSION >= NTDDI_LONGHORN)
 -      KDPC DpcWatchdogDoc;
++      LONG Sleeping;
++  #if (NTDDI_VERSION >= NTDDI_LONGHORN)
++      UINT64 CycleTime;
++      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;
++      LONG MmCacheTransitionCount;
++      LONG MmCacheReadCount;
++      LONG MmCacheIoCount;
++      ULONG PrcbPad91[3];
++      PROCESSOR_POWER_STATE PowerState;
++      ULONG KeAlignmentFixupCount;
++      UCHAR VendorString[13];
++      UCHAR PrcbPad10[3];
+       ULONG FeatureBits;
+       LARGE_INTEGER UpdateSignature;
 -      LARGE_INTEGER HyperCallPagePhysical;
 -      LARGE_INTEGER HyperCallPageVirtual;
++      KDPC DpcWatchdogDpc;
+       KTIMER DpcWatchdogTimer;
++      CACHE_DESCRIPTOR Cache[5];
++      ULONG CacheCount;
++      ULONG CachedCommit;
++      ULONG CachedResidentAvailable;
++      PVOID HyperPte;
+       PVOID WheaInfo;
+       PVOID EtwSupport;
+       SLIST_HEADER InterruptObjectPool;
 -      ULONG CacheProcessorMask[5];
 -      UCHAR LogicalProcessorsPerCore;
 -      UCHAR PrcbPad8[3];
 -      ULONG PackageProcessorSet;
 -      ULONG CoreProcessorSet;
++      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;
 -  } KPRCB, *PKPRCB;
+   #endif
 -              struct _EXCEPTION_REGISTRATION_RECORD *Used_ExceptionList;
 -              PVOID Used_StackBase;
 -              PVOID PerfGlobalGroupMask;
 -              PVOID TssCopy;
 -              ULONG ContextSwitches;
 -              KAFFINITY SetMemberCopy;
++  }
++   KPRCB, *PKPRCB;
+   
+   //
+   // Processor Control Region
+   //
+   typedef struct _KIPCR
+   {
+       union
+       {
+           NT_TIB NtTib;
+           struct
+           {
 -      struct _KPCR *Self;
 -      struct _KPRCB *Prcb;
++              union _KGDTENTRY64 *GdtBase;
++              struct _KTSS64 *TssBase;
++              ULONG64 UserRsp;
++              struct _KPCR *Self;
++              struct _KPRCB *CurrentPrcb;
++              PKSPIN_LOCK_QUEUE LockArray;
+               PVOID Used_Self;
+           };
+       };
 -      ULONG IRR;
 -      ULONG IrrActive;
 -      ULONG IDR;
 -      PVOID KdVersionBlock;
 -      PKIDTENTRY IDT;
 -      PKGDTENTRY GDT;
 -      struct _KTSS *TSS;
++      union _KIDTENTRY64 *IdtBase;
++      ULONG64 Unused[2];
+       KIRQL Irql;
 -      KAFFINITY SetMember;
++      UCHAR SecondLevelCacheAssociativity;
++      UCHAR ObsoleteNumber;
++      UCHAR Fill0;
++      ULONG Unused0[3];
+       USHORT MajorVersion;
+       USHORT MinorVersion;
 -      UCHAR SparedUnused;
 -      UCHAR Number;
 -      UCHAR Reserved;
 -      UCHAR L2CacheAssociativity;
 -      ULONG VdmAlert;
 -      ULONG KernelReserved[14];
+       ULONG StallScaleFactor;
 -      ULONG InterruptMode;
 -      UCHAR Spare1;
 -      ULONG KernelReserved2[17];
 -      KPRCB PrcbData;
++      PVOID Unused1[3];
++      ULONG KernelReserved[15];
+       ULONG SecondLevelCacheSize;
+       ULONG HalReserved[16];
 -  typedef struct _KTSS
++      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)
+   
+   //
+   // TSS Definition
+   //
+   typedef struct _KiIoAccessMap
+   {
+       UCHAR DirectionMap[32];
+       UCHAR IoMap[8196];
+   } KIIO_ACCESS_MAP;
+   
 -      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;
++  
++  //
++  // Inline function to get current KPRCB
++  //
++  FORCEINLINE
++  struct _KPRCB *
++  KeGetCurrentPrcb(VOID)
++  {
++      return (struct _KPRCB *)__readgsqword(FIELD_OFFSET(KIPCR, CurrentPrcb));
++  }
++  
+   #endif
+   #endif
index 0000000,88f8c51,3f8a66a,3f8a66a..a920078
mode 000000,100644,100644,100644..100644
--- /dev/null
@@@@@ -1,0 -1,169 -1,215 -1,215 +1,198 @@@@@
 -      mmtypes.h (X86)
+   /*++ NDK Version: 0095
+   
+   Copyright (c) Alex Ionescu.  All rights reserved.
++  Copyright (c) Timo Kreuzer  All rights reserved.
+   
+   Header Name:
+   
 -      i386 Type definitions for the Memory Manager
++      mmtypes.h (AMD64)
+   
+   Abstract:
+   
 -  //
 -  // PAE SEG0 Base?
 -  //
 -  #define KSEG0_BASE_PAE                    0xE0000000
 -  
++      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
+   
+   --*/
+   
+   #ifndef _AMD64_MMTYPES_H
+   #define _AMD64_MMTYPES_H
+   
+   //
+   // Dependencies
+   //
+   
+   //
+   // Page-related Macros
+   //
+   #define PAGE_SIZE                         0x1000
+   #define PAGE_SHIFT                        12L
+   #define MM_ALLOCATION_GRANULARITY         0x10000
+   #define MM_ALLOCATION_GRANULARITY_SHIFT   16L
+   
+   //
+   // Sanity checks for Paging Macros
+   //
+   #ifdef C_ASSERT
+   C_ASSERT(PAGE_SIZE == (1 << PAGE_SHIFT));
+   C_ASSERT(MM_ALLOCATION_GRANULARITY == (1 << MM_ALLOCATION_GRANULARITY_SHIFT));
+   C_ASSERT(MM_ALLOCATION_GRANULARITY &&
+            !(MM_ALLOCATION_GRANULARITY & (MM_ALLOCATION_GRANULARITY - 1)));
+   C_ASSERT(MM_ALLOCATION_GRANULARITY >= PAGE_SIZE);
+   #endif
+   
 -  typedef struct _HARDWARE_PTE_X86
+   //
+   // Page Table Entry Definitions
+   //
 -      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;
++  typedef struct _HARDWARE_PTE
+   {
 -      ULONG Valid:1;
 -      ULONG PageFileLow:4;
 -      ULONG Protection:5;
 -      ULONG Prototype:1;
 -      ULONG Transition:1;
 -      ULONG PageFileHigh:20;
 -  } MMPTE_SOFTWARE;
++++    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 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 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 ProtoAddressLow:7;
 -      ULONG ReadOnly:1;
 -      ULONG WhichPool:1;
 -      ULONG Prototype:1;
 -      ULONG ProtoAddressHigh:21;
++      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 SubsectionAddressLow:4;
 -      ULONG Protection:5;
 -      ULONG Prototype:1;
 -      ULONG SubsectionAddressHigh:20;
 -      ULONG WhichPool:1;
++      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 OneEntry:1;
 -      ULONG filler0:8;
 -      ULONG NextEntry:20;
 -      ULONG Prototype:1;
 -      ULONG filler1: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
+   {
 ---#ifndef CONFIG_SMP
  --
  --typedef struct _MMPTE_HARDWARE
  --{
  --    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;
  --} MMPTE_HARDWARE, *PMMPTE_HARDWARE;
  --
  --#else
 ---
++      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;
+   
 -      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;
 -  } MMPTE_HARDWARE, *PMMPTE_HARDWARE;
 -  
+   typedef struct _MMPTE_HARDWARE
+   {
 -  
 -  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;
++      ULONG64 Valid:1;
++  #if (NTDDI_VERSION >= NTDDI_LONGHORN)
++      ULONG64 Dirty1:1;
+   #else
  --    ULONG64 Write:1;
++++#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;
  --#endif
  --
++  #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;
+   
 -  //
 -  // Use the right PTE structure
 -  //
 -  #define HARDWARE_PTE        HARDWARE_PTE_X86
 -  #define PHARDWARE_PTE       PHARDWARE_PTE_X86
++  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;
+   
 -  #endif
+   
++  #endif // !AMD64_MMTYPES_H
Simple merge
Simple merge