mirror of
https://github.com/narzoul/DDrawCompat
synced 2024-12-30 08:55:36 +01:00
Fixed sporadic crashes caused by registry hooks
This commit is contained in:
parent
7f7cfcf9bd
commit
17a4e44828
@ -6,6 +6,7 @@
|
|||||||
|
|
||||||
#include <Common/Hook.h>
|
#include <Common/Hook.h>
|
||||||
#include <Common/Log.h>
|
#include <Common/Log.h>
|
||||||
|
#include <Common/ScopedCriticalSection.h>
|
||||||
#include <Dll/Dll.h>
|
#include <Dll/Dll.h>
|
||||||
#include <Win32/Registry.h>
|
#include <Win32/Registry.h>
|
||||||
|
|
||||||
@ -41,6 +42,7 @@ namespace
|
|||||||
template <auto origFunc>
|
template <auto origFunc>
|
||||||
const char* g_funcName = nullptr;
|
const char* g_funcName = nullptr;
|
||||||
|
|
||||||
|
Compat::CriticalSection g_openKeysCs;
|
||||||
std::map<HKEY, std::wstring> g_openKeys;
|
std::map<HKEY, std::wstring> g_openKeys;
|
||||||
|
|
||||||
const std::map<HKEY, std::wstring> g_predefinedKeys = {
|
const std::map<HKEY, std::wstring> g_predefinedKeys = {
|
||||||
@ -121,10 +123,13 @@ namespace
|
|||||||
return it->second;
|
return it->second;
|
||||||
}
|
}
|
||||||
|
|
||||||
it = g_openKeys.find(key);
|
|
||||||
if (it != g_openKeys.end())
|
|
||||||
{
|
{
|
||||||
return it->second;
|
Compat::ScopedCriticalSection lock(g_openKeysCs);
|
||||||
|
it = g_openKeys.find(key);
|
||||||
|
if (it != g_openKeys.end())
|
||||||
|
{
|
||||||
|
return it->second;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
enum KEY_INFORMATION_CLASS
|
enum KEY_INFORMATION_CLASS
|
||||||
@ -304,6 +309,7 @@ namespace
|
|||||||
const auto result = CALL_ORIG_FUNC(RegCloseKey)(hKey);
|
const auto result = CALL_ORIG_FUNC(RegCloseKey)(hKey);
|
||||||
if (ERROR_SUCCESS == result)
|
if (ERROR_SUCCESS == result)
|
||||||
{
|
{
|
||||||
|
Compat::ScopedCriticalSection lock(g_openKeysCs);
|
||||||
g_openKeys.erase(hKey);
|
g_openKeys.erase(hKey);
|
||||||
}
|
}
|
||||||
return LOG_RESULT(result);
|
return LOG_RESULT(result);
|
||||||
@ -352,6 +358,8 @@ namespace
|
|||||||
keyName += L'\\';
|
keyName += L'\\';
|
||||||
keyName.append(lpSubKey, lpSubKey + getLength(lpSubKey));
|
keyName.append(lpSubKey, lpSubKey + getLength(lpSubKey));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Compat::ScopedCriticalSection lock(g_openKeysCs);
|
||||||
g_openKeys[*hkeyPtr] = keyName;
|
g_openKeys[*hkeyPtr] = keyName;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user