From 94005de9e9309fc95c4741a92f0c95411bc6c6d1 Mon Sep 17 00:00:00 2001 From: Tau Date: Wed, 21 Aug 2019 12:52:39 -0400 Subject: [PATCH] hooklib/clock.c: Split clock read and write hooks --- chunihook/dllmain.c | 3 ++- divahook/dllmain.c | 2 +- hooklib/clock.c | 23 ++++++++++++++++++----- hooklib/clock.h | 3 ++- idzhook/dllmain.c | 2 +- minihook/dllmain.c | 4 +++- 6 files changed, 27 insertions(+), 10 deletions(-) diff --git a/chunihook/dllmain.c b/chunihook/dllmain.c index 14361ca..8fef87e 100644 --- a/chunihook/dllmain.c +++ b/chunihook/dllmain.c @@ -48,7 +48,8 @@ static DWORD CALLBACK chuni_pre_startup(void) /* Hook Win32 APIs */ - clock_hook_init(); + clock_read_hook_init(); + clock_write_hook_init(); gfx_hook_init(); serial_hook_init(); diff --git a/divahook/dllmain.c b/divahook/dllmain.c index ca73607..a77053a 100644 --- a/divahook/dllmain.c +++ b/divahook/dllmain.c @@ -36,7 +36,7 @@ static DWORD CALLBACK diva_pre_startup(void) /* Hook Win32 APIs */ - clock_hook_init(); + clock_write_hook_init(); serial_hook_init(); /* Initialize emulation hooks */ diff --git a/hooklib/clock.c b/hooklib/clock.c index a35f3b1..d5d0b9e 100644 --- a/hooklib/clock.c +++ b/hooklib/clock.c @@ -17,7 +17,7 @@ static BOOL WINAPI my_SetTimeZoneInformation(TIME_ZONE_INFORMATION *tzinfo); static BOOL (WINAPI * next_GetSystemTimeAsFileTime)(FILETIME *out); static int64_t clock_current_day; -static const struct hook_symbol clock_hook_syms[] = { +static const struct hook_symbol clock_read_hook_syms[] = { { .name = "GetSystemTimeAsFileTime", .patch = my_GetSystemTimeAsFileTime, @@ -31,7 +31,11 @@ static const struct hook_symbol clock_hook_syms[] = { }, { .name = "GetTimeZoneInformation", .patch = my_GetTimeZoneInformation, - }, { + }, +}; + +static const struct hook_symbol clock_write_hook_syms[] = { + { .name = "SetLocalTime", .patch = my_SetLocalTime, }, { @@ -203,11 +207,20 @@ static BOOL WINAPI my_SetTimeZoneInformation(TIME_ZONE_INFORMATION *in) return TRUE; } -void clock_hook_init(void) +void clock_read_hook_init(void) { hook_table_apply( NULL, "kernel32.dll", - clock_hook_syms, - _countof(clock_hook_syms)); + clock_read_hook_syms, + _countof(clock_read_hook_syms)); +} + +void clock_write_hook_init(void) +{ + hook_table_apply( + NULL, + "kernel32.dll", + clock_write_hook_syms, + _countof(clock_write_hook_syms)); } diff --git a/hooklib/clock.h b/hooklib/clock.h index f3d242e..78a854b 100644 --- a/hooklib/clock.h +++ b/hooklib/clock.h @@ -1,3 +1,4 @@ #pragma once -void clock_hook_init(void); +void clock_read_hook_init(void); +void clock_write_hook_init(void); diff --git a/idzhook/dllmain.c b/idzhook/dllmain.c index f2d80b5..93cc3b1 100644 --- a/idzhook/dllmain.c +++ b/idzhook/dllmain.c @@ -35,7 +35,7 @@ static DWORD CALLBACK idz_pre_startup(void) /* Hook Win32 APIs */ - clock_hook_init(); + clock_write_hook_init(); serial_hook_init(); /* Initialize emulation hooks */ diff --git a/minihook/dllmain.c b/minihook/dllmain.c index 2bf7dae..a9d6b82 100644 --- a/minihook/dllmain.c +++ b/minihook/dllmain.c @@ -25,7 +25,9 @@ static DWORD CALLBACK app_pre_startup(void) nusec_config_load(&nusec_cfg, L".\\segatools.ini"); ds_config_load(&ds_cfg, L".\\segatools.ini"); - clock_hook_init(); + // TODO make use of clock read hook configurable + clock_read_hook_init(); + clock_write_hook_init(); nusec_hook_init(&nusec_cfg, "SSSS", "AAV0"); ds_hook_init(&ds_cfg);