Derek Lesho : ntoskrnl.exe: Update the tick count in KUSER_SHARED_DATA when accessed.
Module: wine Branch: master Commit: c988910caeebfd1415ad4d036964a67078493e46 URL: https://source.winehq.org/git/wine.git/?a=commit;h=c988910caeebfd1415ad4d036... Author: Derek Lesho <dereklesho52(a)gmail.com> Date: Thu Mar 21 00:23:09 2019 -0400 ntoskrnl.exe: Update the tick count in KUSER_SHARED_DATA when accessed. EasyAntiCheat.sys constantly reads this value, so I think keeping it up-to-date is a good idea. Signed-off-by: Derek Lesho <dereklesho52(a)Gmail.com> Signed-off-by: Alexandre Julliard <julliard(a)winehq.org> --- dlls/ntoskrnl.exe/instr.c | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/dlls/ntoskrnl.exe/instr.c b/dlls/ntoskrnl.exe/instr.c index 90a63b0..d5d197d 100644 --- a/dlls/ntoskrnl.exe/instr.c +++ b/dlls/ntoskrnl.exe/instr.c @@ -26,6 +26,7 @@ #include <stdarg.h> +#define NONAMELESSUNION #include "windef.h" #include "winbase.h" #include "winternl.h" @@ -594,6 +595,15 @@ static void fake_syscall_function(void) } +static void update_shared_data(void) +{ + struct _KUSER_SHARED_DATA *shared_data = (struct _KUSER_SHARED_DATA *)wine_user_shared_data; + + shared_data->u.TickCountQuad = GetTickCount64(); + shared_data->u.TickCount.High2Time = shared_data->u.TickCount.High1Time; +} + + /*********************************************************************** * emulate_instruction * @@ -794,6 +804,7 @@ static DWORD emulate_instruction( EXCEPTION_RECORD *rec, CONTEXT *context ) if (offset <= sizeof(KSHARED_USER_DATA) - data_size) { ULONGLONG temp = 0; + update_shared_data(); memcpy( &temp, wine_user_shared_data + offset, data_size ); store_reg_word( context, instr[2], (BYTE *)&temp, long_op, rex ); context->Rip += prefixlen + len + 2; @@ -814,6 +825,7 @@ static DWORD emulate_instruction( EXCEPTION_RECORD *rec, CONTEXT *context ) if (offset <= sizeof(KSHARED_USER_DATA) - data_size) { + update_shared_data(); switch (*instr) { case 0x8a: store_reg_byte( context, instr[1], wine_user_shared_data + offset, rex ); break; @@ -835,6 +847,7 @@ static DWORD emulate_instruction( EXCEPTION_RECORD *rec, CONTEXT *context ) if (offset <= sizeof(KSHARED_USER_DATA) - data_size) { + update_shared_data(); memcpy( &context->Rax, wine_user_shared_data + offset, data_size ); context->Rip += prefixlen + len + 1; return ExceptionContinueExecution;
participants (1)
-
Alexandre Julliard