Исправь код таким образом, чтобы при каждом инжекте файл patcher_log.txt перезаписывался заново, а не добавлял новые строки в файле:
#include "pch.h"
#include <Windows.h>
#include <tlhelp32.h>
#include <psapi.h>
#include <fstream>
#include <vector>
#include <string>
#include <memory>
#include <thread>

std::ofstream logFile("patcher_log.txt", std::ios::out | std::ios::app);

bool PatchProcess(DWORD processID) {
    HANDLE hProcess = OpenProcess(PROCESS_VM_OPERATION | PROCESS_VM_READ | PROCESS_VM_WRITE, FALSE, processID);
    if (!hProcess) {
        logFile << "Failed to open the target process." << std::endl;
        return false;
    }
    auto processCloser = std::shared_ptr<void>(
        hProcess,
        [](HANDLE handle) {
            CloseHandle(handle);
        }
    );

    BYTE signatureBytes[] = { 0x85, 0xC0, 0x74, 0x57, 0x5F, 0xB8, 0x01 };
    BYTE patchByte = 0x00;
    MEMORY_BASIC_INFORMATION mbi{ 0 };
    bool success = false;

    for (BYTE* addr = nullptr; VirtualQueryEx(hProcess, addr, &mbi, sizeof(mbi)) && addr < (BYTE*)0x7FFFFFFF; addr += mbi.RegionSize) {
        if (mbi.State == MEM_COMMIT && (mbi.Protect == PAGE_EXECUTE_READWRITE || mbi.Protect == PAGE_EXECUTE_READ)) {
            std::vector<BYTE> buffer(mbi.RegionSize);
            SIZE_T bytesRead;
            if (ReadProcessMemory(hProcess, mbi.BaseAddress, buffer.data(), mbi.RegionSize, &bytesRead)) {
                for (size_t j = 0; j < bytesRead - sizeof(signatureBytes); ++j) {
                    if (memcmp(buffer.data() + j, signatureBytes, sizeof(signatureBytes)) == 0) {
                        DWORD oldProtect;
                        if (VirtualProtectEx(hProcess, addr + j + sizeof(signatureBytes) - 1, 1, PAGE_EXECUTE_READWRITE, &oldProtect)) {
                            if (WriteProcessMemory(hProcess, addr + j + sizeof(signatureBytes) - 1, &patchByte, 1, nullptr)) {
                                VirtualProtectEx(hProcess, addr + j + sizeof(signatureBytes) - 1, 1, oldProtect, &oldProtect);
                                logFile << "Signature patched." << std::endl;
                                success = true;
                                return success;
                            }
                        }
                    }
                }
            }
        }
    }
    return success;
}

void AttemptToPatch(DWORD currentPID) {
    logFile << "Attempting to patch current process ID : " << currentPID << " in a separate thread." << std::endl;

    while (true) {
        if (PatchProcess(currentPID)) {
            logFile << "Current process patched successfully." << std::endl;
            break;
        }
        else {
            logFile << "Failed to patch the current process.Retrying…" << std::endl;
            std::this_thread::sleep_for(std::chrono::seconds(5));  // Pause before retrying
        }
    }
}

DWORD WINAPI MonitorProcess(LPVOID lpParam) {
    DWORD currentPID = GetCurrentProcessId();

    // Spin off a separate thread to attempt patching without blocking
    std::thread patcherThread(AttemptToPatch, currentPID);
    patcherThread.detach(); // Let the thread run independently

    return 0;
}

extern "C" BOOL APIENTRY DllMain(HMODULE hModule, DWORD ul_reason_for_call, LPVOID lpReserved) {
    switch (ul_reason_for_call) {
    case DLL_PROCESS_ATTACH:
        logFile << "DLL injected." << std::endl;
        DisableThreadLibraryCalls(hModule);
        CreateThread(nullptr, 0, MonitorProcess, nullptr, 0, nullptr);
        break;
    case DLL_THREAD_ATTACH:
    case DLL_THREAD_DETACH:
    case DLL_PROCESS_DETACH:
        break;
    }
    return TRUE;
}