From 5db4636cf115644ba5fe3a1065eb1c7b1690b5ac Mon Sep 17 00:00:00 2001 From: otavepto <153766569+otavepto@users.noreply.github.com> Date: Wed, 24 Jan 2024 23:11:11 +0200 Subject: [PATCH] updated changelog --- CHANGELOG.md | 12 +- helpers/pe_helpers.cpp | 131 +++++++++--------- .../linux/steamclient_loader.sh | 8 +- 3 files changed, 79 insertions(+), 72 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index e28b0942..959dfae3 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,7 +1,7 @@ +* added new options to the overlay to allow copying a friend's ID, plus current player ID +* added a new option to the overlay to invite all friends playing the same game * addded new `auto_accept_invite.txt` setting to automatically accept game/lobby invites from this list, each SteamID64 on a separate line - also you can leave the file empty to accept invitations from anyone -* fixed the condition of `warn_forced_setting`, previously it may be reset back to `false` accidentally -* deprecated `disable_overlay_warning.txt` in `steam_settings` folder in favor of new options/files + also you can leave the file empty to accept invitations from anyone, check the updated release readme * added new `disable_overlay_warning_*.txt` settings to disable certain or all warnings in the overlay * `disable_overlay_warning_forced_setting.txt`: - disable the warning for the usage of any file `force_*.txt` in the overlay @@ -9,6 +9,12 @@ * `disable_overlay_warning_bad_appid.txt`: disable the warning for bad app ID (when app ID = 0) in the overlay * `disable_overlay_warning_local_save.txt`: disable the warning for using local save in the overlay * `disable_overlay_warning_any.txt`: all the above +* **deprecated** `disable_overlay_warning.txt` in `steam_settings` folder in favor of new the options/files +* added more Stub variants +* fixed the condition of `warn_forced_setting`, previously it may be reset back to `false` accidentally +* fixed a casting mistake when displaying friend ID +* avoid spam loading the achievements forever on failure, only try 3 times +* removed a debug flag in `UGC::GetItemState()` left by mistake --- diff --git a/helpers/pe_helpers.cpp b/helpers/pe_helpers.cpp index 6274db32..e573abbe 100644 --- a/helpers/pe_helpers.cpp +++ b/helpers/pe_helpers.cpp @@ -275,83 +275,84 @@ PIMAGE_SECTION_HEADER pe_helpers::get_section_header_with_name(HMODULE hModule, return nullptr; } -DWORD pe_helpers::loadlib_remote(HANDLE hProcess, const std::wstring &lib_fullpath, const char** err_reason) { - - // create a remote page - const size_t lib_path_str_bytes = lib_fullpath.size() * sizeof(lib_fullpath[0]); - LPVOID lib_remote_page = VirtualAllocEx( +DWORD pe_helpers::loadlib_remote(HANDLE hProcess, const std::wstring &lib_fullpath, const char** err_reason) +{ + // create a remote page + const size_t lib_path_str_bytes = lib_fullpath.size() * sizeof(lib_fullpath[0]); + LPVOID lib_remote_page = VirtualAllocEx( hProcess, NULL, lib_path_str_bytes + sizeof(lib_fullpath[0]) * 2, // *2 just to be safe MEM_RESERVE | MEM_COMMIT, PAGE_READWRITE - ); + ); - if (!lib_remote_page) { - if (err_reason) { - *err_reason = "Failed to remotely allocate page with VirtualAllocEx()"; + if (!lib_remote_page) { + if (err_reason) { + *err_reason = "Failed to remotely allocate page with VirtualAllocEx()"; + } + return GetLastError(); } - return GetLastError(); - } - SIZE_T bytes_written = 0; - BOOL written = WriteProcessMemory( - hProcess, - lib_remote_page, - (LPCVOID)&lib_fullpath[0], - lib_path_str_bytes, - &bytes_written - ); + SIZE_T bytes_written = 0; + BOOL written = WriteProcessMemory( + hProcess, + lib_remote_page, + (LPCVOID)&lib_fullpath[0], + lib_path_str_bytes, + &bytes_written + ); + + if (!written || bytes_written < lib_path_str_bytes) { + // cleanup allcoated page + VirtualFreeEx( + hProcess, + lib_remote_page, + 0, + MEM_RELEASE); + + if (err_reason) { + *err_reason = "Failed to remotely write dll path with WriteProcessMemory()"; + } + return GetLastError(); + } + + // call LoadLibraryW() and pass the dll fullpath + HANDLE remote_thread = CreateRemoteThread( + hProcess, + NULL, + 0, + (LPTHREAD_START_ROUTINE)LoadLibraryW, + lib_remote_page, + 0, + NULL); + + if (!remote_thread) { + // cleanup allcoated page + VirtualFreeEx( + hProcess, + lib_remote_page, + 0, + MEM_RELEASE); + + if (err_reason) { + *err_reason = "Failed to create/run remote thread with CreateRemoteThread()"; + } + return GetLastError(); + } + + // wait for DllMain + WaitForSingleObject(remote_thread, INFINITE); + CloseHandle(remote_thread); - if (!written || bytes_written < lib_path_str_bytes) { // cleanup allcoated page VirtualFreeEx( - hProcess, - lib_remote_page, - 0, - MEM_RELEASE); + hProcess, + lib_remote_page, + 0, + MEM_RELEASE); - if (err_reason) { - *err_reason = "Failed to remotely write dll path with WriteProcessMemory()"; - } - return GetLastError(); - } - - // call LoadLibraryA() and pass "launc.dll" - HANDLE remote_thread = CreateRemoteThread( - hProcess, - NULL, - 0, - (LPTHREAD_START_ROUTINE)LoadLibraryW, - lib_remote_page, - 0, - NULL); - - if (!remote_thread) { - // cleanup allcoated page - VirtualFreeEx( - hProcess, - lib_remote_page, - 0, - MEM_RELEASE); - - if (err_reason) { - *err_reason = "Failed to create/run remote thread with CreateRemoteThread()"; - } - return GetLastError(); - } - - WaitForSingleObject(remote_thread, INFINITE); - CloseHandle(remote_thread); - - // cleanup allcoated page - VirtualFreeEx( - hProcess, - lib_remote_page, - 0, - MEM_RELEASE); - - return ERROR_SUCCESS; + return ERROR_SUCCESS; } size_t pe_helpers::get_pe_size(HMODULE hModule) diff --git a/tools/steamclient_loader/linux/steamclient_loader.sh b/tools/steamclient_loader/linux/steamclient_loader.sh index df433eb8..bd740ab3 100644 --- a/tools/steamclient_loader/linux/steamclient_loader.sh +++ b/tools/steamclient_loader/linux/steamclient_loader.sh @@ -50,12 +50,12 @@ function help_page () { # mandatory checks if [[ ! -f "$script_dir/${STEAM_CLIENT_SO}" ]]; then - echo "'$STEAM_CLIENT_SO' must be placed beside this script" - exit 1 + echo "'$STEAM_CLIENT_SO' must be placed beside this script" + exit 1 fi if [ ! -f "$script_dir/${STEAM_CLIENT64_SO}" ]; then - echo "'$STEAM_CLIENT64_SO' must be placed beside this script" - exit 1 + echo "'$STEAM_CLIENT64_SO' must be placed beside this script" + exit 1 fi # no args = help page