From 79cf7d20cc66ca105bd0cec986f569cc206ea809 Mon Sep 17 00:00:00 2001 From: mkrsym1 Date: Sat, 5 Aug 2023 12:15:08 +0300 Subject: [PATCH] Finish integrating TX --- game_payload/blob/core.o | Bin 4221 -> 7482 bytes game_payload/include/core.h | 2 +- game_payload/src/main.c | 14 +++++--------- injector/src/dll.c | 17 +++++++---------- 4 files changed, 13 insertions(+), 20 deletions(-) diff --git a/game_payload/blob/core.o b/game_payload/blob/core.o index b4e13edd0921676345cbe1f2a0ac247c5a6cb006..56fe10ea2e3eb001461df772bbb2d471873d0b8e 100644 GIT binary patch literal 7482 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 BvvU9d diff --git a/game_payload/include/core.h b/game_payload/include/core.h index 46e33c7..ff92423 100644 --- a/game_payload/include/core.h +++ b/game_payload/include/core.h @@ -6,4 +6,4 @@ void core_setup_patcher(struct game_data *game, HMODULE baseModule, wchar_t *txFile); -void *core_perform_tx(size_t *outLength); +void *core_perform_tx(struct game_data *game, size_t *outLength); diff --git a/game_payload/src/main.c b/game_payload/src/main.c index c0d6d79..0cb9e93 100644 --- a/game_payload/src/main.c +++ b/game_payload/src/main.c @@ -26,15 +26,11 @@ void unload_ctr_dec() { } void request_restart() { - HANDLE hRestartFlag = OpenFileMappingA(FILE_MAP_ALL_ACCESS, FALSE, "Global\\JadeiteRestartFlag"); - int *restartFlag = MapViewOfFile(hRestartFlag, FILE_MAP_ALL_ACCESS, 0, 0, sizeof(int)); - if (!restartFlag) { - msg_err_a("Could not map shared memory to set restart flag"); - } + wchar_t restartFlagFile[MAX_PATH]; + GetTempPathW(MAX_PATH, restartFlagFile); + wcscat(restartFlagFile, L"jadeite\\restart_flag"); - *restartFlag = 1; - - UnmapViewOfFile(restartFlag); + HANDLE hRestartFlag = CreateFileW(restartFlagFile, FILE_WRITE_ACCESS, FILE_SHARE_READ, NULL, CREATE_NEW, FILE_ATTRIBUTE_NORMAL, NULL); CloseHandle(hRestartFlag); } @@ -63,7 +59,7 @@ static void _run_tx(struct game_data *game, wchar_t *txFile) { // ...more magic size_t tableSize; - void *table = core_perform_tx(&tableSize); + void *table = core_perform_tx(game, &tableSize); // Save to file utils_create_dir_recursively(txFile); diff --git a/injector/src/dll.c b/injector/src/dll.c index e1857ce..6aa4c75 100644 --- a/injector/src/dll.c +++ b/injector/src/dll.c @@ -61,13 +61,10 @@ BOOL WINAPI DllMain(HINSTANCE inst, DWORD reason, LPVOID reserved) { MessageBoxW(NULL, L"Could not find wine_get_unix_file_name! Wine version too old?", J_MB_TITLE, MB_OK | MB_ICONWARNING); } - // Create shared memory for the restart flag - HANDLE hRestartFlag = CreateFileMappingA(INVALID_HANDLE_VALUE, NULL, PAGE_READWRITE, 0, sizeof(int), "Global\\JadeiteRestartFlag"); - int *restartFlag = MapViewOfFile(hRestartFlag, FILE_MAP_ALL_ACCESS, 0, 0, sizeof(int)); - if (!restartFlag) { - MessageBoxW(NULL, L"Failed to create shared memory!", J_MB_TITLE, MB_OK | MB_ICONERROR); - exit(1); - } + // Get restart flag file path + wchar_t restartFlagFile[MAX_PATH]; + GetTempPathW(MAX_PATH, restartFlagFile); + wcscat(restartFlagFile, L"jadeite\\restart_flag"); do { // Start the game @@ -102,8 +99,8 @@ BOOL WINAPI DllMain(HINSTANCE inst, DWORD reason, LPVOID reserved) { size_t payloadSize = (size_t)&_binary_game_p_o_p_game_p_bin_size; inject(pi.hProcess, payloadStart, payloadSize, injectDll); - // Clear the restart flag - *restartFlag = 0; + // Remove the restart flag file + DeleteFileW(restartFlagFile); // Optional: wait for user input before resuming (useful for debugging) char *waitEnabled = getenv("WAIT_BEFORE_RESUME"); @@ -118,7 +115,7 @@ BOOL WINAPI DllMain(HINSTANCE inst, DWORD reason, LPVOID reserved) { // The launcher process should now hang untill the game terminates WaitForSingleObject(pi.hProcess, INFINITE); - } while (*restartFlag); + } while (GetFileAttributesW(restartFlagFile) != INVALID_FILE_ATTRIBUTES); return TRUE; }