+//\r
+// API return address +0xB0\r
+// push API Parameter2 +0xA8\r
+// push API Parameter1 +0xA0\r
+// push FspInfoHeader +0x98\r
+// pushfq +0x90\r
+// cli\r
+// PUSHA_64 +0x10\r
+// sub rsp, 16 +0x00\r
+// sidt [rsp]\r
+//\r
+typedef struct {\r
+ UINT64 Idtr[2]; // IDTR Limit - bit0:bi15, IDTR Base - bit16:bit79\r
+ UINT64 Registers[16]; // General Purpose Registers: RDI, RSI, RBP, RSP, RBX, RDX, RCX, RAX, and R15 to R8\r
+ UINT32 Flags[2];\r
+ UINT64 FspInfoHeader;\r
+ UINT64 ApiParam[2];\r
+ UINT64 ApiRet; // 64bit stack format is different from the 32bit one due to x64 calling convention\r
+} CONTEXT_STACK_64;\r
+\r
+#define CONTEXT_STACK_OFFSET(x) (sizeof(UINTN) == sizeof (UINT32) ? (UINTN)&((CONTEXT_STACK *)(UINTN)0)->x : (UINTN)&((CONTEXT_STACK_64 *)(UINTN)0)->x)\r