#define KGDT64_SYS_TSS 0x0040
#define KGDT64_R3_CMTEB 0x0050
+
//
// CR4
//
//
// EFlags
//
-#define EFLAGS_CF 0x01
-#define EFLAGS_PF 0x04
-#define EFLAGS_AF 0x10
-#define EFLAGS_ZF 0x40
-#define EFLAGS_SF 0x80
-#define EFLAGS_TF 0x100
-#define EFLAGS_INTERRUPT_MASK 0x200
-#define EFLAGS_DF 0x400
-#define EFLAGS_OF 0x800
-#define EFLAGS_IOPL_MASK 0x3000
-#define EFLAGS_NESTED_TASK 0x4000
-#define EFLAGS_RF 0x10000
-#define EFLAGS_VM 0x20000
+#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_ID 0x200000
#define EFLAGS_USER_SANITIZE 0x3F4DD7
+#define EFLAG_SIGN 0x8000
+#define EFLAG_ZERO 0x4000
//
// IPI Types
//
// Dummy LDT_ENTRY
//
-#ifndef _LDT_ENTRY_DEFINED
-#define _LDT_ENTRY_DEFINED
typedef ULONG LDT_ENTRY;
-#endif
//
// GDT Entry Definition
#define PKTSS PKTSS64
//
-// KEXCEPTION_FRAME
+// i386 CPUs don't have exception frames
//
-typedef struct _KEXCEPTION_FRAME
-{
- UINT64 P1Home;
- UINT64 P2Home;
- UINT64 P3Home;
- UINT64 P4Home;
- UINT64 P5;
- UINT64 InitialStack;
- M128A Xmm6;
- M128A Xmm7;
- M128A Xmm8;
- M128A Xmm9;
- M128A Xmm10;
- M128A Xmm11;
- M128A Xmm12;
- M128A Xmm13;
- M128A Xmm14;
- M128A Xmm15;
- UINT64 TrapFrame;
- UINT64 CallbackStack;
- UINT64 OutputBuffer;
- UINT64 OutputLength;
- UINT64 MxCsr;
- UINT64 Rbp;
- UINT64 Rbx;
- UINT64 Rdi;
- UINT64 Rsi;
- UINT64 R12;
- UINT64 R13;
- UINT64 R14;
- UINT64 R15;
- UINT64 Return;
-} KEXCEPTION_FRAME, *PKEXCEPTION_FRAME;
+typedef struct _KEXCEPTION_FRAME KEXCEPTION_FRAME, *PKEXCEPTION_FRAME;
//
// Inline function to get current KPRCB