hooklib/clock.c: Split clock read and write hooks

This commit is contained in:
Tau 2019-08-21 12:52:39 -04:00
parent 65ccaf55f3
commit 94005de9e9
6 changed files with 27 additions and 10 deletions

View File

@ -48,7 +48,8 @@ static DWORD CALLBACK chuni_pre_startup(void)
/* Hook Win32 APIs */ /* Hook Win32 APIs */
clock_hook_init(); clock_read_hook_init();
clock_write_hook_init();
gfx_hook_init(); gfx_hook_init();
serial_hook_init(); serial_hook_init();

View File

@ -36,7 +36,7 @@ static DWORD CALLBACK diva_pre_startup(void)
/* Hook Win32 APIs */ /* Hook Win32 APIs */
clock_hook_init(); clock_write_hook_init();
serial_hook_init(); serial_hook_init();
/* Initialize emulation hooks */ /* Initialize emulation hooks */

View File

@ -17,7 +17,7 @@ static BOOL WINAPI my_SetTimeZoneInformation(TIME_ZONE_INFORMATION *tzinfo);
static BOOL (WINAPI * next_GetSystemTimeAsFileTime)(FILETIME *out); static BOOL (WINAPI * next_GetSystemTimeAsFileTime)(FILETIME *out);
static int64_t clock_current_day; 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", .name = "GetSystemTimeAsFileTime",
.patch = my_GetSystemTimeAsFileTime, .patch = my_GetSystemTimeAsFileTime,
@ -31,7 +31,11 @@ static const struct hook_symbol clock_hook_syms[] = {
}, { }, {
.name = "GetTimeZoneInformation", .name = "GetTimeZoneInformation",
.patch = my_GetTimeZoneInformation, .patch = my_GetTimeZoneInformation,
}, { },
};
static const struct hook_symbol clock_write_hook_syms[] = {
{
.name = "SetLocalTime", .name = "SetLocalTime",
.patch = my_SetLocalTime, .patch = my_SetLocalTime,
}, { }, {
@ -203,11 +207,20 @@ static BOOL WINAPI my_SetTimeZoneInformation(TIME_ZONE_INFORMATION *in)
return TRUE; return TRUE;
} }
void clock_hook_init(void) void clock_read_hook_init(void)
{ {
hook_table_apply( hook_table_apply(
NULL, NULL,
"kernel32.dll", "kernel32.dll",
clock_hook_syms, clock_read_hook_syms,
_countof(clock_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));
} }

View File

@ -1,3 +1,4 @@
#pragma once #pragma once
void clock_hook_init(void); void clock_read_hook_init(void);
void clock_write_hook_init(void);

View File

@ -35,7 +35,7 @@ static DWORD CALLBACK idz_pre_startup(void)
/* Hook Win32 APIs */ /* Hook Win32 APIs */
clock_hook_init(); clock_write_hook_init();
serial_hook_init(); serial_hook_init();
/* Initialize emulation hooks */ /* Initialize emulation hooks */

View File

@ -25,7 +25,9 @@ static DWORD CALLBACK app_pre_startup(void)
nusec_config_load(&nusec_cfg, L".\\segatools.ini"); nusec_config_load(&nusec_cfg, L".\\segatools.ini");
ds_config_load(&ds_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"); nusec_hook_init(&nusec_cfg, "SSSS", "AAV0");
ds_hook_init(&ds_cfg); ds_hook_init(&ds_cfg);