aboutsummaryrefslogtreecommitdiff
path: root/main.c
diff options
context:
space:
mode:
authorGravatar Matthew Wozniak <me@woz.blue> 2024-10-27 23:28:51 -0400
committerGravatar Matthew Wozniak <me@woz.blue> 2024-10-27 23:28:51 -0400
commitfb95177298bb92098b61f09b9f66c1fce32f2f02 (patch)
treec73b45c91f145dca7d055a1cde1f4efaa6db8da6 /main.c
parent36b6d84ee4b520bdf43891ea86df03cf660cb464 (diff)
downloadrt-fb95177298bb92098b61f09b9f66c1fce32f2f02.tar.gz
rt-fb95177298bb92098b61f09b9f66c1fce32f2f02.zip
add hooking and IVEngineServer interface
Diffstat (limited to 'main.c')
-rw-r--r--main.c29
1 files changed, 27 insertions, 2 deletions
diff --git a/main.c b/main.c
index ae79d3b..e16786e 100644
--- a/main.c
+++ b/main.c
@@ -1,11 +1,32 @@
// SPDX-License-Identifier: ISC
// SPDX-FileCopyrightText: 2024 Matthew Wozniak <me@woz.blue>
-#include "os.h"
+#include "api.h"
+#include "hook.h"
#include "log.h"
+#include "os.h"
-#include <Windows.h>
#include <stddef.h>
+#define WIN32_LEAN_AND_MEAN
+#include <Windows.h>
+
+void *(WINAPI *orig_LoadLibraryExA)(const char *, void *, int);
+void WINAPI *hook_LoadLibraryExA(const char *filename, void *hfile, int flags) {
+ void *ret = orig_LoadLibraryExA(filename, hfile, flags);
+ if (!ret) return ret;
+ // cut down to basename
+ const char *basename = filename;
+ for (const char *p = filename; *p; p++)
+ if (*p == '\\') basename = p + 1;
+ info("loaded %s", basename);
+
+ // last dll to load
+ if (!strcmp(basename, "serverbrowser.dll")) {
+ api_init();
+ // TODO: figure out hooks that run AFTER valve.rc is called
+ }
+ return ret;
+}
typedef int (*LauncherMain_t)(void *instance, void *prev_inst, char *cmdline,
int cmd_show);
@@ -17,6 +38,10 @@ int main(int argc, char **argv) {
LauncherMain_t launcher_main =
(LauncherMain_t)os_dlsym(launcher_dll, "LauncherMain");
+ hook_init();
+ orig_LoadLibraryExA = (typeof(orig_LoadLibraryExA))hook_dllapi("kernel32",
+ "LoadLibraryExA", (void *)hook_LoadLibraryExA);
+
if (!launcher_main) die("couldn't open launcher");
launcher_main(NULL, NULL, NULL, 0);
}