From 1d83da1c80c26cce1bff6b1bee6e067bc1ebbbca Mon Sep 17 00:00:00 2001 From: Matthew Asplund Date: Wed, 5 Aug 2020 10:21:58 -0700 Subject: [PATCH] Kill child process (#57) * Kill child process on detour error * Update version --- Source/Client/CLI/Commands/VersionCommand.h | 2 +- Source/Client/CLI/Recipe.toml | 2 +- Source/Monitor/Detours/EventLogger.h | 21 ++++++++++++++------- Source/Monitor/Detours/Module.cpp | 4 ++++ 4 files changed, 20 insertions(+), 9 deletions(-) diff --git a/Source/Client/CLI/Commands/VersionCommand.h b/Source/Client/CLI/Commands/VersionCommand.h index 33aea464..daf9f4cb 100644 --- a/Source/Client/CLI/Commands/VersionCommand.h +++ b/Source/Client/CLI/Commands/VersionCommand.h @@ -31,7 +31,7 @@ namespace Soup::Client // TODO var version = Assembly.GetExecutingAssembly().GetName().Version; // Log::Message($"{version.Major}.{version.Minor}.{version.Build}"); - Log::HighPriority("0.8.4"); + Log::HighPriority("0.8.5"); } private: diff --git a/Source/Client/CLI/Recipe.toml b/Source/Client/CLI/Recipe.toml index f375ea42..bcc3cecb 100644 --- a/Source/Client/CLI/Recipe.toml +++ b/Source/Client/CLI/Recipe.toml @@ -1,5 +1,5 @@ Name = "Soup" -Version = "0.8.4" +Version = "0.8.5" Type = "Executable" # Ensure the core build extensions are runtime dependencies diff --git a/Source/Monitor/Detours/EventLogger.h b/Source/Monitor/Detours/EventLogger.h index 731cbf13..933181ed 100644 --- a/Source/Monitor/Detours/EventLogger.h +++ b/Source/Monitor/Detours/EventLogger.h @@ -20,12 +20,13 @@ class EventLogger static void Shutdown() { auto lock = std::lock_guard(s_pipeMutex); + Monitor::DetourMessage message; + message.Type = Monitor::DetourMessageType::Info_Shutdown; + message.ContentSize = 0; + UnsafeWriteMessage(message); + if (s_pipeHandle != INVALID_HANDLE_VALUE) { - Monitor::DetourMessage message; - message.Type = Monitor::DetourMessageType::Info_Shutdown; - message.ContentSize = 0; - UnsafeWriteMessage(message); FlushFileBuffers(s_pipeHandle); CloseHandle(s_pipeHandle); s_pipeHandle = INVALID_HANDLE_VALUE; @@ -122,11 +123,13 @@ class EventLogger static void WriteError(std::string_view value) { + printf("DETOURS-ERROR: %s\n", value.data()); + Monitor::DetourMessage message; message.Type = Monitor::DetourMessageType::Info_Error; message.ContentSize = 0; AppendValue(message, value.data()); - UnsafeWriteMessage(message); + WriteMessage(message); } static void WriteMessage(const Monitor::DetourMessage& message) @@ -194,11 +197,15 @@ class EventLogger &countBytesWritten, nullptr)) { - throw std::runtime_error("Failed write event logger"); + printf("DETOURS-ERROR: Failed write event logger\n", (uint32_t)message.Type); + exit(-1234); } if (countBytesWritten != countBytesToWrite) - throw std::runtime_error("Did not write the expected number of bytes"); + { + printf("Did not write the expected number of bytes\n", (uint32_t)message.Type); + exit(-1234); + } } private: diff --git a/Source/Monitor/Detours/Module.cpp b/Source/Monitor/Detours/Module.cpp index 6b984f02..65f9cb92 100644 --- a/Source/Monitor/Detours/Module.cpp +++ b/Source/Monitor/Detours/Module.cpp @@ -544,10 +544,12 @@ bool ProcessAttach(HMODULE hDll) catch (const std::exception& ex) { EventLogger::WriteError(ex.what()); + exit(-1234); } catch (...) { EventLogger::WriteError("Unknown error attaching detours"); + exit(-1234); } ThreadAttach(hDll); @@ -566,10 +568,12 @@ bool ProcessDetach(HMODULE hDll) catch (const std::exception& ex) { EventLogger::WriteError(ex.what()); + exit(-1234); } catch (...) { EventLogger::WriteError("Unknown error detaching detours"); + exit(-1234); } EventLogger::Shutdown();