From b8832a92bee312efb6b5393aff8e2f047dc6fbe5 Mon Sep 17 00:00:00 2001 From: narzoul Date: Sat, 3 Sep 2016 16:57:10 +0200 Subject: [PATCH] Moved DLL related parts to Dll namespace and subdirectory --- DDrawCompat/Common/CompatVtable.h | 8 ++---- DDrawCompat/DDraw/DirectDrawSurface.cpp | 1 - DDrawCompat/DDraw/DisplayMode.cpp | 6 ++-- DDrawCompat/DDraw/Hooks.cpp | 3 +- DDrawCompat/DDraw/RealPrimarySurface.cpp | 1 - DDrawCompat/DDraw/Repository.cpp | 4 +-- DDrawCompat/DDraw/ScopedThreadLock.h | 6 ++-- DDrawCompat/DDrawCompat.vcxproj | 14 +++++----- DDrawCompat/DDrawCompat.vcxproj.filters | 34 +++++++++++++---------- DDrawCompat/DDrawProcs.cpp | 6 ---- DDrawCompat/Direct3d/Hooks.cpp | 3 +- DDrawCompat/{ => Dll}/DDrawCompat.def | 0 DDrawCompat/{ => Dll}/DllMain.cpp | 27 ++++++++---------- DDrawCompat/Dll/Procs.cpp | 6 ++++ DDrawCompat/{DDrawProcs.h => Dll/Procs.h} | 24 ++++++++-------- DDrawCompat/Dll/UnmodifiedProcs.cpp | 9 ++++++ DDrawCompat/Gdi/DcCache.cpp | 6 ++-- DDrawCompat/Gdi/Gdi.cpp | 8 +++--- DDrawCompat/UnmodifiedDDrawProcs.cpp | 9 ------ 19 files changed, 88 insertions(+), 87 deletions(-) delete mode 100644 DDrawCompat/DDrawProcs.cpp rename DDrawCompat/{ => Dll}/DDrawCompat.def (100%) rename DDrawCompat/{ => Dll}/DllMain.cpp (84%) create mode 100644 DDrawCompat/Dll/Procs.cpp rename DDrawCompat/{DDrawProcs.h => Dll/Procs.h} (64%) create mode 100644 DDrawCompat/Dll/UnmodifiedProcs.cpp delete mode 100644 DDrawCompat/UnmodifiedDDrawProcs.cpp diff --git a/DDrawCompat/Common/CompatVtable.h b/DDrawCompat/Common/CompatVtable.h index cda5ddf..7de3cdd 100644 --- a/DDrawCompat/Common/CompatVtable.h +++ b/DDrawCompat/Common/CompatVtable.h @@ -7,7 +7,7 @@ #include "Common/Hook.h" #include "Common/Log.h" #include "Common/VtableVisitor.h" -#include "DDrawProcs.h" +#include "DDraw/ScopedThreadLock.h" template using Vtable = typename std::remove_pointer::type; @@ -109,7 +109,7 @@ private: template static Result STDMETHODCALLTYPE threadSafeFunc(Params... params) { - Compat::origProcs.AcquireDDThreadLock(); + DDraw::ScopedThreadLock lock; #ifdef _DEBUG Compat::LogEnter(s_funcNames[getKey()].c_str(), params...); #endif @@ -119,14 +119,13 @@ private: #ifdef _DEBUG Compat::LogLeave(s_funcNames[getKey()].c_str(), params...) << result; #endif - Compat::origProcs.ReleaseDDThreadLock(); return result; } template static void STDMETHODCALLTYPE threadSafeFunc(Params... params) { - Compat::origProcs.AcquireDDThreadLock(); + DDraw::ScopedThreadLock lock; #ifdef _DEBUG Compat::LogEnter(s_funcNames[getKey()].c_str(), params...); #endif @@ -136,7 +135,6 @@ private: #ifdef _DEBUG Compat::LogLeave(s_funcNames[getKey()].c_str(), params...); #endif - Compat::origProcs.ReleaseDDThreadLock(); } const Vtable& m_origVtable; diff --git a/DDrawCompat/DDraw/DirectDrawSurface.cpp b/DDrawCompat/DDraw/DirectDrawSurface.cpp index db4db4c..3cfef18 100644 --- a/DDrawCompat/DDraw/DirectDrawSurface.cpp +++ b/DDrawCompat/DDraw/DirectDrawSurface.cpp @@ -9,7 +9,6 @@ #include "DDraw/IReleaseNotifier.h" #include "DDraw/RealPrimarySurface.h" #include "DDraw/Repository.h" -#include "DDrawProcs.h" #include "Gdi/Gdi.h" namespace diff --git a/DDrawCompat/DDraw/DisplayMode.cpp b/DDrawCompat/DDraw/DisplayMode.cpp index 0568b17..4eb15f0 100644 --- a/DDrawCompat/DDraw/DisplayMode.cpp +++ b/DDrawCompat/DDraw/DisplayMode.cpp @@ -2,7 +2,7 @@ #include "Common/Hook.h" #include "DDraw/DisplayMode.h" #include "DDraw/Repository.h" -#include "DDrawProcs.h" +#include "Dll/Procs.h" namespace { @@ -142,7 +142,7 @@ namespace { if (g_compatibleDc) { - Compat::origProcs.AcquireDDThreadLock(); + Dll::g_origProcs.AcquireDDThreadLock(); g_compatibleSurface->ReleaseDC(g_compatibleSurface, g_compatibleDc); g_compatibleDc = nullptr; g_compatibleSurface.release(); @@ -165,7 +165,7 @@ namespace if (g_compatibleSurface && SUCCEEDED(g_compatibleSurface->GetDC(g_compatibleSurface, &g_compatibleDc))) { - Compat::origProcs.ReleaseDDThreadLock(); + Dll::g_origProcs.ReleaseDDThreadLock(); } } } diff --git a/DDrawCompat/DDraw/Hooks.cpp b/DDrawCompat/DDraw/Hooks.cpp index 965f182..3d30b0b 100644 --- a/DDrawCompat/DDraw/Hooks.cpp +++ b/DDrawCompat/DDraw/Hooks.cpp @@ -12,6 +12,7 @@ #include "DDraw/Hooks.h" #include "DDraw/RealPrimarySurface.h" #include "DDraw/Repository.h" +#include "Dll/Procs.h" namespace { @@ -83,7 +84,7 @@ namespace DDraw void installHooks() { CompatPtr dd; - CALL_ORIG_DDRAW(DirectDrawCreate, nullptr, &dd.getRef(), nullptr); + CALL_ORIG_PROC(DirectDrawCreate, nullptr, &dd.getRef(), nullptr); if (!dd) { Compat::Log() << "Failed to create a DirectDraw object for hooking"; diff --git a/DDrawCompat/DDraw/RealPrimarySurface.cpp b/DDrawCompat/DDraw/RealPrimarySurface.cpp index 51cb520..510eda0 100644 --- a/DDrawCompat/DDraw/RealPrimarySurface.cpp +++ b/DDrawCompat/DDraw/RealPrimarySurface.cpp @@ -11,7 +11,6 @@ #include "DDraw/RealPrimarySurface.h" #include "DDraw/ScopedThreadLock.h" #include "DDraw/Types.h" -#include "DDrawProcs.h" #include "Gdi/Gdi.h" namespace diff --git a/DDrawCompat/DDraw/Repository.cpp b/DDrawCompat/DDraw/Repository.cpp index 7c6844b..bd5d5a9 100644 --- a/DDrawCompat/DDraw/Repository.cpp +++ b/DDrawCompat/DDraw/Repository.cpp @@ -4,7 +4,7 @@ #include "Common/CompatPtr.h" #include "Common/Log.h" #include "DDraw/Repository.h" -#include "DDrawProcs.h" +#include "Dll/Procs.h" namespace { @@ -26,7 +26,7 @@ namespace CompatPtr createDirectDraw() { CompatPtr dd; - HRESULT result = CALL_ORIG_DDRAW(DirectDrawCreateEx, nullptr, + HRESULT result = CALL_ORIG_PROC(DirectDrawCreateEx, nullptr, reinterpret_cast(&dd.getRef()), IID_IDirectDraw7, nullptr); if (FAILED(result)) { diff --git a/DDrawCompat/DDraw/ScopedThreadLock.h b/DDrawCompat/DDraw/ScopedThreadLock.h index bde9140..871b7ed 100644 --- a/DDrawCompat/DDraw/ScopedThreadLock.h +++ b/DDrawCompat/DDraw/ScopedThreadLock.h @@ -1,6 +1,6 @@ #pragma once -#include "DDrawProcs.h" +#include "Dll/Procs.h" namespace DDraw { @@ -9,12 +9,12 @@ namespace DDraw public: ScopedThreadLock() { - Compat::origProcs.AcquireDDThreadLock(); + Dll::g_origProcs.AcquireDDThreadLock(); } ~ScopedThreadLock() { - Compat::origProcs.ReleaseDDThreadLock(); + Dll::g_origProcs.ReleaseDDThreadLock(); } }; } diff --git a/DDrawCompat/DDrawCompat.vcxproj b/DDrawCompat/DDrawCompat.vcxproj index 1b66f5f..9c43182 100644 --- a/DDrawCompat/DDrawCompat.vcxproj +++ b/DDrawCompat/DDrawCompat.vcxproj @@ -96,7 +96,7 @@ $(IntDir)%(RelativeDir) - DDrawCompat.def + Dll/DDrawCompat.def dxguid.lib;detours.lib;msimg32.lib;oleacc.lib;uxtheme.lib;dwmapi.lib;winmm.lib;%(AdditionalDependencies) @@ -125,7 +125,7 @@ $(IntDir)%(RelativeDir) - DDrawCompat.def + Dll/DDrawCompat.def dxguid.lib;detours.lib;msimg32.lib;oleacc.lib;uxtheme.lib;dwmapi.lib;winmm.lib;%(AdditionalDependencies) No @@ -169,7 +169,6 @@ - @@ -193,6 +192,7 @@ + @@ -231,8 +231,9 @@ - - + + + @@ -243,13 +244,12 @@ - - + diff --git a/DDrawCompat/DDrawCompat.vcxproj.filters b/DDrawCompat/DDrawCompat.vcxproj.filters index 56832c2..5bfd611 100644 --- a/DDrawCompat/DDrawCompat.vcxproj.filters +++ b/DDrawCompat/DDrawCompat.vcxproj.filters @@ -61,11 +61,14 @@ {5c6203cd-b703-4af0-a283-fa9eb72c2d07} + + {8a50d66d-8372-4dde-bbd1-302a52d7a385} + + + {41544d1c-712a-4bef-8913-a40155a33ba0} + - - Header Files - Header Files\Gdi @@ -234,17 +237,11 @@ Header Files\Config + + Header Files\Dll + - - Source Files - - - Source Files - - - Source Files - Source Files\Gdi @@ -353,10 +350,19 @@ Source Files\Win32 + + Source Files\Dll + + + Source Files\Dll + + + Source Files\Dll + - - Source Files + + Source Files\Dll \ No newline at end of file diff --git a/DDrawCompat/DDrawProcs.cpp b/DDrawCompat/DDrawProcs.cpp deleted file mode 100644 index beeb103..0000000 --- a/DDrawCompat/DDrawProcs.cpp +++ /dev/null @@ -1,6 +0,0 @@ -#include "DDrawProcs.h" - -namespace Compat -{ - DDrawProcs origProcs = {}; -} diff --git a/DDrawCompat/Direct3d/Hooks.cpp b/DDrawCompat/Direct3d/Hooks.cpp index c604b3d..18fe7a0 100644 --- a/DDrawCompat/Direct3d/Hooks.cpp +++ b/DDrawCompat/Direct3d/Hooks.cpp @@ -9,6 +9,7 @@ #include "Direct3d/Direct3d.h" #include "Direct3d/Direct3dDevice.h" #include "Direct3d/Hooks.h" +#include "Dll/Procs.h" namespace { @@ -123,7 +124,7 @@ namespace Direct3d { auto dd7(DDraw::Repository::getDirectDraw()); CompatPtr dd; - CALL_ORIG_DDRAW(DirectDrawCreate, nullptr, &dd.getRef(), nullptr); + CALL_ORIG_PROC(DirectDrawCreate, nullptr, &dd.getRef(), nullptr); if (!dd || !dd7 || FAILED(dd->SetCooperativeLevel(dd, nullptr, DDSCL_NORMAL))) { Compat::Log() << "Failed to hook Direct3d interfaces"; diff --git a/DDrawCompat/DDrawCompat.def b/DDrawCompat/Dll/DDrawCompat.def similarity index 100% rename from DDrawCompat/DDrawCompat.def rename to DDrawCompat/Dll/DDrawCompat.def diff --git a/DDrawCompat/DllMain.cpp b/DDrawCompat/Dll/DllMain.cpp similarity index 84% rename from DDrawCompat/DllMain.cpp rename to DDrawCompat/Dll/DllMain.cpp index 237fefa..673fd5e 100644 --- a/DDrawCompat/DllMain.cpp +++ b/DDrawCompat/Dll/DllMain.cpp @@ -9,8 +9,8 @@ #include "D3dDdi/Hooks.h" #include "DDraw/DisplayMode.h" #include "DDraw/Hooks.h" -#include "DDrawProcs.h" #include "Direct3d/Hooks.h" +#include "Dll/Procs.h" #include "Gdi/Gdi.h" #include "Win32/FontSmoothing.h" #include "Win32/MsgHooks.h" @@ -18,6 +18,8 @@ struct IDirectInput; +HRESULT WINAPI SetAppCompatData(DWORD, DWORD); + namespace { HMODULE g_origDDrawModule = nullptr; @@ -79,8 +81,8 @@ namespace } } -#define LOAD_ORIGINAL_DDRAW_PROC(procName) \ - Compat::origProcs.procName = GetProcAddress(g_origDDrawModule, #procName); +#define LOAD_ORIGINAL_PROC(procName) \ + Dll::g_origProcs.procName = GetProcAddress(g_origDDrawModule, #procName); BOOL WINAPI DllMain(HINSTANCE hinstDLL, DWORD fdwReason, LPVOID /*lpvReserved*/) { @@ -112,8 +114,8 @@ BOOL WINAPI DllMain(HINSTANCE hinstDLL, DWORD fdwReason, LPVOID /*lpvReserved*/) return FALSE; } - VISIT_ALL_DDRAW_PROCS(LOAD_ORIGINAL_DDRAW_PROC); - Compat::origProcs.DirectInputCreateA = GetProcAddress(g_origDInputModule, "DirectInputCreateA"); + VISIT_ALL_PROCS(LOAD_ORIGINAL_PROC); + Dll::g_origProcs.DirectInputCreateA = GetProcAddress(g_origDInputModule, "DirectInputCreateA"); const BOOL disablePriorityBoost = TRUE; SetProcessPriorityBoost(GetCurrentProcess(), disablePriorityBoost); @@ -125,13 +127,8 @@ BOOL WINAPI DllMain(HINSTANCE hinstDLL, DWORD fdwReason, LPVOID /*lpvReserved*/) Win32::MsgHooks::installHooks(); Time::init(); - if (Compat::origProcs.SetAppCompatData) - { - typedef HRESULT WINAPI SetAppCompatDataFunc(DWORD, DWORD); - auto setAppCompatData = reinterpret_cast(Compat::origProcs.SetAppCompatData); - const DWORD disableMaxWindowedMode = 12; - setAppCompatData(disableMaxWindowedMode, 0); - } + const DWORD disableMaxWindowedMode = 12; + CALL_ORIG_PROC(SetAppCompatData, disableMaxWindowedMode, 0); Compat::Log() << "DDrawCompat loaded successfully"; } @@ -159,7 +156,7 @@ extern "C" HRESULT WINAPI DirectDrawCreate( Compat::LogEnter(__func__, lpGUID, lplpDD, pUnkOuter); installHooks(); suppressEmulatedDirectDraw(lpGUID); - HRESULT result = CALL_ORIG_DDRAW(DirectDrawCreate, lpGUID, lplpDD, pUnkOuter); + HRESULT result = CALL_ORIG_PROC(DirectDrawCreate, lpGUID, lplpDD, pUnkOuter); Compat::LogLeave(__func__, lpGUID, lplpDD, pUnkOuter) << result; return result; } @@ -173,7 +170,7 @@ extern "C" HRESULT WINAPI DirectDrawCreateEx( Compat::LogEnter(__func__, lpGUID, lplpDD, iid, pUnkOuter); installHooks(); suppressEmulatedDirectDraw(lpGUID); - HRESULT result = CALL_ORIG_DDRAW(DirectDrawCreateEx, lpGUID, lplpDD, iid, pUnkOuter); + HRESULT result = CALL_ORIG_PROC(DirectDrawCreateEx, lpGUID, lplpDD, iid, pUnkOuter); Compat::LogLeave(__func__, lpGUID, lplpDD, iid, pUnkOuter) << result; return result; } @@ -185,7 +182,7 @@ extern "C" HRESULT WINAPI DirectInputCreateA( LPUNKNOWN punkOuter) { Compat::LogEnter(__func__, hinst, dwVersion, lplpDirectInput, punkOuter); - HRESULT result = CALL_ORIG_DDRAW(DirectInputCreateA, hinst, dwVersion, lplpDirectInput, punkOuter); + HRESULT result = CALL_ORIG_PROC(DirectInputCreateA, hinst, dwVersion, lplpDirectInput, punkOuter); Compat::LogLeave(__func__, hinst, dwVersion, lplpDirectInput, punkOuter) << result; return result; } diff --git a/DDrawCompat/Dll/Procs.cpp b/DDrawCompat/Dll/Procs.cpp new file mode 100644 index 0000000..3d7a6a7 --- /dev/null +++ b/DDrawCompat/Dll/Procs.cpp @@ -0,0 +1,6 @@ +#include "Dll/Procs.h" + +namespace Dll +{ + Procs g_origProcs = {}; +} diff --git a/DDrawCompat/DDrawProcs.h b/DDrawCompat/Dll/Procs.h similarity index 64% rename from DDrawCompat/DDrawProcs.h rename to DDrawCompat/Dll/Procs.h index 3c7f026..8213937 100644 --- a/DDrawCompat/DDrawProcs.h +++ b/DDrawCompat/Dll/Procs.h @@ -4,7 +4,7 @@ #include -#define VISIT_UNMODIFIED_DDRAW_PROCS(visit) \ +#define VISIT_UNMODIFIED_PROCS(visit) \ visit(AcquireDDThreadLock) \ visit(CompleteCreateSysmemSurface) \ visit(D3DParseUnknownCommand) \ @@ -26,30 +26,30 @@ visit(ReleaseDDThreadLock) \ visit(SetAppCompatData) -#define VISIT_MODIFIED_DDRAW_PROCS(visit) \ +#define VISIT_MODIFIED_PROCS(visit) \ visit(DirectDrawCreate) \ visit(DirectDrawCreateEx) -#define VISIT_ALL_DDRAW_PROCS(visit) \ - VISIT_UNMODIFIED_DDRAW_PROCS(visit) \ - VISIT_MODIFIED_DDRAW_PROCS(visit) +#define VISIT_ALL_PROCS(visit) \ + VISIT_UNMODIFIED_PROCS(visit) \ + VISIT_MODIFIED_PROCS(visit) #define ADD_FARPROC_MEMBER(memberName) FARPROC memberName; -namespace Compat +namespace Dll { - struct DDrawProcs + struct Procs { - VISIT_ALL_DDRAW_PROCS(ADD_FARPROC_MEMBER); + VISIT_ALL_PROCS(ADD_FARPROC_MEMBER); FARPROC DirectInputCreateA; }; - extern DDrawProcs origProcs; + extern Procs g_origProcs; } #undef ADD_FARPROC_MEMBER -#define CALL_ORIG_DDRAW(procName, ...) \ - (Compat::origProcs.procName ? \ - reinterpret_cast(Compat::origProcs.procName)(__VA_ARGS__) : \ +#define CALL_ORIG_PROC(procName, ...) \ + (Dll::g_origProcs.procName ? \ + reinterpret_cast(Dll::g_origProcs.procName)(__VA_ARGS__) : \ E_FAIL) diff --git a/DDrawCompat/Dll/UnmodifiedProcs.cpp b/DDrawCompat/Dll/UnmodifiedProcs.cpp new file mode 100644 index 0000000..5e52803 --- /dev/null +++ b/DDrawCompat/Dll/UnmodifiedProcs.cpp @@ -0,0 +1,9 @@ +#include "Dll/Procs.h" + +#define CREATE_PROC_STUB(procName) \ + extern "C" __declspec(naked) void __stdcall procName() \ + { \ + __asm jmp Dll::g_origProcs.procName \ + } + +VISIT_UNMODIFIED_PROCS(CREATE_PROC_STUB) diff --git a/DDrawCompat/Gdi/DcCache.cpp b/DDrawCompat/Gdi/DcCache.cpp index 69da9e3..84b3b39 100644 --- a/DDrawCompat/Gdi/DcCache.cpp +++ b/DDrawCompat/Gdi/DcCache.cpp @@ -6,7 +6,7 @@ #include "Config/Config.h" #include "DDraw/CompatPrimarySurface.h" #include "DDraw/Repository.h" -#include "DDrawProcs.h" +#include "Dll/Procs.h" #include "Gdi/DcCache.h" namespace @@ -45,7 +45,7 @@ namespace } // Release DD critical section acquired by IDirectDrawSurface7::GetDC to avoid deadlocks - Compat::origProcs.ReleaseDDThreadLock(); + Dll::g_origProcs.ReleaseDDThreadLock(); cachedDc.surface = surface.detach(); cachedDc.dc = dc; @@ -105,7 +105,7 @@ namespace void releaseCachedDc(CachedDc cachedDc) { // Reacquire DD critical section that was temporarily released after IDirectDrawSurface7::GetDC - Compat::origProcs.AcquireDDThreadLock(); + Dll::g_origProcs.AcquireDDThreadLock(); HRESULT result = cachedDc.surface->ReleaseDC(cachedDc.surface, cachedDc.dc); if (FAILED(result)) diff --git a/DDrawCompat/Gdi/Gdi.cpp b/DDrawCompat/Gdi/Gdi.cpp index 070272b..84dc870 100644 --- a/DDrawCompat/Gdi/Gdi.cpp +++ b/DDrawCompat/Gdi/Gdi.cpp @@ -4,7 +4,7 @@ #include "DDraw/CompatPrimarySurface.h" #include "DDraw/PaletteConverter.h" #include "DDraw/RealPrimarySurface.h" -#include "DDrawProcs.h" +#include "Dll/Procs.h" #include "Gdi/Caret.h" #include "Gdi/DcCache.h" #include "Gdi/DcFunctions.h" @@ -93,7 +93,7 @@ namespace } g_ddLockFlags = 0; - Compat::origProcs.ReleaseDDThreadLock(); + Dll::g_origProcs.ReleaseDDThreadLock(); } } @@ -113,11 +113,11 @@ namespace Gdi if (0 == g_renderingRefCount) { LeaveCriticalSection(&g_gdiCriticalSection); - Compat::origProcs.AcquireDDThreadLock(); + Dll::g_origProcs.AcquireDDThreadLock(); EnterCriticalSection(&g_gdiCriticalSection); if (!lockPrimarySurface(lockFlags)) { - Compat::origProcs.ReleaseDDThreadLock(); + Dll::g_origProcs.ReleaseDDThreadLock(); return false; } } diff --git a/DDrawCompat/UnmodifiedDDrawProcs.cpp b/DDrawCompat/UnmodifiedDDrawProcs.cpp deleted file mode 100644 index 0a74b1f..0000000 --- a/DDrawCompat/UnmodifiedDDrawProcs.cpp +++ /dev/null @@ -1,9 +0,0 @@ -#include "DDrawProcs.h" - -#define CREATE_DDRAW_PROC_STUB(procName) \ - extern "C" __declspec(naked) void __stdcall procName() \ - { \ - __asm jmp Compat::origProcs.procName \ - } - -VISIT_UNMODIFIED_DDRAW_PROCS(CREATE_DDRAW_PROC_STUB)