Files
djhackersdev_bemanitools/src/main/iidxhook9/fs-hook.c
T

51 lines
1.4 KiB
C

#define LOG_MODULE "fs-hook"
#include <stdint.h>
#include <string.h>
#include "hook/table.h"
#include "imports/avs.h"
#include "iidxhook9/fs-hook.h"
#include "util/log.h"
#include "util/str.h"
static void *(*real_avs_fs_mount)(const char *dest, const char *src, const char *fs_type, const char *options);
static void *my_avs_fs_mount(const char *dest, const char *src, const char *fs_type, const char *options);
static const struct hook_symbol avs_fs_hook_syms[] = {
{.name = "XCgsqzn000004b", // avs_fs_mount
.ordinal = 76,
.patch = my_avs_fs_mount,
.link = (void **) &real_avs_fs_mount},
};
static void *my_avs_fs_mount(const char *dest, const char *src, const char *fs_type, const char *options)
{
// quick check for "F:\"
if (src[0] == 'F' && src[1] == ':' && src[2] == '\0') {
const char* dev_folder_drive = "dev/vfs/drive_f/";
log_misc("Redirecting %s to %s", src, dev_folder_drive);
CreateDirectoryA("dev/vfs/", NULL);
CreateDirectoryA("dev/vfs/drive_f/", NULL);
return real_avs_fs_mount(dest, dev_folder_drive, fs_type, options);
}
return real_avs_fs_mount(dest, src, fs_type, options);
}
void iidxhook9_fs_hooks_init()
{
hook_table_apply(
NULL,
"avs2-core.dll",
avs_fs_hook_syms,
lengthof(avs_fs_hook_syms));
log_info("Inserted avs fs hooks");
}