1
0
mirror of https://github.com/narzoul/DDrawCompat synced 2024-12-30 08:55:36 +01:00

Separate log files per process name and instance number

This commit is contained in:
narzoul 2020-05-05 23:59:21 +02:00
parent 757f648385
commit c67437d5bf
7 changed files with 51 additions and 41 deletions

View File

@ -144,14 +144,14 @@ namespace
GetModuleHandleEx(GET_MODULE_HANDLE_EX_FLAG_FROM_ADDRESS,
static_cast<char*>(hookedFuncPtr), &module);
Compat::LogDebug() << "Hooking function: " << funcName << " (" << funcAddrToStr(hookedFuncPtr) << ')';
LOG_DEBUG << "Hooking function: " << funcName << " (" << funcAddrToStr(hookedFuncPtr) << ')';
DetourTransactionBegin();
const bool attachSuccessful = NO_ERROR == DetourAttach(&origFuncPtr, newFuncPtr);
const bool commitSuccessful = NO_ERROR == DetourTransactionCommit();
if (!attachSuccessful || !commitSuccessful)
{
Compat::LogDebug() << "ERROR: Failed to hook a function: " << funcName;
LOG_DEBUG << "ERROR: Failed to hook a function: " << funcName;
return;
}
@ -270,7 +270,7 @@ namespace Compat
FARPROC procAddr = getProcAddress(module, funcName);
if (!procAddr)
{
Compat::LogDebug() << "ERROR: Failed to load the address of a function: " << funcName;
LOG_DEBUG << "ERROR: Failed to load the address of a function: " << funcName;
return;
}
@ -294,7 +294,7 @@ namespace Compat
FARPROC* func = findProcAddressInIat(module, importedModuleName, funcName);
if (func)
{
Compat::LogDebug() << "Hooking function via IAT: " << funcName << " (" << funcAddrToStr(*func) << ')';
LOG_DEBUG << "Hooking function via IAT: " << funcName << " (" << funcAddrToStr(*func) << ')';
DWORD oldProtect = 0;
VirtualProtect(func, sizeof(func), PAGE_READWRITE, &oldProtect);
*func = static_cast<FARPROC>(newFuncPtr);

View File

@ -1,3 +1,5 @@
#include <sstream>
#include <Common/Log.h>
namespace
@ -74,9 +76,30 @@ namespace Compat
s_logFile << std::endl;
}
void Log::initLogging()
void Log::initLogging(std::string processName)
{
s_logFile.open("ddraw.log");
if (processName.length() >= 4 &&
0 == _strcmpi(processName.substr(processName.length() - 4).c_str(), ".exe"))
{
processName.resize(processName.length() - 4);
}
for (int i = 1; i < 100; ++i)
{
std::ostringstream logFileName;
logFileName << "DDrawCompat-" << processName;
if (i > 1)
{
logFileName << '[' << i << ']';
}
logFileName << ".log";
s_logFile.open(logFileName.str(), std::ios_base::out, SH_DENYWR);
if (!s_logFile.fail())
{
return;
}
}
}
thread_local DWORD Log::s_indent = 0;

View File

