//
#define RPL_MASK 0x0003
#define MODE_MASK 0x0001
-#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
+#define KGDT64_NULL 0x0000
+#define KGDT64_R0_CODE 0x0010
+#define KGDT64_R0_DATA 0x0018
+#define KGDT64_R3_CMCODE 0x0020
+#define KGDT64_R3_DATA 0x0028
+#define KGDT64_R3_CODE 0x0030
+#define KGDT64_SYS_TSS 0x0040
+#define KGDT64_R3_CMTEB 0x0050
//
//
// HAL Variables
//
-#define INITIAL_STALL_COUNT 0x64
+#define INITIAL_STALL_COUNT 100
//
// IOPM Definitions
UINT64 R9;
UINT64 R10;
UINT64 R11;
- UINT64 GsBase;
- UINT64 GsSwap;
+ union
+ {
+ UINT64 GsBase;
+ UINT64 GsSwap;
+ };
M128A Xmm0;
M128A Xmm1;
M128A Xmm2;
M128A Xmm3;
M128A Xmm4;
M128A Xmm5;
- UINT64 FaultAddress;
- UINT64 ContextRecord;
- UINT64 TimeStampCKCL;
+ union
+ {
+ UINT64 FaultAddress;
+ UINT64 ContextRecord;
+ UINT64 TimeStampCKCL;
+ };
UINT64 Dr0;
UINT64 Dr1;
UINT64 Dr2;
UINT64 Dr3;
UINT64 Dr6;
UINT64 Dr7;
- UINT64 DebugControl;
- UINT64 LastBranchToRip;
- UINT64 LastBranchFromRip;
- UINT64 LastExceptionToRip;
- UINT64 LastExceptionFromRip;
- UINT64 LastBranchControl;
- ULONG LastBranchMSR;
+ union
+ {
+ struct
+ {
+ UINT64 DebugControl;
+ UINT64 LastBranchToRip;
+ UINT64 LastBranchFromRip;
+ UINT64 LastExceptionToRip;
+ UINT64 LastExceptionFromRip;
+ };
+ struct
+ {
+ UINT64 LastBranchControl;
+ ULONG LastBranchMSR;
+ };
+ };
USHORT SegDs;
USHORT SegEs;
USHORT SegFs;
UINT64 Rdi;
UINT64 Rsi;
UINT64 Rbp;
- UINT64 ErrorCode;
- UINT64 ExceptionFrame;
- UINT64 TimeStampKlog;
+ union
+ {
+ UINT64 ErrorCode;
+ UINT64 ExceptionFrame;
+ UINT64 TimeStampKlog;
+ };
UINT64 Rip;
USHORT SegCs;
UCHAR Fill0;
LONG CodePatchCycle;
} KTRAP_FRAME, *PKTRAP_FRAME;
+//
+// Defines the Callback Stack Layout for User Mode Callbacks
+//
+typedef struct _KCALLOUT_FRAME
+{
+ ULONG64 InitialStack;
+ ULONG64 TrapFrame;
+ ULONG64 CallbackStack;
+ ULONG64 Rdi;
+ ULONG64 Rsi;
+ ULONG64 Rbx;
+ ULONG64 Rbp;
+ ULONG64 ReturnAddress;
+ ULONG64 Result;
+ ULONG64 ResultLength;
+} KCALLOUT_FRAME, *PKCALLOUT_FRAME;
+
+//
+// Dummy LDT_ENTRY
+//
+typedef ULONG LDT_ENTRY;
//
// GDT Entry Definition