diff --git a/cardhook/dllmain.c b/cardhook/dllmain.c new file mode 100644 index 0000000..3c979e6 --- /dev/null +++ b/cardhook/dllmain.c @@ -0,0 +1,48 @@ +#include + +#include + +#include "board/config.h" +#include "board/sg-reader.h" + +#include "hook/process.h" + +#include "hooklib/serial.h" +#include "hooklib/spike.h" + +#include "util/dprintf.h" + +// Emulating an AiMe reader is the only thing this hook DLL does +static const struct aime_config app_aime_config = { .enable = true }; +static process_entry_t app_startup; + +static DWORD CALLBACK app_pre_startup(void) +{ + dprintf("--- Begin %s ---\n", __func__); + + spike_hook_init("cardspike.txt"); + + serial_hook_init(); + sg_reader_hook_init(&app_aime_config, 12); + + dprintf("--- End %s ---\n", __func__); + + return app_startup(); +} + +BOOL WINAPI DllMain(HMODULE mod, DWORD cause, void *ctx) +{ + HRESULT hr; + + if (cause != DLL_PROCESS_ATTACH) { + return TRUE; + } + + hr = process_hijack_startup(app_pre_startup, &app_startup); + + if (!SUCCEEDED(hr)) { + dprintf("Failed to hijack process startup: %x\n", (int) hr); + } + + return SUCCEEDED(hr); +} diff --git a/cardhook/meson.build b/cardhook/meson.build new file mode 100644 index 0000000..6573f7a --- /dev/null +++ b/cardhook/meson.build @@ -0,0 +1,20 @@ +shared_library( + 'cardhook', + name_prefix : '', + include_directories: inc, + implicit_include_directories : false, + c_pch : '../precompiled.h', + dependencies : [ + capnhook.get_variable('hook_dep'), + capnhook.get_variable('hooklib_dep'), + ], + link_with : [ + aimeio_dll, + board_lib, + hooklib_lib, + util_lib, + ], + sources : [ + 'dllmain.c', + ], +) diff --git a/meson.build b/meson.build index 89df928..f3b2d53 100644 --- a/meson.build +++ b/meson.build @@ -42,6 +42,7 @@ subdir('chuniio') subdir('divaio') subdir('idzio') +subdir('cardhook') subdir('chunihook') subdir('divahook') subdir('idzhook')