@ -3,6 +3,7 @@
#include <fstream>
#include <functional>
#include <ostream>
#include <string>
#include <type_traits>
#include <Windows.h>
@ -11,8 +12,15 @@
#include <DDraw/Log.h>
#include <Win32/Log.h>
#ifdef DEBUGLOGS
#define LOG_DEBUG Compat::Log()
#define LOG_FUNC(...) Compat::LogFunc logFunc(__VA_ARGS__)
#define LOG_RESULT(...) logFunc.setResult(__VA_ARGS__)
#else
#define LOG_DEBUG if (false) Compat::Log()
#define LOG_FUNC(...)
#define LOG_RESULT(...) __VA_ARGS__
#endif
#define LOG_ONCE(msg) \
{ \
@ -145,7 +153,7 @@ namespace Compat
return *this;
}
static void initLogging();
static void initLogging(std::string processName);
static bool isPointerDereferencingAllowed() { return s_isLeaveLog || 0 == s_outParamDepth; }
protected:
@ -187,16 +195,6 @@ namespace Compat
static std::ofstream s_logFile;
};
class LogStruct : public detail::LogFirstParam
{
public:
LogStruct(std::ostream& os) : detail::LogFirstParam(os) { m_os << '{'; }
~LogStruct() { m_os << '}'; }
};
#ifdef DEBUGLOGS
typedef Log LogDebug;
class LogFunc
{
public:
@ -237,28 +235,13 @@ namespace Compat
std::function<void(Log&)> m_printCall;
std::function<void(Log&)> m_printResult;
};
#else
class LogDebug
class LogStruct : public detail::LogFirstParam
{
public:
template <typename T> LogDebug& operator<<(const T&) { return *this; }
LogStruct(std::ostream& os) : detail::LogFirstParam(os) { m_os << '{'; }
~LogStruct() { m_os << '}'; }
};
class LogFunc
{
public:
template <typename... Params>
LogFunc(const char* /*funcName*/, Params...)
{
}
template <typename T>
T setResult(T result)
{
return result;
}
};
#endif
}
template <typename T>

View File

@ -464,7 +464,9 @@ namespace D3dDdi
}
}
#ifdef DEBUGLOGS
LOG_RESULT(m_lockResource.get());
#endif
}
void Resource::endGdiAccess(bool isReadOnly)

View File

@ -214,8 +214,10 @@ BOOL WINAPI DllMain(HINSTANCE hinstDLL, DWORD fdwReason, LPVOID lpvReserved)
return TRUE;
}
Compat::Log::initLogging();
Compat::Log() << "Process path: " << getModulePath(nullptr);
auto processPath = getModulePath(nullptr);
Compat::Log::initLogging(getFileName(processPath));
Compat::Log() << "Process path: " << processPath;
printEnvironmentVariable("__COMPAT_LAYER");
auto currentDllPath = getModulePath(hinstDLL);
Compat::Log() << "Loading DDrawCompat " << (lpvReserved ? "statically" : "dynamically") << " from " << currentDllPath;

View File

@ -7,7 +7,7 @@ namespace
BOOL g_isFontSmoothingEnabled = FALSE;
BOOL WINAPI systemParametersInfo(UINT uiAction, UINT uiParam, PVOID pvParam, UINT fWinIni,
decltype(&SystemParametersInfoA) origSystemParametersInfo, const char* origFuncName)
decltype(&SystemParametersInfoA) origSystemParametersInfo, [[maybe_unused]] const char* origFuncName)
{
LOG_FUNC(origFuncName, Compat::hex(uiAction), uiParam, pvParam, fWinIni);
switch (uiAction)

View File

@ -160,7 +160,7 @@ namespace
}
LRESULT defPaintProc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam, WNDPROC origWndProc,
const char* origWndProcName)
[[maybe_unused]] const char* origWndProcName)
{
LOG_FUNC(origWndProcName, hwnd, Compat::logWm(msg), Compat::hex(wParam), Compat::hex(lParam));
return LOG_RESULT(defPaintProc(hwnd, msg, wParam, lParam, origWndProc));
@ -431,7 +431,7 @@ namespace
}
LRESULT CALLBACK user32WndProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam,
const std::string& procName, WndProcHook wndProcHook, WNDPROC oldWndProcTrampoline)
[[maybe_unused]] const std::string& procName, WndProcHook wndProcHook, WNDPROC oldWndProcTrampoline)
{
LOG_FUNC(procName.c_str(), hwnd, Compat::logWm(uMsg), Compat::hex(wParam), Compat::hex(lParam));
return LOG_RESULT(wndProcHook(hwnd, uMsg, wParam, lParam, oldWndProcTrampoline));