#ifdef _M_IX86\r
#define KUSER_SHARED_SYSCALL HEX(7ffe0300)\r
#define KGDT_R0_CODE 8\r
-MACRO(STUBCODE_U, SyscallId, StackBytes)\r
+MACRO(STUBCODE_U, Name, SyscallId, ArgCount)\r
+ StackBytes = 4 * ArgCount\r
FPO 0, 0, 0, 0, 0, FRAME_FPO\r
mov eax, SyscallId\r
mov ecx, KUSER_SHARED_SYSCALL\r
call dword ptr [ecx]\r
ret StackBytes\r
ENDM\r
-MACRO(STUBCODE_K, SyscallId, StackBytes)\r
+MACRO(STUBCODE_K, Name, SyscallId, ArgCount)\r
+ StackBytes = 4 * &ArgCount\r
FPO 0, 0, 0, 0, 0, FRAME_FPO\r
mov eax, SyscallId\r
lea edx, [esp + 4]\r
ret StackBytes\r
ENDM\r
#elif defined(_M_AMD64)\r
-MACRO(STUBCODE_U, SyscallId, StackBytes)\r
+MACRO(STUBCODE_U, Name, SyscallId, ArgCount)\r
.ENDPROLOG\r
mov eax, SyscallId\r
mov r10, rcx\r
syscall\r
- ret StackBytes\r
+ ret\r
ENDM\r
-MACRO(STUBCODE_K, SyscallId, StackBytes)\r
+MACRO(STUBCODE_K, Name, SyscallId, ArgCount)\r
.ENDPROLOG\r
- mov eax, SyscallId\r
- call KiSystemService\r
- ret StackBytes\r
+ EXTERN Nt&Name:PROC\r
+ lea rax, Nt&Name[rip]\r
+ mov r10, ArgCount * 8\r
+ jmp KiZwSystemService\r
ENDM\r
#elif defined(_M_ARM)\r
-MACRO(STUBCODE_U, SyscallId, StackBytes)\r
+MACRO(STUBCODE_U, Name, SyscallId, ArgCount)\r
swi #SyscallId\r
bx lr\r
ENDM\r
-MACRO(STUBCODE_K, SyscallId, StackBytes)\r
+MACRO(STUBCODE_K, Name, SyscallId, ArgCount)\r
mov ip, lr\r
swi #SyscallId\r
bx ip\r
ENDM\r
#elif defined(_M_PPC)\r
-MACRO(STUBCODE_U, SyscallId, StackBytes)\r
+MACRO(STUBCODE_U, Name, SyscallId, ArgCount)\r
stwu 1,-16(1)\r
mflr 0\r
stw 0,0(1)\r
ENDM\r
#define STUBCODE_K STUBCODE_U\r
#elif defined(_M_MIPS)\r
-MACRO(STUBCODE_U, SyscallId, StackBytes)\r
+MACRO(STUBCODE_U, Name, SyscallId, ArgCount)\r
li $8, KUSER_SHARED_SYSCALL\r
lw $8,0($8)\r
j $8\r
nop\r
ENDM\r
-MACRO(STUBCODE_K, SyscallId, StackBytes)\r
+MACRO(STUBCODE_K, Name, SyscallId, ArgCount)\r
j KiSystemService\r
nop\r
ENDM\r
#endif\r
\r
#ifdef _M_IX86\r
-MACRO(MAKE_LABEL, Name, Stackbytes)\r
- PUBLIC _&Name&@&Stackbytes\r
- _&Name&@&Stackbytes:\r
+MACRO(MAKE_LABEL, Name, StackBytes)\r
+ PUBLIC _&Name&@&StackBytes\r
+ _&Name&@&StackBytes:\r
ENDM\r
-MACRO(START_PROC, Name, Stackbytes)\r
- PUBLIC _&Name&@&Stackbytes\r
- .PROC _&Name&@&Stackbytes\r
+MACRO(START_PROC, Name, StackBytes)\r
+ PUBLIC _&Name&@&StackBytes\r
+ .PROC _&Name&@&StackBytes\r
ENDM\r
#else\r
-MACRO(MAKE_LABEL, Name, Stackbytes)\r
+MACRO(MAKE_LABEL, Name, StackBytes)\r
PUBLIC &Name\r
&Name:\r
ENDM\r
-MACRO(START_PROC, Name, Stackbytes)\r
+MACRO(START_PROC, Name, StackBytes)\r
PUBLIC &Name\r
.PROC &Name\r
ENDM\r
#endif\r
\r
MACRO(STUB_U, Name, ArgCount)\r
- Stackbytes = 4 * &ArgCount\r
- MAKE_LABEL Zw&Name, %Stackbytes\r
- START_PROC Nt&Name, %Stackbytes\r
- STUBCODE_U SyscallId, %Stackbytes\r
+ MAKE_LABEL Zw&Name, %ArgCount * 4\r
+ START_PROC Nt&Name, %ArgCount * 4\r
+ STUBCODE_U Name, SyscallId, %ArgCount\r
.ENDP\r
SyscallId = SyscallId + 1\r
ENDM\r
\r
MACRO(STUB_K, Name, ArgCount)\r
- Stackbytes = 4 * &ArgCount\r
- START_PROC Zw&Name, %Stackbytes\r
- STUBCODE_K SyscallId, %Stackbytes\r
+ START_PROC Zw&Name, %ArgCount * 4\r
+ STUBCODE_K Name, SyscallId, %ArgCount\r
.ENDP\r
SyscallId = SyscallId + 1\r
ENDM\r