Get rid of the runner

This commit is contained in:
momo5502 2022-11-11 16:21:24 +01:00
parent 89898c974e
commit 13be8f3894
11 changed files with 39 additions and 168 deletions

View File

@ -299,7 +299,7 @@ project "client"
resincludedirs {"$(ProjectDir)src"} resincludedirs {"$(ProjectDir)src"}
dependson {"tlsdll", "runner"} dependson {"tlsdll"}
links {"common"} links {"common"}
@ -324,20 +324,5 @@ project "tlsdll"
resincludedirs {"$(ProjectDir)src"} resincludedirs {"$(ProjectDir)src"}
project "runner"
kind "WindowedApp"
language "C++"
files {"./src/runner/**.rc", "./src/runner/**.hpp", "./src/runner/**.cpp", "./src/runner/resources/**.*"}
includedirs {"./src/runner", "./src/common", "%{prj.location}/src"}
links {"common"}
resincludedirs {"$(ProjectDir)src"}
dependencies.imports()
group "Dependencies" group "Dependencies"
dependencies.projects() dependencies.projects()

View File

@ -444,7 +444,7 @@ namespace demonware
class component final : public component_interface class component final : public component_interface
{ {
public: public:
component() void pre_load() override
{ {
udp_servers.create<stun_server>("stun.us.demonware.net"); udp_servers.create<stun_server>("stun.us.demonware.net");
udp_servers.create<stun_server>("stun.eu.demonware.net"); udp_servers.create<stun_server>("stun.eu.demonware.net");

View File

@ -196,7 +196,7 @@ namespace exception
class component final : public component_interface class component final : public component_interface
{ {
public: public:
component() void pre_load() override
{ {
main_thread_id = GetCurrentThreadId(); main_thread_id = GetCurrentThreadId();
SetUnhandledExceptionFilter(exception_filter); SetUnhandledExceptionFilter(exception_filter);

View File

@ -56,9 +56,10 @@ namespace splash
class component final : public component_interface class component final : public component_interface
{ {
public: public:
component() void pre_load() override
: image_(load_splash_image())
{ {
this->image_ = load_splash_image();
enable_dpi_awareness(); enable_dpi_awareness();
window_thread = std::thread([this] window_thread = std::thread([this]
{ {
@ -66,19 +67,15 @@ namespace splash
}); });
} }
~component() void pre_destroy() override
{ {
destroy_window();
if (window_thread.joinable()) if (window_thread.joinable())
{ {
window_thread.detach(); window_thread.detach();
} }
} }
void pre_destroy() override
{
destroy_window();
}
void post_unpack() override void post_unpack() override
{ {
destroy_window(); destroy_window();

View File

@ -19,8 +19,6 @@ namespace steam_proxy
{ {
namespace namespace
{ {
utils::binary_resource runner_file(RUNNER, "boiii-runner.exe");
utils::nt::library steam_client_module{}; utils::nt::library steam_client_module{};
utils::nt::library steam_overlay_module{}; utils::nt::library steam_overlay_module{};
@ -155,7 +153,8 @@ namespace steam_proxy
char our_directory[MAX_PATH] = {0}; char our_directory[MAX_PATH] = {0};
GetCurrentDirectoryA(sizeof(our_directory), our_directory); GetCurrentDirectoryA(sizeof(our_directory), our_directory);
const auto path = runner_file.get_extracted_file(); const auto self = utils::nt::library::get_by_address(start_mod_unsafe);
const auto path = self.get_path();
const std::string cmdline = utils::string::va("\"%s\" -proc %d", path.data(), GetCurrentProcessId()); const std::string cmdline = utils::string::va("\"%s\" -proc %d", path.data(), GetCurrentProcessId());
steam::game_id game_id; steam::game_id game_id;

View File

@ -130,7 +130,7 @@ namespace updater
class component final : public component_interface class component final : public component_interface
{ {
public: public:
component() void pre_load() override
{ {
cleanup_update(); cleanup_update();
@ -140,14 +140,6 @@ namespace updater
}); });
} }
~component() override
{
if (this->update_thread_.joinable())
{
this->update_thread_.detach();
}
}
void pre_destroy() override void pre_destroy() override
{ {
join(); join();

View File

@ -138,14 +138,40 @@ namespace
return FARPROC(proc.get_ptr() + proc.get_relative_entry_point()); return FARPROC(proc.get_ptr() + proc.get_relative_entry_point());
} }
bool handle_process_runner()
{
const auto* const command = "-proc ";
const char* parent_proc = strstr(GetCommandLineA(), command);
if (!parent_proc)
{
return false;
}
const auto pid = DWORD(atoi(parent_proc + strlen(command)));
const utils::nt::handle<> process_handle = OpenProcess(SYNCHRONIZE, FALSE, pid);
if (process_handle)
{
WaitForSingleObject(process_handle, INFINITE);
}
return true;
}
int main() int main()
{ {
if (handle_process_runner())
{
TerminateProcess(GetCurrentProcess(), 0);
return 0;
}
FARPROC entry_point{}; FARPROC entry_point{};
srand(uint32_t(time(nullptr)) ^ ~(GetTickCount() * GetCurrentProcessId())); srand(uint32_t(time(nullptr)) ^ ~(GetTickCount() * GetCurrentProcessId()));
{ {
auto premature_shutdown = true; auto premature_shutdown = true;
const auto _ = utils::finally([&premature_shutdown]() const auto _ = utils::finally([&premature_shutdown]
{ {
if (premature_shutdown) if (premature_shutdown)
{ {

View File

@ -12,5 +12,4 @@
#define DW_KEYS 306 #define DW_KEYS 306
#define DW_QOSCONFIG 307 #define DW_QOSCONFIG 307
#define RUNNER 308 #define TLS_DLL 308
#define TLS_DLL 309

View File

@ -102,12 +102,6 @@ DW_FASTFILE RCDATA "resources/dw/core_ffotd_tu32_593.ff"
DW_KEYS RCDATA "resources/dw/keys.txt" DW_KEYS RCDATA "resources/dw/keys.txt"
DW_QOSCONFIG RCDATA "resources/dw/qosconfig4.csv" DW_QOSCONFIG RCDATA "resources/dw/qosconfig4.csv"
#ifdef _DEBUG
RUNNER RCDATA "../../build/bin/x64/Debug/runner.exe"
#else
RUNNER RCDATA "../../build/bin/x64/Release/runner.exe"
#endif
#ifdef _DEBUG #ifdef _DEBUG
TLS_DLL RCDATA "../../build/bin/x64/Debug/tlsdll.dll" TLS_DLL RCDATA "../../build/bin/x64/Debug/tlsdll.dll"
#else #else

View File

@ -1,100 +0,0 @@
// Microsoft Visual C++ generated resource script.
//
#pragma code_page(65001)
#define APSTUDIO_READONLY_SYMBOLS
/////////////////////////////////////////////////////////////////////////////
//
// Generated from the TEXTINCLUDE 2 resource.
//
#include "windows.h"
/////////////////////////////////////////////////////////////////////////////
#undef APSTUDIO_READONLY_SYMBOLS
/////////////////////////////////////////////////////////////////////////////
// English (United States) resources
#if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_ENU)
LANGUAGE LANG_ENGLISH, SUBLANG_ENGLISH_US
#ifdef APSTUDIO_INVOKED
/////////////////////////////////////////////////////////////////////////////
//
// TEXTINCLUDE
//
1 TEXTINCLUDE
BEGIN
"#include ""windows.h""\r\n"
"\0"
END
2 TEXTINCLUDE
BEGIN
"\r\n"
"\0"
END
#endif // APSTUDIO_INVOKED
/////////////////////////////////////////////////////////////////////////////
//
// Version
//
VS_VERSION_INFO VERSIONINFO
FILEVERSION 1,0,0,0
PRODUCTVERSION 1,0,0,0
FILEFLAGSMASK 0x3fL
#ifdef _DEBUG
FILEFLAGS 0x1L
#else
FILEFLAGS 0x0L
#endif
FILEOS 0x40004L
FILETYPE VFT_DLL
FILESUBTYPE 0x0L
BEGIN
BLOCK "StringFileInfo"
BEGIN
BLOCK "040904b0"
BEGIN
VALUE "CompanyName", "X Labs"
VALUE "FileDescription", "Steam mod runner"
VALUE "FileVersion", "1.0.0.0"
VALUE "InternalName", "Runner"
VALUE "LegalCopyright", "All rights reserved."
VALUE "OriginalFilename", "runner.exe"
VALUE "ProductName", "runner"
VALUE "ProductVersion", "1.0.0.0"
END
END
BLOCK "VarFileInfo"
BEGIN
VALUE "Translation", 0x409, 1200
END
END
/////////////////////////////////////////////////////////////////////////////
//
// Binary Data
//
102 ICON "../client/resources/icon.ico"
#endif // English (United States) resources
/////////////////////////////////////////////////////////////////////////////
#ifndef APSTUDIO_INVOKED
/////////////////////////////////////////////////////////////////////////////
//
// Generated from the TEXTINCLUDE 3 resource.
//
/////////////////////////////////////////////////////////////////////////////
#endif // not APSTUDIO_INVOKED

View File

@ -1,21 +0,0 @@
#include <utils/nt.hpp>
#include <cstdlib>
int __stdcall WinMain(HINSTANCE, HINSTANCE, PSTR, int)
{
const auto* const command = "-proc ";
const char* parent_proc = strstr(GetCommandLineA(), command);
if (parent_proc)
{
const auto pid = DWORD(atoi(parent_proc + strlen(command)));
const utils::nt::handle<> process_handle = OpenProcess(SYNCHRONIZE, FALSE, pid);
if (process_handle)
{
WaitForSingleObject(process_handle, INFINITE);
return 0;
}
}
return 1;
}