diff --git a/dist/iidx/gamestart-09.bat b/dist/iidx/gamestart-09.bat index 3f12785..bc1eecb 100755 --- a/dist/iidx/gamestart-09.bat +++ b/dist/iidx/gamestart-09.bat @@ -45,8 +45,6 @@ set PATH=^ cd /d %REVISION_DIR% %BEMANITOOLS_DIR%\inject.exe^ - %BEMANITOOLS_DIR%\iidxhook1.dll^ - %REVISION_DIR%\bm2dx.exe^ - -D^ + %BEMANITOOLS_DIR%\inject-09.xml^ --config %BEMANITOOLS_DIR%\iidxhook-09.conf^ %* \ No newline at end of file diff --git a/dist/iidx/inject-09.xml b/dist/iidx/inject-09.xml new file mode 100644 index 0000000..05c1b8d --- /dev/null +++ b/dist/iidx/inject-09.xml @@ -0,0 +1,104 @@ + + + 1 + + + bm2dx.exe + + inject + + + + 1 + iidxhook1.dll + + + + + C02 + + localhost:80 + 0101020304050607086F + 0101020304050607086F + + + + + -1 + + -1 + + 0.0 + + + 1 + 1 + + 0 + 0 + + + + 0 + 0 + + none + + + + -1.000000 + + 1 + + + + C02 + + + GEC02 + 0:0:0 + + GEC02JAA + + + 0 + + + + + .\ + 1 + 1 + + + + + + + 1 + misc + 8192 + + + 0 + 64 + discard_new + + + 1 + 1 + + + 1 + inject.log + 0 + 0 + 1 + + + + + 1 + 0 + + \ No newline at end of file diff --git a/src/main/iidxhook-util/config-eamuse.c b/src/main/iidxhook-util/config-eamuse.c index 239d875..e506b96 100644 --- a/src/main/iidxhook-util/config-eamuse.c +++ b/src/main/iidxhook-util/config-eamuse.c @@ -2,12 +2,16 @@ #include "cconfig/cconfig-util.h" +#include "core/config-ext.h" + #include "iidxhook-util/config-eamuse.h" #include "iface-core/log.h" #include "security/mcode.h" +#include "util/str.h" + #define IIDXHOOK_CONFIG_EAMUSE_CARD_TYPE_KEY "eamuse.card_type" #define IIDXHOOK_CONFIG_EAMUSE_SERVER_KEY "eamuse.server" #define IIDXHOOK_CONFIG_EAMUSE_PCBID_KEY "eamuse.pcbid" @@ -167,3 +171,42 @@ void iidxhook_util_config_eamuse_get( free(tmp2); } } + +static void _iidxhook_util_config_eamuse_verify( + const iidxhook_util_config_eamuse_t *config) +{ + char *tmp; + + if (!str_eq(config->card_type, "C02") && + !str_eq(config->card_type, "D01") && + !str_eq(config->card_type, "E11") && + !str_eq(config->card_type, "ECO")) { + log_fatal("Invalid card_type in eamuse configuration: %s", config->card_type); + } + + if (!security_id_verify(&config->pcbid)) { + tmp = security_id_to_str(&config->pcbid, false); + log_fatal("Invalid pcbid in eamuse configuration: %s", tmp); + free(tmp); + } + + if (!security_id_verify(&config->eamid)) { + tmp = security_id_to_str(&config->eamid, false); + log_fatal("Invalid eamid in eamuse configuration: %s", tmp); + free(tmp); + } +} + +void iidxhook_util_config_eamuse_get2( + const bt_core_config_t *config, + iidxhook_util_config_eamuse_t *config_eamuse) +{ + bt_core_config_ext_str_get(config, "eamuse/card_type", config_eamuse->card_type, sizeof(config_eamuse->card_type)); + bt_core_config_ext_net_addr_get(config, "eamuse/server", &config_eamuse->server); + bt_core_config_ext_bin_get(config, "eamuse/pcbid", + (uint8_t *) &config_eamuse->pcbid, sizeof(config_eamuse->pcbid)); + bt_core_config_ext_bin_get(config, "eamuse/eamid", + (uint8_t *) &config_eamuse->eamid, sizeof(config_eamuse->eamid)); + + _iidxhook_util_config_eamuse_verify(config_eamuse); +} diff --git a/src/main/iidxhook-util/config-eamuse.h b/src/main/iidxhook-util/config-eamuse.h index b6b1d40..c20dd25 100644 --- a/src/main/iidxhook-util/config-eamuse.h +++ b/src/main/iidxhook-util/config-eamuse.h @@ -3,20 +3,26 @@ #include "cconfig/cconfig.h" +#include "iface-core/config.h" + #include "security/id.h" #include "util/net.h" -struct iidxhook_util_config_eamuse { +typedef struct iidxhook_util_config_eamuse { char card_type[4]; struct net_addr server; struct security_id pcbid; struct security_id eamid; -}; +} iidxhook_util_config_eamuse_t; void iidxhook_util_config_eamuse_init(struct cconfig *config); void iidxhook_util_config_eamuse_get( - struct iidxhook_util_config_eamuse *config_eamuse, struct cconfig *config); + iidxhook_util_config_eamuse_t *config_eamuse, struct cconfig *config); + +void iidxhook_util_config_eamuse_get2( + const bt_core_config_t *config, + iidxhook_util_config_eamuse_t *config_eamuse); #endif \ No newline at end of file diff --git a/src/main/iidxhook-util/config-ezusb.c b/src/main/iidxhook-util/config-ezusb.c index e4568e4..08db60a 100644 --- a/src/main/iidxhook-util/config-ezusb.c +++ b/src/main/iidxhook-util/config-ezusb.c @@ -3,11 +3,14 @@ #include "cconfig/cconfig-util.h" +#include "core/config-ext.h" + #include "iidxhook-util/config-ezusb.h" #include "iface-core/log.h" #include "util/mem.h" +#include "util/str.h" #define IIDXHOOK_UTIL_CONFIG_EZUSB_API_CALL_MONITORING_KEY \ "ezusb.api_call_monitoring" @@ -16,6 +19,21 @@ #define IIDXHOOK_UTIL_CONFIG_EZUSB_DEFAULT_API_CALL_MONITORING_VALUE false #define IIDXHOOK_UTIL_CONFIG_EZUSB_DEFAULT_IO_BOARD_TYPE_VALUE 0 +static void _iidxhook_util_config_ezusb_board_type_get(const bt_core_config_t *config, int32_t *board_type) +{ + char tmp[8]; + + bt_core_config_ext_str_get(config, "ezusb/type", tmp, sizeof(tmp)); + + if (str_eq(tmp, "C02")) { + *board_type = 0; + } else if (str_eq(tmp, "D01")) { + *board_type = 1; + } else { + log_fatal("Invalid ezusb board type in configuration: %s", tmp); + } +} + void iidxhook_util_config_ezusb_init(struct cconfig *config) { cconfig_util_set_bool( @@ -69,3 +87,11 @@ void iidxhook_util_config_ezusb_get( config_ezusb->io_board_type = 0; } } + +void iidxhook_util_config_ezusb_get2( + const bt_core_config_t *config, + iidxhook_util_config_ezusb_t *config_ezusb) +{ + _iidxhook_util_config_ezusb_board_type_get(config, &config_ezusb->io_board_type); + bt_core_config_ext_bool_get(config, "ezusb/debug/api_call_monitoring", &config_ezusb->api_call_monitoring); +} \ No newline at end of file diff --git a/src/main/iidxhook-util/config-ezusb.h b/src/main/iidxhook-util/config-ezusb.h index 54d69fb..f4fdf2f 100644 --- a/src/main/iidxhook-util/config-ezusb.h +++ b/src/main/iidxhook-util/config-ezusb.h @@ -3,16 +3,20 @@ #include "cconfig/cconfig.h" -#include "security/mcode.h" +#include "iface-core/config.h" -struct iidxhook_util_config_ezusb { +typedef struct iidxhook_util_config_ezusb { bool api_call_monitoring; int32_t io_board_type; -}; +} iidxhook_util_config_ezusb_t; void iidxhook_util_config_ezusb_init(struct cconfig *config); void iidxhook_util_config_ezusb_get( struct iidxhook_util_config_ezusb *config_ezusb, struct cconfig *config); +void iidxhook_util_config_ezusb_get2( + const bt_core_config_t *config, + iidxhook_util_config_ezusb_t *config_ezusb); + #endif \ No newline at end of file diff --git a/src/main/iidxhook-util/config-gfx.c b/src/main/iidxhook-util/config-gfx.c index 039778c..977252e 100644 --- a/src/main/iidxhook-util/config-gfx.c +++ b/src/main/iidxhook-util/config-gfx.c @@ -1,3 +1,4 @@ +#include #include #include "cconfig/cconfig-util.h" @@ -6,6 +7,8 @@ #include "iidxhook-util/config-gfx.h" +#include "util/str.h" + #define IIDXHOOK_CONFIG_GFX_BGVIDEO_UV_FIX_KEY "gfx.bgvideo_uv_fix" #define IIDXHOOK_CONFIG_GFX_FRAMED_KEY "gfx.framed" #define IIDXHOOK_CONFIG_GFX_FRAME_RATE_LIMIT_KEY "gfx.frame_rate_limit" @@ -270,7 +273,7 @@ void iidxhook_config_gfx_get( if (!cconfig_util_get_int( config, IIDXHOOK_CONFIG_GFX_WINDOW_WIDTH_KEY, - &config_gfx->window_width, + (int32_t*) &config_gfx->window_width, IIDXHOOK_CONFIG_GFX_DEFAULT_WINDOW_WIDTH_VALUE)) { log_warning( "Invalid value for key '%s' specified, fallback " @@ -282,7 +285,7 @@ void iidxhook_config_gfx_get( if (!cconfig_util_get_int( config, IIDXHOOK_CONFIG_GFX_WINDOW_HEIGHT_KEY, - &config_gfx->window_height, + (int32_t*) &config_gfx->window_height, IIDXHOOK_CONFIG_GFX_DEFAULT_WINDOW_HEIGHT_VALUE)) { log_warning( "Invalid value for key '%s' specified, fallback " @@ -357,7 +360,7 @@ void iidxhook_config_gfx_get( if (!cconfig_util_get_int( config, IIDXHOOK_CONFIG_GFX_FORCED_REFRESHRATE_KEY, - &config_gfx->forced_refresh_rate, + (int32_t*) &config_gfx->forced_refresh_rate, IIDXHOOK_CONFIG_GFX_DEFAULT_FORCED_RR_VALUE)) { log_warning( "Invalid value for key '%s' specified, fallback " @@ -369,7 +372,7 @@ void iidxhook_config_gfx_get( if (!cconfig_util_get_int( config, IIDXHOOK_CONFIG_GFX_DEVICE_ADAPTER_KEY, - &config_gfx->device_adapter, + (int32_t*) &config_gfx->device_adapter, IIDXHOOK_CONFIG_GFX_DEFAULT_DEVICE_ADAPTER_VALUE)) { log_warning( "Invalid value for key '%s' specified, fallback " @@ -390,3 +393,86 @@ void iidxhook_config_gfx_get( IIDXHOOK_CONFIG_GFX_DEFAULT_DIAGONAL_TEARING_FIX_VALUE); } } + +static void _iidxhook_util_config_gfx_verify(const iidxhook_config_gfx_t *config) +{ + if (config->frame_rate_limit < 0.0 || config->frame_rate_limit > 500.0) { + log_fatal("Invalid frame_rate_limit value in gfx configuration: %f", config->frame_rate_limit); + } + + if (!(fabs(config->monitor_check - (-1.0)) < 0.001 || + fabs(config->monitor_check) < 0.001 || + config->monitor_check < 500.0)) { + log_fatal("Invalid monitor_check value in gfx configuration: %f", config->monitor_check); + } + + if (config->window_width > 10000 || config->window_width < 0) { + log_fatal("Invalid window_width value in gfx configuration: %d", config->window_width); + } + + if (config->window_height > 10000 || config->window_height < 0) { + log_fatal("Invalid window_height value in gfx configuration: %d", config->window_height); + } + + if (config->scale_back_buffer_width > 10000) { + log_fatal("Invalid scale_back_buffer_width value in gfx configuration: %d", config->scale_back_buffer_width); + } + + if (config->scale_back_buffer_height > 10000) { + log_fatal("Invalid scale_back_buffer_height value in gfx configuration: %d", config->scale_back_buffer_height); + } + + if (config->forced_refresh_rate < -1 || config->forced_refresh_rate > 500) { + log_fatal("Invalid forced_refresh_rate value in gfx configuration: %d", config->forced_refresh_rate); + } + + if (config->device_adapter < -1 || config->device_adapter > 32) { + log_fatal("Invalid device_adapter value in gfx configuration: %d", config->device_adapter); + } +} + +static void _iidxhook_util_config_gfx_back_buffer_scale_filter_get( + const bt_core_config_t *config, + enum iidxhook_util_d3d9_back_buffer_scale_filter *filter) +{ + char tmp[16]; + + bt_core_config_str_get(config, "gfx/back_buffer_scale/filter", tmp, sizeof(tmp)); + + if (str_eq(tmp, "none")) { + *filter = IIDXHOOK_UTIL_D3D9_BACK_BUFFER_SCALE_FILTER_NONE; + } else if (str_eq(tmp, "linear")) { + *filter = IIDXHOOK_UTIL_D3D9_BACK_BUFFER_SCALE_FILTER_LINEAR; + } else if (str_eq(tmp, "point")) { + *filter = IIDXHOOK_UTIL_D3D9_BACK_BUFFER_SCALE_FILTER_POINT; + } else { + log_fatal("Invalid value for back_buffer_scale/filter in gfx config: %s", tmp); + } +} + +void iidxhook_util_config_gfx_get2( + const bt_core_config_t *config, + iidxhook_config_gfx_t *config_gfx) +{ + bt_core_config_s8_get(config, "gfx/device/adapter", &config_gfx->device_adapter); + bt_core_config_s16_get(config, "gfx/device/forced_refresh_rate", &config_gfx->forced_refresh_rate); + bt_core_config_float_get(config, "gfx/device/frame_rate_limit", &config_gfx->frame_rate_limit); + bt_core_config_u16_get(config, "gfx/device/pci_id_vid", &config_gfx->pci_id_vid); + bt_core_config_u16_get(config, "gfx/device/pci_id_pid", &config_gfx->pci_id_pid); + + bt_core_config_bool_get(config, "gfx/window/windowed", &config_gfx->windowed); + bt_core_config_bool_get(config, "gfx/window/framed", &config_gfx->framed); + bt_core_config_u16_get(config, "gfx/window/width", &config_gfx->window_width); + bt_core_config_u16_get(config, "gfx/window/height", &config_gfx->window_height); + + bt_core_config_u16_get(config, "gfx/back_buffer_scale/width", &config_gfx->scale_back_buffer_width); + bt_core_config_u16_get(config, "gfx/back_buffer_scale/height", &config_gfx->scale_back_buffer_height); + _iidxhook_util_config_gfx_back_buffer_scale_filter_get(config, &config_gfx->scale_back_buffer_filter); + + bt_core_config_bool_get(config, "gfx/game/bgvideo_uv_fix", &config_gfx->bgvideo_uv_fix); + bt_core_config_float_get(config, "gfx/game/monitor_check", &config_gfx->monitor_check); + bt_core_config_bool_get(config, "gfx/game/diagonal_tearing_fix", &config_gfx->diagonal_tearing_fix); + bt_core_config_bool_get(config, "gfx/game/happy_sky_ms_bg_fix", &config_gfx->happy_sky_ms_bg_fix); + + _iidxhook_util_config_gfx_verify(config_gfx); +} \ No newline at end of file diff --git a/src/main/iidxhook-util/config-gfx.h b/src/main/iidxhook-util/config-gfx.h index 6a73e62..da95aa9 100644 --- a/src/main/iidxhook-util/config-gfx.h +++ b/src/main/iidxhook-util/config-gfx.h @@ -3,10 +3,12 @@ #include "cconfig/cconfig.h" +#include "iface-core/config.h" + #include "iidxhook-util/d3d9.h" // see struct iidxhook_util_d3d9_config for more info -struct iidxhook_config_gfx { +typedef struct iidxhook_config_gfx { bool bgvideo_uv_fix; bool framed; float frame_rate_limit; @@ -14,19 +16,24 @@ struct iidxhook_config_gfx { uint16_t pci_id_vid; uint16_t pci_id_pid; bool windowed; - int32_t window_width; - int32_t window_height; + uint16_t window_width; + uint16_t window_height; uint16_t scale_back_buffer_width; uint16_t scale_back_buffer_height; enum iidxhook_util_d3d9_back_buffer_scale_filter scale_back_buffer_filter; - int32_t forced_refresh_rate; - int32_t device_adapter; + int16_t forced_refresh_rate; + int8_t device_adapter; bool diagonal_tearing_fix; -}; + bool happy_sky_ms_bg_fix; +} iidxhook_config_gfx_t; void iidxhook_config_gfx_init(struct cconfig *config); void iidxhook_config_gfx_get( struct iidxhook_config_gfx *config_gfx, struct cconfig *config); +void iidxhook_util_config_gfx_get2( + const bt_core_config_t *config, + iidxhook_config_gfx_t *config_gfx); + #endif \ No newline at end of file diff --git a/src/main/iidxhook-util/config-io.c b/src/main/iidxhook-util/config-io.c index d8f8543..2898e9c 100644 --- a/src/main/iidxhook-util/config-io.c +++ b/src/main/iidxhook-util/config-io.c @@ -1,5 +1,7 @@ #include "cconfig/cconfig-util.h" +#include "core/config-ext.h" + #include "iface-core/log.h" #include "iidxhook-util/config-io.h" @@ -55,3 +57,11 @@ void iidxhook_config_io_get( IIDXHOOK_UTIL_CONFIG_IO_DEFAULT_DISABLE_IO_EMU_VALUE); } } + +void iidxhook_util_config_io_get2( + const bt_core_config_t *config, + iidxhook_config_io_t *config_io) +{ + bt_core_config_ext_bool_get(config, "io/disable_card_reader_emu", &config_io->disable_card_reader_emu); + bt_core_config_ext_bool_get(config, "io/disable_io_emu", &config_io->disable_io_emu); +} \ No newline at end of file diff --git a/src/main/iidxhook-util/config-io.h b/src/main/iidxhook-util/config-io.h index 0f63750..d6c187e 100644 --- a/src/main/iidxhook-util/config-io.h +++ b/src/main/iidxhook-util/config-io.h @@ -5,14 +5,20 @@ #include "cconfig/cconfig.h" -struct iidxhook_config_io { +#include "iface-core/config.h" + +typedef struct iidxhook_config_io { bool disable_card_reader_emu; bool disable_io_emu; -}; +} iidxhook_config_io_t; void iidxhook_config_io_init(struct cconfig *config); void iidxhook_config_io_get( struct iidxhook_config_io *config_io, struct cconfig *config); +void iidxhook_util_config_io_get2( + const bt_core_config_t *config, + iidxhook_config_io_t *config_io); + #endif \ No newline at end of file diff --git a/src/main/iidxhook-util/config-misc.c b/src/main/iidxhook-util/config-misc.c index 308912a..caa6881 100644 --- a/src/main/iidxhook-util/config-misc.c +++ b/src/main/iidxhook-util/config-misc.c @@ -1,5 +1,7 @@ #include "cconfig/cconfig-util.h" +#include "core/config-ext.h" + #include "iface-core/log.h" #include "iidxhook-util/config-misc.h" @@ -74,3 +76,12 @@ void iidxhook_config_misc_get( IIDXHOOK_CONFIG_MISC_DEFAULT_SETTINGS_PATH_STUB_VALUE); } } + +void iidxhook_util_config_misc_get2( + const bt_core_config_t *config, + iidxhook_config_misc_t *config_misc) +{ + bt_core_config_ext_bool_get(config, "misc/disable_clock_set", &config_misc->disable_clock_set); + bt_core_config_ext_bool_get(config, "misc/rteffect_stub", &config_misc->rteffect_stub); + bt_core_config_ext_str_get(config, "misc/settings_path", config_misc->settings_path, sizeof(config_misc->settings_path)); +} diff --git a/src/main/iidxhook-util/config-misc.h b/src/main/iidxhook-util/config-misc.h index 743e83d..fd87fd3 100644 --- a/src/main/iidxhook-util/config-misc.h +++ b/src/main/iidxhook-util/config-misc.h @@ -5,15 +5,21 @@ #include "cconfig/cconfig.h" -struct iidxhook_config_misc { +#include "iface-core/config.h" + +typedef struct iidxhook_config_misc { bool disable_clock_set; bool rteffect_stub; char settings_path[MAX_PATH]; -}; +} iidxhook_config_misc_t; void iidxhook_config_misc_init(struct cconfig *config); void iidxhook_config_misc_get( struct iidxhook_config_misc *config_misc, struct cconfig *config); +void iidxhook_util_config_misc_get2( + const bt_core_config_t *config, + iidxhook_config_misc_t *config_misc); + #endif \ No newline at end of file diff --git a/src/main/iidxhook-util/config-sec.c b/src/main/iidxhook-util/config-sec.c index 80aa27a..ece6003 100644 --- a/src/main/iidxhook-util/config-sec.c +++ b/src/main/iidxhook-util/config-sec.c @@ -3,6 +3,8 @@ #include "cconfig/cconfig-util.h" +#include "core/config-ext.h" + #include "iface-core/log.h" #include "iidxhook-util/config-sec.h" @@ -213,3 +215,34 @@ void iidxhook_config_sec_get( free(tmp_str); } + +static void _iidxhook_util_config_sec_security_mcode_get(const bt_core_config_t *config, const char *path, struct security_mcode *mcode) +{ + char tmp[sizeof(struct security_mcode) + 1]; + + bt_core_config_ext_str_get(config, path, tmp, sizeof(tmp)); + + if (!security_mcode_parse(tmp, mcode)) { + log_fatal("Parsing mcode failed: %s", tmp); + } +} + +static void _iidxhook_util_config_sec_boot_seeds_get(const bt_core_config_t *config, uint32_t *boot_seeds) +{ + char tmp[8]; + + bt_core_config_ext_str_get(config, "ezusb/security/boot/seed", tmp, sizeof(tmp)); + + if (!iidxhook_config_boot_seeds_parse(tmp, boot_seeds)) { + log_fatal("Parsing security boot seeds failed: %s", tmp); + } +} + +void iidxhook_util_config_sec_get2( + const bt_core_config_t *config, + iidxhook_config_sec_t *config_sec) +{ + _iidxhook_util_config_sec_security_mcode_get(config, "ezusb/security/boot/version", &config_sec->boot_version); + _iidxhook_util_config_sec_boot_seeds_get(config, config_sec->boot_seeds); + _iidxhook_util_config_sec_security_mcode_get(config, "ezusb/security/plug_black_mcode", &config_sec->black_plug_mcode); +} diff --git a/src/main/iidxhook-util/config-sec.h b/src/main/iidxhook-util/config-sec.h index 314940d..addc061 100644 --- a/src/main/iidxhook-util/config-sec.h +++ b/src/main/iidxhook-util/config-sec.h @@ -3,17 +3,23 @@ #include "cconfig/cconfig.h" +#include "iface-core/config.h" + #include "security/mcode.h" -struct iidxhook_config_sec { +typedef struct iidxhook_config_sec { struct security_mcode boot_version; uint32_t boot_seeds[3]; struct security_mcode black_plug_mcode; -}; +} iidxhook_config_sec_t; void iidxhook_config_sec_init(struct cconfig *config); void iidxhook_config_sec_get( struct iidxhook_config_sec *config_sec, struct cconfig *config); +void iidxhook_util_config_sec_get2( + const bt_core_config_t *config, + iidxhook_config_sec_t *config_sec); + #endif \ No newline at end of file diff --git a/src/main/iidxhook1/Module.mk b/src/main/iidxhook1/Module.mk index 05e5e73..6ff7544 100644 --- a/src/main/iidxhook1/Module.mk +++ b/src/main/iidxhook1/Module.mk @@ -4,8 +4,10 @@ ldflags_iidxhook1 := \ -lws2_32 \ -liphlpapi \ -lpsapi \ + -lshlwapi \ libs_iidxhook1 := \ + sdk-hook \ core \ iidxhook-util \ ezusb-emu \ @@ -25,7 +27,7 @@ libs_iidxhook1 := \ mxml \ src_iidxhook1 := \ - config-iidxhook1.c \ dllmain.c \ + iidxhook1.c \ ezusb-mon.c \ log-ezusb.c \ diff --git a/src/main/iidxhook1/config-iidxhook1.c b/src/main/iidxhook1/config-iidxhook1.c deleted file mode 100644 index 6df2f42..0000000 --- a/src/main/iidxhook1/config-iidxhook1.c +++ /dev/null @@ -1,36 +0,0 @@ -#include "cconfig/cconfig-util.h" - -#include "iface-core/log.h" - -#include "iidxhook1/config-iidxhook1.h" - -#define IIDXHOOK_CONFIG_MISC_HAPPY_SKY_MS_BG_FIX_KEY "misc.happy_sky_ms_bg_fix" - -#define IIDXHOOK_CONFIG_MISC_DEFAULT_HAPPY_SKY_MS_BG_FIX_VALUE false - -void iidxhook_config_iidxhook1_init(struct cconfig *config) -{ - cconfig_util_set_bool( - config, - IIDXHOOK_CONFIG_MISC_HAPPY_SKY_MS_BG_FIX_KEY, - IIDXHOOK_CONFIG_MISC_DEFAULT_HAPPY_SKY_MS_BG_FIX_VALUE, - "Fix broken 3D background on Happy Sky's music select (if " - "appearing " - "completely white)"); -} - -void iidxhook_config_iidxhook1_get( - struct iidxhook_config_iidxhook1 *config_iidxhook1, struct cconfig *config) -{ - if (!cconfig_util_get_bool( - config, - IIDXHOOK_CONFIG_MISC_HAPPY_SKY_MS_BG_FIX_KEY, - &config_iidxhook1->happy_sky_ms_bg_fix, - IIDXHOOK_CONFIG_MISC_DEFAULT_HAPPY_SKY_MS_BG_FIX_VALUE)) { - log_warning( - "Invalid value for key '%s' specified, fallback " - "to default '%d'", - IIDXHOOK_CONFIG_MISC_HAPPY_SKY_MS_BG_FIX_KEY, - IIDXHOOK_CONFIG_MISC_DEFAULT_HAPPY_SKY_MS_BG_FIX_VALUE); - } -} \ No newline at end of file diff --git a/src/main/iidxhook1/config-iidxhook1.h b/src/main/iidxhook1/config-iidxhook1.h deleted file mode 100644 index bec1e48..0000000 --- a/src/main/iidxhook1/config-iidxhook1.h +++ /dev/null @@ -1,15 +0,0 @@ -#ifndef IIDXHOOK_CONFIG_IIDXHOOK1_H -#define IIDXHOOK_CONFIG_IIDXHOOK1_H - -#include "cconfig/cconfig.h" - -struct iidxhook_config_iidxhook1 { - bool happy_sky_ms_bg_fix; -}; - -void iidxhook_config_iidxhook1_init(struct cconfig *config); - -void iidxhook_config_iidxhook1_get( - struct iidxhook_config_iidxhook1 *config_iidxhook1, struct cconfig *config); - -#endif \ No newline at end of file diff --git a/src/main/iidxhook1/dllmain.c b/src/main/iidxhook1/dllmain.c index 74995ed..5b0742b 100644 --- a/src/main/iidxhook1/dllmain.c +++ b/src/main/iidxhook1/dllmain.c @@ -1,332 +1,70 @@ #include -#include -#include -#include - -#include "cconfig/cconfig-hook.h" - -#include "core/boot.h" -#include "core/log-bt-ext.h" -#include "core/log-bt.h" -#include "core/log-sink-debug.h" -#include "core/thread-crt.h" - -#include "ezusb-emu/desc.h" -#include "ezusb-emu/device.h" -#include "ezusb-emu/node-security-plug.h" - -#include "ezusb-iidx-emu/msg.h" -#include "ezusb-iidx-emu/node-serial.h" -#include "ezusb-iidx-emu/nodes.h" - -#include "hook/d3d9.h" -#include "hook/iohook.h" #include "hook/table.h" -#include "hooklib/acp.h" -#include "hooklib/adapter.h" -#include "hooklib/setupapi.h" +#include "iidxhook1/iidxhook1.h" -#include "iface-core/log.h" -#include "iface-core/thread.h" - -#include "iface-io/eam.h" -#include "iface-io/iidx.h" - -#include "iidxhook-util/chart-patch.h" -#include "iidxhook-util/clock.h" -#include "iidxhook-util/config-eamuse.h" -#include "iidxhook-util/config-ezusb.h" -#include "iidxhook-util/config-gfx.h" -#include "iidxhook-util/config-misc.h" -#include "iidxhook-util/config-sec.h" -#include "iidxhook-util/d3d9.h" -#include "iidxhook-util/eamuse.h" -#include "iidxhook-util/effector.h" -#include "iidxhook-util/settings.h" - -#include "iidxhook1/config-iidxhook1.h" -#include "iidxhook1/ezusb-mon.h" -#include "iidxhook1/log-ezusb.h" - -#include "module/io-ext.h" -#include "module/io.h" +#include "main/sdk-hook/dllentry.h" #include "util/defs.h" -#include "util/proc.h" -#define IIDXHOOK1_INFO_HEADER \ - "iidxhook for 9th Style, 10th Style, RED and HAPPY SKY" \ - ", build " __DATE__ " " __TIME__ ", gitrev " STRINGIFY(GITREV) -#define IIDXHOOK1_CMD_USAGE \ - "Usage: inject.exe iidxhook1.dll [options...]" +static HANDLE STDCALL _iidxhook1_dllmain_my_OpenProcess(DWORD, BOOL, DWORD); +static HANDLE(STDCALL *_iidxhook1_dllmain_real_OpenProcess)(DWORD, BOOL, DWORD); -static const hook_d3d9_irp_handler_t iidxhook_d3d9_handlers[] = { - iidxhook_util_d3d9_irp_handler, -}; +static bool _iidxhook1_dllmain_openprocess_call_check; -static HANDLE STDCALL my_OpenProcess(DWORD, BOOL, DWORD); -static HANDLE(STDCALL *real_OpenProcess)(DWORD, BOOL, DWORD); - -static bool iidxhook_init_check; -static module_io_t *iidxhook_module_io_iidx; -static module_io_t *iidxhook_module_io_eam; - -static const struct hook_symbol init_hook_syms[] = { +static const struct hook_symbol _iidxhook1_dllmain_hook_syms[] = { { .name = "OpenProcess", - .patch = my_OpenProcess, - .link = (void **) &real_OpenProcess, + .patch = _iidxhook1_dllmain_my_OpenProcess, + .link = (void **) &_iidxhook1_dllmain_real_OpenProcess, }, }; -static void _iidxhook1_log_init() -{ - core_log_bt_ext_init_with_debug(); - // TODO change log level support - core_log_bt_level_set(CORE_LOG_BT_LOG_LEVEL_MISC); -} - -static void _iidxhook1_io_iidx_init(module_io_t **module) -{ - bt_io_iidx_api_t api; - - module_io_ext_load_and_init( - "iidxio.dll", "bt_module_io_iidx_api_get", module); - module_io_api_get(*module, &api); - bt_io_iidx_api_set(&api); -} - -static void _iidxhook1_io_eam_init(module_io_t **module) -{ - bt_io_eam_api_t api; - - module_io_ext_load_and_init( - "eamio.dll", "bt_module_io_eam_api_get", module); - module_io_api_get(*module, &api); - bt_io_eam_api_set(&api); -} - -static void iidxhook1_setup_d3d9_hooks( - const struct iidxhook_config_gfx *config_gfx, - const struct iidxhook_config_iidxhook1 *config_iidxhook1) -{ - struct iidxhook_util_d3d9_config d3d9_config; - - if (!proc_is_module_loaded("d3d9.dll")) { - log_fatal( - "d3d8 hook module deprecated, using d3d9 hook modules requires " - "d3d8to9 to work! Could not detect loaded d3d9.dll"); - } - - iidxhook_util_d3d9_init_config(&d3d9_config); - - d3d9_config.windowed = config_gfx->windowed; - d3d9_config.framed = config_gfx->framed; - d3d9_config.override_window_width = config_gfx->window_width; - d3d9_config.override_window_height = config_gfx->window_height; - d3d9_config.framerate_limit = config_gfx->frame_rate_limit; - d3d9_config.iidx12_fix_song_select_bg = - config_iidxhook1->happy_sky_ms_bg_fix; - d3d9_config.iidx09_to_17_fix_uvs_bg_videos = config_gfx->bgvideo_uv_fix; - d3d9_config.scale_back_buffer_width = config_gfx->scale_back_buffer_width; - d3d9_config.scale_back_buffer_height = config_gfx->scale_back_buffer_height; - d3d9_config.scale_back_buffer_filter = config_gfx->scale_back_buffer_filter; - d3d9_config.forced_refresh_rate = config_gfx->forced_refresh_rate; - d3d9_config.device_adapter = config_gfx->device_adapter; - - if (config_gfx->monitor_check == 0) { - log_info("Auto monitor check enabled"); - - d3d9_config.iidx09_to_19_monitor_check_cb = - iidxhook_util_chart_patch_set_refresh_rate; - iidxhook_util_chart_patch_init( - IIDXHOOK_UTIL_CHART_PATCH_TIMEBASE_9_TO_13); - } else if (config_gfx->monitor_check > 0) { - log_info( - "Manual monitor check, resulting refresh rate: %f", - config_gfx->monitor_check); - - iidxhook_util_chart_patch_init( - IIDXHOOK_UTIL_CHART_PATCH_TIMEBASE_9_TO_13); - iidxhook_util_chart_patch_set_refresh_rate(config_gfx->monitor_check); - } - - iidxhook_util_d3d9_configure(&d3d9_config); - - hook_d3d9_init(iidxhook_d3d9_handlers, lengthof(iidxhook_d3d9_handlers)); -} - -/** - * This seems to be a good entry point to intercept - * before the game calls anything important - */ static HANDLE STDCALL -my_OpenProcess(DWORD dwDesiredAccess, BOOL bInheritHandle, DWORD dwProcessId) +_iidxhook1_dllmain_my_OpenProcess(DWORD dwDesiredAccess, BOOL bInheritHandle, DWORD dwProcessId) { - struct cconfig *config; - - struct iidxhook_util_config_ezusb config_ezusb; - struct iidxhook_util_config_eamuse config_eamuse; - struct iidxhook_config_gfx config_gfx; - struct iidxhook_config_iidxhook1 config_iidxhook1; - struct iidxhook_config_misc config_misc; - struct iidxhook_config_sec config_sec; - - if (iidxhook_init_check) { - goto skip; + if (_iidxhook1_dllmain_openprocess_call_check) { + return _iidxhook1_dllmain_real_OpenProcess(dwDesiredAccess, bInheritHandle, dwProcessId); } - iidxhook_init_check = true; + _iidxhook1_dllmain_openprocess_call_check = true; - log_info("-------------------------------------------------------------"); - log_info("--------------- Begin iidxhook my_OpenProcess ---------------"); - log_info("-------------------------------------------------------------"); + bt_hook_dllentry_main_init(); - config = cconfig_init(); - - iidxhook_util_config_ezusb_init(config); - iidxhook_util_config_eamuse_init(config); - iidxhook_config_gfx_init(config); - iidxhook_config_iidxhook1_init(config); - iidxhook_config_misc_init(config); - iidxhook_config_sec_init(config); - - if (!cconfig_hook_config_init( - config, - IIDXHOOK1_INFO_HEADER "\n" IIDXHOOK1_CMD_USAGE, - CCONFIG_CMD_USAGE_OUT_DBG)) { - cconfig_finit(config); - exit(EXIT_FAILURE); - } - - iidxhook_util_config_ezusb_get(&config_ezusb, config); - iidxhook_util_config_eamuse_get(&config_eamuse, config); - iidxhook_config_gfx_get(&config_gfx, config); - iidxhook_config_iidxhook1_get(&config_iidxhook1, config); - iidxhook_config_misc_get(&config_misc, config); - iidxhook_config_sec_get(&config_sec, config); - - cconfig_finit(config); - - log_info(IIDXHOOK1_INFO_HEADER); - log_info("Initializing iidxhook..."); - - /* Round plug security */ - - ezusb_iidx_emu_node_security_plug_set_boot_version( - &config_sec.boot_version); - ezusb_iidx_emu_node_security_plug_set_boot_seeds(config_sec.boot_seeds); - ezusb_iidx_emu_node_security_plug_set_plug_black_mcode( - &config_sec.black_plug_mcode); - ezusb_iidx_emu_node_security_plug_set_pcbid(&config_eamuse.pcbid); - - /* Magnetic card reader (9th to HS) */ - - ezusb_iidx_emu_node_serial_set_card_attributes( - 0, true, config_eamuse.card_type); - - /* eAmusement server IP */ - - eamuse_set_addr(&config_eamuse.server); - eamuse_check_connection(); - - /* Patch rteffect.dll calls */ - - // TODO this doesn't work, because it's too late to apply this here - // this needs to be launched before bm2dx.exe even loads the rteffect.dll - // and runs DllMain of it (see also how this is done with the proxy - // ezusb.dll) - if (config_misc.rteffect_stub) { - effector_hook_init(); - } - - /* Settings paths */ - - if (strlen(config_misc.settings_path) > 0) { - settings_hook_set_path(config_misc.settings_path); - } - - /* Direct3D and USER32 hooks */ - - iidxhook1_setup_d3d9_hooks(&config_gfx, &config_iidxhook1); - - /* Disable operator menu clock setting system clock time */ - - if (config_misc.disable_clock_set) { - iidxhook_util_clock_hook_init(); - } - - /* Start up IIDXIO.DLL */ - - log_info("Starting IIDX IO backend"); - - _iidxhook1_io_iidx_init(&iidxhook_module_io_iidx); - - if (!bt_io_iidx_init()) { - log_fatal("Initializing IIDX IO backend failed"); - } - - /* Start up EAMIO.DLL */ - - log_misc("Initializing card reader backend"); - - _iidxhook1_io_eam_init(&iidxhook_module_io_eam); - - if (!bt_io_eam_init()) { - log_fatal("Initializing card reader backend failed"); - } - - /* Set up IO emulation hooks _after_ IO API setup to allow - API implementations with real IO devices */ - iohook_push_handler(ezusb_emu_device_dispatch_irp); - iohook_push_handler(iidxhook_util_chart_patch_dispatch_irp); - iohook_push_handler(settings_hook_dispatch_irp); - - hook_setupapi_init(&ezusb_emu_desc_device.setupapi); - ezusb_emu_device_hook_init( - ezusb_iidx_emu_msg_init(config_ezusb.io_board_type)); - - if (config_ezusb.api_call_monitoring) { - ezusb_log_hook_init(); - ezusb_mon_hook_init(); - } - - log_info("-------------------------------------------------------------"); - log_info("---------------- End iidxhook my_OpenProcess ----------------"); - log_info("-------------------------------------------------------------"); - -skip: - return real_OpenProcess(dwDesiredAccess, bInheritHandle, dwProcessId); + return _iidxhook1_dllmain_real_OpenProcess(dwDesiredAccess, bInheritHandle, dwProcessId); } -/** - * Hook library for 9th to Happy Sky - */ +// TODO find another call right before main exits to hook cleanup and stuff with +// bt_hook_dllentry_main_fini() + BOOL WINAPI DllMain(HMODULE mod, DWORD reason, void *ctx) { if (reason == DLL_PROCESS_ATTACH) { - core_boot_dll("iidxhook1"); + bt_hook_dllentry_init( + mod, + "iidxhook1", + bt_module_core_config_api_set, + bt_module_core_log_api_set, + bt_module_core_thread_api_set, + bt_module_hook_api_get); - _iidxhook1_log_init(); - - // Use bemanitools core APIs - core_log_bt_core_api_set(); - core_thread_crt_core_api_set(); - - /* Bootstrap hook for further init tasks (see above) */ + _iidxhook1_dllmain_openprocess_call_check = false; hook_table_apply( - NULL, "kernel32.dll", init_hook_syms, lengthof(init_hook_syms)); + NULL, "kernel32.dll", _iidxhook1_dllmain_hook_syms, lengthof(_iidxhook1_dllmain_hook_syms)); - /* Actual hooks for game specific stuff */ + } else if (reason == DLL_PROCESS_DETACH) { + // https://learn.microsoft.com/en-us/windows/win32/dlls/dllmain#remarks + if (ctx == NULL) { + hook_table_revert(NULL, "kernel32.dll", _iidxhook1_dllmain_hook_syms, lengthof(_iidxhook1_dllmain_hook_syms)); - acp_hook_init(); - adapter_hook_init(); - eamuse_hook_init(); - settings_hook_init(); + // Hacky to have this here, should be close/right after application main exits, see TODO above + bt_hook_dllentry_main_fini(); + + bt_hook_dllentry_fini(); + } } return TRUE; -} +} \ No newline at end of file diff --git a/src/main/iidxhook1/iidxhook1.c b/src/main/iidxhook1/iidxhook1.c new file mode 100644 index 0000000..d61c708 --- /dev/null +++ b/src/main/iidxhook1/iidxhook1.c @@ -0,0 +1,265 @@ +#include + +#include +#include +#include + +#include "ezusb-emu/desc.h" +#include "ezusb-emu/device.h" +#include "ezusb-emu/node-security-plug.h" + +#include "ezusb-iidx-emu/msg.h" +#include "ezusb-iidx-emu/node-serial.h" +#include "ezusb-iidx-emu/nodes.h" + +#include "hook/d3d9.h" +#include "hook/iohook.h" + +#include "hooklib/acp.h" +#include "hooklib/adapter.h" +#include "hooklib/setupapi.h" + +#include "iface-core/config.h" +#include "iface-core/log.h" +#include "iface-core/thread.h" + +#include "iface-io/eam.h" +#include "iface-io/iidx.h" + +#include "iidxhook-util/chart-patch.h" +#include "iidxhook-util/clock.h" +#include "iidxhook-util/config-eamuse.h" +#include "iidxhook-util/config-ezusb.h" +#include "iidxhook-util/config-gfx.h" +#include "iidxhook-util/config-misc.h" +#include "iidxhook-util/config-sec.h" +#include "iidxhook-util/d3d9.h" +#include "iidxhook-util/eamuse.h" +#include "iidxhook-util/effector.h" +#include "iidxhook-util/settings.h" + +#include "iidxhook1/ezusb-mon.h" +#include "iidxhook1/log-ezusb.h" + +#include "module/io-ext.h" +#include "module/io.h" + +#include "sdk/module/core/log.h" +#include "sdk/module/core/thread.h" +#include "sdk/module/hook.h" + +#include "util/defs.h" +#include "util/proc.h" + +static const hook_d3d9_irp_handler_t iidxhook_d3d9_handlers[] = { + iidxhook_util_d3d9_irp_handler, +}; + +static module_io_t *iidxhook_module_io_iidx; +static module_io_t *iidxhook_module_io_eam; + +static void _iidxhook1_io_iidx_init(module_io_t **module) +{ + bt_io_iidx_api_t api; + + module_io_ext_load_and_init( + "iidxio.dll", "bt_module_io_iidx_api_get", module); + module_io_api_get(*module, &api); + bt_io_iidx_api_set(&api); +} + +static void _iidxhook1_io_eam_init(module_io_t **module) +{ + bt_io_eam_api_t api; + + module_io_ext_load_and_init( + "eamio.dll", "bt_module_io_eam_api_get", module); + module_io_api_get(*module, &api); + bt_io_eam_api_set(&api); +} + +static void iidxhook1_setup_d3d9_hooks( + const struct iidxhook_config_gfx *config_gfx) +{ + struct iidxhook_util_d3d9_config d3d9_config; + + if (!proc_is_module_loaded("d3d9.dll")) { + log_fatal( + "d3d8 hook module deprecated, using d3d9 hook modules requires " + "d3d8to9 to work! Could not detect loaded d3d9.dll"); + } + + iidxhook_util_d3d9_init_config(&d3d9_config); + + d3d9_config.windowed = config_gfx->windowed; + d3d9_config.framed = config_gfx->framed; + d3d9_config.override_window_width = config_gfx->window_width; + d3d9_config.override_window_height = config_gfx->window_height; + d3d9_config.framerate_limit = config_gfx->frame_rate_limit; + d3d9_config.iidx12_fix_song_select_bg = + config_gfx->happy_sky_ms_bg_fix; + d3d9_config.iidx09_to_17_fix_uvs_bg_videos = config_gfx->bgvideo_uv_fix; + d3d9_config.scale_back_buffer_width = config_gfx->scale_back_buffer_width; + d3d9_config.scale_back_buffer_height = config_gfx->scale_back_buffer_height; + d3d9_config.scale_back_buffer_filter = config_gfx->scale_back_buffer_filter; + d3d9_config.forced_refresh_rate = config_gfx->forced_refresh_rate; + d3d9_config.device_adapter = config_gfx->device_adapter; + + if (config_gfx->monitor_check == 0) { + log_info("Auto monitor check enabled"); + + d3d9_config.iidx09_to_19_monitor_check_cb = + iidxhook_util_chart_patch_set_refresh_rate; + iidxhook_util_chart_patch_init( + IIDXHOOK_UTIL_CHART_PATCH_TIMEBASE_9_TO_13); + } else if (config_gfx->monitor_check > 0) { + log_info( + "Manual monitor check, resulting refresh rate: %f", + config_gfx->monitor_check); + + iidxhook_util_chart_patch_init( + IIDXHOOK_UTIL_CHART_PATCH_TIMEBASE_9_TO_13); + iidxhook_util_chart_patch_set_refresh_rate(config_gfx->monitor_check); + } + + iidxhook_util_d3d9_configure(&d3d9_config); + + hook_d3d9_init(iidxhook_d3d9_handlers, lengthof(iidxhook_d3d9_handlers)); +} + +static bool +_iidxhook1_main_init(HMODULE game_module, const bt_core_config_t *config) +{ + iidxhook_util_config_ezusb_t config_ezusb; + iidxhook_util_config_eamuse_t config_eamuse; + iidxhook_config_gfx_t config_gfx; + iidxhook_config_misc_t config_misc; + iidxhook_config_sec_t config_sec; + + log_info("iidxhook for 9th Style, 10th Style, RED and HAPPY SKY"); + log_info("build " __DATE__ " " __TIME__ ", gitrev " STRINGIFY(GITREV)); + + iidxhook_util_config_ezusb_get2(config, &config_ezusb); + iidxhook_util_config_eamuse_get2(config, &config_eamuse); + iidxhook_util_config_gfx_get2(config, &config_gfx); + iidxhook_util_config_misc_get2(config, &config_misc); + iidxhook_util_config_sec_get2(config, &config_sec); + + acp_hook_init(); + adapter_hook_init(); + eamuse_hook_init(); + settings_hook_init(); + + /* Round plug security */ + + ezusb_iidx_emu_node_security_plug_set_boot_version( + &config_sec.boot_version); + ezusb_iidx_emu_node_security_plug_set_boot_seeds(config_sec.boot_seeds); + ezusb_iidx_emu_node_security_plug_set_plug_black_mcode( + &config_sec.black_plug_mcode); + ezusb_iidx_emu_node_security_plug_set_pcbid(&config_eamuse.pcbid); + + /* Magnetic card reader (9th to HS) */ + + ezusb_iidx_emu_node_serial_set_card_attributes( + 0, true, config_eamuse.card_type); + + /* eAmusement server IP */ + + eamuse_set_addr(&config_eamuse.server); + eamuse_check_connection(); + + /* Patch rteffect.dll calls */ + + // TODO this doesn't work, because it's too late to apply this here + // this needs to be launched before bm2dx.exe even loads the rteffect.dll + // and runs DllMain of it (see also how this is done with the proxy + // ezusb.dll) + if (config_misc.rteffect_stub) { + effector_hook_init(); + } + + /* Settings paths */ + + if (strlen(config_misc.settings_path) > 0) { + settings_hook_set_path(config_misc.settings_path); + } + + /* Direct3D and USER32 hooks */ + + iidxhook1_setup_d3d9_hooks(&config_gfx); + + /* Disable operator menu clock setting system clock time */ + + if (config_misc.disable_clock_set) { + iidxhook_util_clock_hook_init(); + } + + /* Start up IIDXIO.DLL */ + + log_info("Starting IIDX IO backend"); + + _iidxhook1_io_iidx_init(&iidxhook_module_io_iidx); + + if (!bt_io_iidx_init()) { + log_fatal("Initializing IIDX IO backend failed"); + } + + /* Start up EAMIO.DLL */ + + log_misc("Initializing card reader backend"); + + _iidxhook1_io_eam_init(&iidxhook_module_io_eam); + + if (!bt_io_eam_init()) { + log_fatal("Initializing card reader backend failed"); + } + + /* Set up IO emulation hooks _after_ IO API setup to allow + API implementations with real IO devices */ + iohook_push_handler(ezusb_emu_device_dispatch_irp); + iohook_push_handler(iidxhook_util_chart_patch_dispatch_irp); + iohook_push_handler(settings_hook_dispatch_irp); + + hook_setupapi_init(&ezusb_emu_desc_device.setupapi); + ezusb_emu_device_hook_init( + ezusb_iidx_emu_msg_init(config_ezusb.io_board_type)); + + if (config_ezusb.api_call_monitoring) { + ezusb_log_hook_init(); + ezusb_mon_hook_init(); + } + + log_info("-------------------------------------------------------------"); + log_info("---------------- End iidxhook my_OpenProcess ----------------"); + log_info("-------------------------------------------------------------"); + + return true; +} +static void _iidxhook1_main_fini() +{ + // TODO cleanup +} + +void bt_module_core_config_api_set(const bt_core_config_api_t *api) +{ + bt_core_config_api_set(api); +} + +void bt_module_core_log_api_set(const bt_core_log_api_t *api) +{ + bt_core_log_api_set(api); +} + +void bt_module_core_thread_api_set(const bt_core_thread_api_t *api) +{ + bt_core_thread_api_set(api); +} + +void bt_module_hook_api_get(bt_hook_api_t *api) +{ + api->version = 1; + + api->v1.main_init = _iidxhook1_main_init; + api->v1.main_fini = _iidxhook1_main_fini; +} diff --git a/src/main/iidxhook1/iidxhook1.def b/src/main/iidxhook1/iidxhook1.def index eb7b5ff..b844b19 100644 --- a/src/main/iidxhook1/iidxhook1.def +++ b/src/main/iidxhook1/iidxhook1.def @@ -2,4 +2,9 @@ LIBRARY iidxhook1 EXPORTS DllMain@12 @1 NONAME - \ No newline at end of file + + ; Bemanitools 6 API + bt_module_core_config_api_set + bt_module_core_log_api_set + bt_module_core_thread_api_set + bt_module_hook_api_get \ No newline at end of file diff --git a/src/main/iidxhook1/iidxhook1.h b/src/main/iidxhook1/iidxhook1.h new file mode 100644 index 0000000..3bf4378 --- /dev/null +++ b/src/main/iidxhook1/iidxhook1.h @@ -0,0 +1,14 @@ +#ifndef IIDXHOOK1_H +#define IIDXHOOK1_H + +#include "sdk/module/core/config.h" +#include "sdk/module/core/log.h" +#include "sdk/module/core/thread.h" +#include "sdk/module/hook.h" + +void bt_module_core_config_api_set(const bt_core_config_api_t *api); +void bt_module_core_log_api_set(const bt_core_log_api_t *api); +void bt_module_core_thread_api_set(const bt_core_thread_api_t *api); +void bt_module_hook_api_get(bt_hook_api_t *api); + +#endif \ No newline at end of file diff --git a/src/main/inject/main.c b/src/main/inject/main.c index 6bf3b65..1d28069 100644 --- a/src/main/inject/main.c +++ b/src/main/inject/main.c @@ -31,6 +31,9 @@ int main(int argc, char **argv) config_path = argv[1]; + // Duct-tape to allow access to config path and load config in hook dlls + SetEnvironmentVariable("INJECT_CONFIG_PATH", config_path); + // TODO make configurable // core_property_trace_log_enable(true); // core_property_node_trace_log_enable(true);