1
0
mirror of https://github.com/valinet/ExplorerPatcher.git synced 2025-02-17 11:08:41 +01:00

Moved all program settings to registry

This commit is contained in:
Valentin Radu 2021-10-01 12:42:52 +03:00
parent ad2b8a8635
commit fdfeecb28b
4 changed files with 368 additions and 304 deletions

View File

@ -16,7 +16,6 @@
#include <dwmapi.h>
#pragma comment(lib, "Dwmapi.lib")
#include <roapi.h>
#include <valinet/ini/ini.h>
#include <valinet/pdb/pdb.h>
#define _LIBVALINET_DEBUG_HOOKING_IATPATCH
#include <valinet/hooking/iatpatch.h>
@ -1054,40 +1053,34 @@ __declspec(dllexport) DWORD WINAPI main(
{
funchook = funchook_create();
printf("funchook create %d\n", funchook != 0);
HKEY hKey;
DWORD dwDisposition;
DWORD dwSize = sizeof(DWORD);
TCHAR* wszSettingsPath = malloc((MAX_PATH + 1) * sizeof(TCHAR));
if (!wszSettingsPath)
{
return 0;
}
ZeroMemory(
wszSettingsPath,
(MAX_PATH + 1) * sizeof(TCHAR)
);
SHGetFolderPathW(
NULL,
CSIDL_APPDATA,
NULL,
SHGFP_TYPE_CURRENT,
wszSettingsPath
);
wcscat_s(
wszSettingsPath,
MAX_PATH,
TEXT(SYMBOLS_RELATIVE_PATH)
);
wprintf(L"Settings path: \"%s\"\n", wszSettingsPath);
#ifndef DEBUG
UINT alloc_console = VnGetUInt(
TEXT("General"),
TEXT("AllocConsole"),
RegCreateKeyExW(
HKEY_CURRENT_USER,
TEXT(REGPATH),
0,
wszSettingsPath
NULL,
REG_OPTION_NON_VOLATILE,
KEY_READ,
NULL,
&hKey,
&dwDisposition
);
if (alloc_console)
DWORD bAllocConsole = FALSE;
RegQueryValueExW(
hKey,
TEXT("bAllocConsole"),
0,
NULL,
&bAllocConsole,
&dwSize
);
printf("AllocConsole %d %d\n", bAllocConsole, hKey);
if (bAllocConsole)
{
FILE* conout;
AllocConsole();
@ -1098,7 +1091,6 @@ __declspec(dllexport) DWORD WINAPI main(
stdout
);
}
#endif
HMODULE hSws = LoadLibraryW(L"SimpleWindowSwitcher.dll");
if (hSws)
{
@ -1111,11 +1103,10 @@ __declspec(dllexport) DWORD WINAPI main(
sizeof(symbols_addr)
);
if (LoadSymbols(&symbols_PTRS, wszSettingsPath))
if (LoadSymbols(&symbols_PTRS))
{
printf("Symbols have to be (re)downloaded...\n");
DownloadSymbolsParams* params = malloc(sizeof(DownloadSymbolsParams));
params->wszSettingsPath = wszSettingsPath;
params->hModule = hModule;
CreateThread(0, 0, DownloadSymbols, params, 0, 0);
return 0;
@ -1126,36 +1117,47 @@ __declspec(dllexport) DWORD WINAPI main(
}
bHideExplorerSearchBar = VnGetUInt(
L"General",
L"HideExplorerSearchBar",
RegQueryValueExW(
hKey,
TEXT("bHideExplorerSearchBar"),
0,
wszSettingsPath
NULL,
&bHideExplorerSearchBar,
&dwSize
);
bMicaEffectOnTitlebar = VnGetUInt(
L"General",
L"MicaEffectOnTitlebar",
RegQueryValueExW(
hKey,
TEXT("bMicaEffectOnTitlebar"),
0,
wszSettingsPath
NULL,
&bMicaEffectOnTitlebar,
&dwSize
);
bHideControlCenterButton = VnGetUInt(
L"General",
L"HideControlCenterButton",
RegQueryValueExW(
hKey,
TEXT("bHideControlCenterButton"),
0,
wszSettingsPath
NULL,
&bHideControlCenterButton,
&dwSize
);
bSkinMenus = VnGetUInt(
L"General",
L"SkinMenus",
RegQueryValueExW(
hKey,
TEXT("bSkinMenus"),
0,
wszSettingsPath
NULL,
&bSkinMenus,
&dwSize
);
bSkinIcons = VnGetUInt(
L"General",
L"SkinIcons",
RegQueryValueExW(
hKey,
TEXT("bSkinIcons"),
0,
wszSettingsPath
NULL,
&bSkinIcons,
&dwSize
);
TCHAR* wszSBPath = malloc((MAX_PATH + 1) * sizeof(TCHAR));
@ -1360,11 +1362,14 @@ __declspec(dllexport) DWORD WINAPI main(
UINT delay = VnGetUInt(
TEXT("General"),
TEXT("ExplorerReadyDelay"),
DWORD delay = 0;
RegQueryValueExW(
hKey,
TEXT("vExplorerReadyDelay"),
0,
wszSettingsPath
NULL,
&delay,
&dwSize
);
CreateThread(
0,
@ -1393,11 +1398,14 @@ __declspec(dllexport) DWORD WINAPI main(
UINT bEnableArchivePlugin = VnGetUInt(
L"ArchiveMenu",
L"Enabled",
DWORD bEnableArchivePlugin = 0;
RegQueryValueExW(
hKey,
TEXT("bArchiveMenu"),
0,
wszSettingsPath
NULL,
&bEnableArchivePlugin,
&dwSize
);
if (bEnableArchivePlugin)
{
@ -1568,7 +1576,7 @@ BOOL WINAPI DllMain(
dwSize = sizeof(DWORD);
SHRegGetValueFromHKCUHKLMFunc(
TEXT(REGPATH_OTHERS) TEXT("\\") TEXT(STARTDOCKED_SB_NAME),
TEXT(REGPATH) TEXT("\\") TEXT(STARTDOCKED_SB_NAME),
TEXT(STARTDOCKED_SB_0),
SRRF_RT_REG_DWORD,
NULL,
@ -1576,7 +1584,7 @@ BOOL WINAPI DllMain(
(LPDWORD)(&dwSize)
);
SHRegGetValueFromHKCUHKLMFunc(
TEXT(REGPATH_OTHERS) TEXT("\\") TEXT(STARTDOCKED_SB_NAME),
TEXT(REGPATH) TEXT("\\") TEXT(STARTDOCKED_SB_NAME),
TEXT(STARTDOCKED_SB_1),
SRRF_RT_REG_DWORD,
NULL,
@ -1584,7 +1592,7 @@ BOOL WINAPI DllMain(
(LPDWORD)(&dwSize)
);
SHRegGetValueFromHKCUHKLMFunc(
TEXT(REGPATH_OTHERS) TEXT("\\") TEXT(STARTDOCKED_SB_NAME),
TEXT(REGPATH) TEXT("\\") TEXT(STARTDOCKED_SB_NAME),
TEXT(STARTDOCKED_SB_2),
SRRF_RT_REG_DWORD,
NULL,
@ -1592,7 +1600,7 @@ BOOL WINAPI DllMain(
(LPDWORD)(&dwSize)
);
SHRegGetValueFromHKCUHKLMFunc(
TEXT(REGPATH_OTHERS) TEXT("\\") TEXT(STARTDOCKED_SB_NAME),
TEXT(REGPATH) TEXT("\\") TEXT(STARTDOCKED_SB_NAME),
TEXT(STARTDOCKED_SB_3),
SRRF_RT_REG_DWORD,
NULL,
@ -1600,7 +1608,7 @@ BOOL WINAPI DllMain(
(LPDWORD)(&dwSize)
);
SHRegGetValueFromHKCUHKLMFunc(
TEXT(REGPATH_OTHERS) TEXT("\\") TEXT(STARTDOCKED_SB_NAME),
TEXT(REGPATH) TEXT("\\") TEXT(STARTDOCKED_SB_NAME),
TEXT(STARTDOCKED_SB_4),
SRRF_RT_REG_DWORD,
NULL,

View File

@ -59,7 +59,9 @@ L"</toast>\r\n";
DWORD DownloadSymbols(DownloadSymbolsParams* params)
{
TCHAR* wszSettingsPath = params->wszSettingsPath;
HKEY hKey;
DWORD dwDisposition;
HMODULE hModule = params->hModule;
Sleep(3000);
@ -115,27 +117,30 @@ DWORD DownloadSymbols(DownloadSymbolsParams* params)
#endif
);
DWORD dwRet = 0;
char szSettingsPath[MAX_PATH + 1];
char szSettingsPath[MAX_PATH];
ZeroMemory(
szSettingsPath,
(MAX_PATH + 1) * sizeof(char)
MAX_PATH * sizeof(char)
);
wcstombs_s(
&dwRet,
SHGetFolderPathA(
NULL,
CSIDL_APPDATA,
NULL,
SHGFP_TYPE_CURRENT,
szSettingsPath
);
strcat_s(
szSettingsPath,
MAX_PATH + 1,
wszSettingsPath,
MAX_PATH + 1
MAX_PATH,
SYMBOLS_RELATIVE_PATH
);
PathRemoveFileSpecA(szSettingsPath);
CreateDirectoryA(szSettingsPath, NULL);
strcat_s(
szSettingsPath,
MAX_PATH + 1,
MAX_PATH,
"\\"
);
printf("Downloading to \"%s\".\n", szSettingsPath);
symbols_addr symbols_PTRS;
@ -208,54 +213,90 @@ DWORD DownloadSymbols(DownloadSymbolsParams* params)
return 5;
}
}
VnWriteUInt(
TEXT(TWINUI_PCSHELL_SB_NAME),
RegCreateKeyExW(
HKEY_CURRENT_USER,
TEXT(REGPATH) L"\\" TEXT(TWINUI_PCSHELL_SB_NAME),
0,
NULL,
REG_OPTION_NON_VOLATILE,
KEY_WRITE,
NULL,
&hKey,
&dwDisposition
);
if (!hKey)
{
FreeLibraryAndExitThread(
hModule,
9
);
return 9;
}
RegSetValueExW(
hKey,
TEXT(TWINUI_PCSHELL_SB_0),
symbols_PTRS.twinui_pcshell_PTRS[0],
wszSettingsPath
0,
REG_DWORD,
&(symbols_PTRS.twinui_pcshell_PTRS[0]),
sizeof(DWORD)
);
VnWriteUInt(
TEXT(TWINUI_PCSHELL_SB_NAME),
RegSetValueExW(
hKey,
TEXT(TWINUI_PCSHELL_SB_1),
symbols_PTRS.twinui_pcshell_PTRS[1],
wszSettingsPath
0,
REG_DWORD,
&(symbols_PTRS.twinui_pcshell_PTRS[1]),
sizeof(DWORD)
);
VnWriteUInt(
TEXT(TWINUI_PCSHELL_SB_NAME),
RegSetValueExW(
hKey,
TEXT(TWINUI_PCSHELL_SB_2),
symbols_PTRS.twinui_pcshell_PTRS[2],
wszSettingsPath
0,
REG_DWORD,
&(symbols_PTRS.twinui_pcshell_PTRS[2]),
sizeof(DWORD)
);
VnWriteUInt(
TEXT(TWINUI_PCSHELL_SB_NAME),
RegSetValueExW(
hKey,
TEXT(TWINUI_PCSHELL_SB_3),
symbols_PTRS.twinui_pcshell_PTRS[3],
wszSettingsPath
0,
REG_DWORD,
&(symbols_PTRS.twinui_pcshell_PTRS[3]),
sizeof(DWORD)
);
VnWriteUInt(
TEXT(TWINUI_PCSHELL_SB_NAME),
RegSetValueExW(
hKey,
TEXT(TWINUI_PCSHELL_SB_4),
symbols_PTRS.twinui_pcshell_PTRS[4],
wszSettingsPath
0,
REG_DWORD,
&(symbols_PTRS.twinui_pcshell_PTRS[4]),
sizeof(DWORD)
);
VnWriteUInt(
TEXT(TWINUI_PCSHELL_SB_NAME),
RegSetValueExW(
hKey,
TEXT(TWINUI_PCSHELL_SB_5),
symbols_PTRS.twinui_pcshell_PTRS[5],
wszSettingsPath
0,
REG_DWORD,
&(symbols_PTRS.twinui_pcshell_PTRS[5]),
sizeof(DWORD)
);
VnWriteUInt(
TEXT(TWINUI_PCSHELL_SB_NAME),
RegSetValueExW(
hKey,
TEXT(TWINUI_PCSHELL_SB_6),
symbols_PTRS.twinui_pcshell_PTRS[6],
wszSettingsPath
0,
REG_DWORD,
&(symbols_PTRS.twinui_pcshell_PTRS[6]),
sizeof(DWORD)
);
VnWriteUInt(
TEXT(TWINUI_PCSHELL_SB_NAME),
RegSetValueExW(
hKey,
TEXT(TWINUI_PCSHELL_SB_7),
symbols_PTRS.twinui_pcshell_PTRS[7],
wszSettingsPath
0,
REG_DWORD,
&(symbols_PTRS.twinui_pcshell_PTRS[7]),
sizeof(DWORD)
);
RegCloseKey(hKey);
@ -312,49 +353,101 @@ DWORD DownloadSymbols(DownloadSymbolsParams* params)
);
return 7;
}
VnWriteUInt(
TEXT(STARTDOCKED_SB_NAME),
RegCreateKeyExW(
HKEY_CURRENT_USER,
TEXT(REGPATH) L"\\" TEXT(STARTDOCKED_SB_NAME),
0,
NULL,
REG_OPTION_NON_VOLATILE,
KEY_WRITE,
NULL,
&hKey,
&dwDisposition
);
if (!hKey)
{
FreeLibraryAndExitThread(
hModule,
8
);
return 8;
}
RegSetValueExW(
hKey,
TEXT(STARTDOCKED_SB_0),
symbols_PTRS.startdocked_PTRS[0],
wszSettingsPath
0,
REG_DWORD,
&(symbols_PTRS.startdocked_PTRS[0]),
sizeof(DWORD)
);
VnWriteUInt(
TEXT(STARTDOCKED_SB_NAME),
RegSetValueExW(
hKey,
TEXT(STARTDOCKED_SB_1),
symbols_PTRS.startdocked_PTRS[1],
wszSettingsPath
0,
REG_DWORD,
&(symbols_PTRS.startdocked_PTRS[1]),
sizeof(DWORD)
);
VnWriteUInt(
TEXT(STARTDOCKED_SB_NAME),
RegSetValueExW(
hKey,
TEXT(STARTDOCKED_SB_2),
symbols_PTRS.startdocked_PTRS[2],
wszSettingsPath
0,
REG_DWORD,
&(symbols_PTRS.startdocked_PTRS[2]),
sizeof(DWORD)
);
VnWriteUInt(
TEXT(STARTDOCKED_SB_NAME),
RegSetValueExW(
hKey,
TEXT(STARTDOCKED_SB_3),
symbols_PTRS.startdocked_PTRS[3],
wszSettingsPath
0,
REG_DWORD,
&(symbols_PTRS.startdocked_PTRS[3]),
sizeof(DWORD)
);
VnWriteUInt(
TEXT(STARTDOCKED_SB_NAME),
RegSetValueExW(
hKey,
TEXT(STARTDOCKED_SB_4),
symbols_PTRS.startdocked_PTRS[4],
wszSettingsPath
0,
REG_DWORD,
&(symbols_PTRS.startdocked_PTRS[4]),
sizeof(DWORD)
);
RegCloseKey(hKey);
VnWriteString(
TEXT("OS"),
TEXT("Build"),
RegCreateKeyExW(
HKEY_CURRENT_USER,
TEXT(REGPATH),
0,
NULL,
REG_OPTION_NON_VOLATILE,
KEY_WRITE,
NULL,
&hKey,
&dwDisposition
);
if (!hKey)
{
FreeLibraryAndExitThread(
hModule,
10
);
return 10;
}
RegSetValueExW(
hKey,
TEXT("szOSBuild"),
0,
REG_SZ,
szReportedVersion,
wszSettingsPath
wcslen(szReportedVersion) * sizeof(TCHAR)
);
RegCloseKey(hKey);
if (symbols_PTRS.twinui_pcshell_PTRS[0])
{
@ -407,192 +500,144 @@ DWORD DownloadSymbols(DownloadSymbolsParams* params)
Sleep(4000);
TCHAR wszExplorerPath[MAX_PATH + 1];
wszExplorerPath[0] = L'\"';
GetSystemDirectory(wszExplorerPath + 1, MAX_PATH);
wcscat_s(wszExplorerPath, MAX_PATH + 1, L"\\rundll32.exe\" \"");
GetModuleFileName(hModule, wszExplorerPath + wcslen(wszExplorerPath), MAX_PATH - wcslen(wszExplorerPath));
wcscat_s(wszExplorerPath, MAX_PATH, L"\",ZZLaunchExplorer");
wprintf(L"Command to launch: \" %s \"\n.", wszExplorerPath);
STARTUPINFO si = { sizeof(si) };
PROCESS_INFORMATION pi;
BOOL b = CreateProcess(
NULL,
wszExplorerPath,
NULL,
NULL,
TRUE,
CREATE_UNICODE_ENVIRONMENT,
NULL,
NULL,
&si,
&pi
);
FreeConsole();
TerminateProcess(
OpenProcess(
PROCESS_TERMINATE,
FALSE,
GetCurrentProcessId()
),
EXIT_CODE_EXPLORER
);
exit(0);
}
BOOL LoadSymbols(symbols_addr* symbols_PTRS, TCHAR* wszSettingsPath)
BOOL LoadSymbols(symbols_addr* symbols_PTRS)
{
symbols_PTRS->twinui_pcshell_PTRS[0] = VnGetUInt(
TEXT(TWINUI_PCSHELL_SB_NAME),
TEXT(TWINUI_PCSHELL_SB_0),
0,
wszSettingsPath
);
symbols_PTRS->twinui_pcshell_PTRS[1] = VnGetUInt(
TEXT(TWINUI_PCSHELL_SB_NAME),
TEXT(TWINUI_PCSHELL_SB_1),
0,
wszSettingsPath
);
symbols_PTRS->twinui_pcshell_PTRS[2] = VnGetUInt(
TEXT(TWINUI_PCSHELL_SB_NAME),
TEXT(TWINUI_PCSHELL_SB_2),
0,
wszSettingsPath
);
symbols_PTRS->twinui_pcshell_PTRS[3] = VnGetUInt(
TEXT(TWINUI_PCSHELL_SB_NAME),
TEXT(TWINUI_PCSHELL_SB_3),
0,
wszSettingsPath
);
symbols_PTRS->twinui_pcshell_PTRS[4] = VnGetUInt(
TEXT(TWINUI_PCSHELL_SB_NAME),
TEXT(TWINUI_PCSHELL_SB_4),
0,
wszSettingsPath
);
symbols_PTRS->twinui_pcshell_PTRS[5] = VnGetUInt(
TEXT(TWINUI_PCSHELL_SB_NAME),
TEXT(TWINUI_PCSHELL_SB_5),
0,
wszSettingsPath
);
symbols_PTRS->twinui_pcshell_PTRS[6] = VnGetUInt(
TEXT(TWINUI_PCSHELL_SB_NAME),
TEXT(TWINUI_PCSHELL_SB_6),
0,
wszSettingsPath
);
symbols_PTRS->twinui_pcshell_PTRS[7] = VnGetUInt(
TEXT(TWINUI_PCSHELL_SB_NAME),
TEXT(TWINUI_PCSHELL_SB_7),
0,
wszSettingsPath
);
HKEY hKeySettings;
HKEY hKey;
DWORD dwDisposition;
DWORD dwSize = sizeof(DWORD);
RegCreateKeyExW(
HKEY_CURRENT_USER,
TEXT(REGPATH_OTHERS) L"\\" TEXT(STARTDOCKED_SB_NAME),
TEXT(REGPATH) L"\\" TEXT(TWINUI_PCSHELL_SB_NAME),
0,
NULL,
REG_OPTION_NON_VOLATILE,
KEY_WRITE,
KEY_READ,
NULL,
&hKeySettings,
&hKey,
&dwDisposition
);
symbols_PTRS->startdocked_PTRS[0] = VnGetUInt(
TEXT(STARTDOCKED_SB_NAME),
RegQueryValueExW(
hKey,
TEXT(TWINUI_PCSHELL_SB_0),
0,
NULL,
&(symbols_PTRS->twinui_pcshell_PTRS[0]),
&dwSize
);
RegQueryValueExW(
hKey,
TEXT(TWINUI_PCSHELL_SB_1),
0,
NULL,
&(symbols_PTRS->twinui_pcshell_PTRS[1]),
&dwSize
);
RegQueryValueExW(
hKey,
TEXT(TWINUI_PCSHELL_SB_2),
0,
NULL,
&(symbols_PTRS->twinui_pcshell_PTRS[2]),
&dwSize
);
RegQueryValueExW(
hKey,
TEXT(TWINUI_PCSHELL_SB_3),
0,
NULL,
&(symbols_PTRS->twinui_pcshell_PTRS[3]),
&dwSize
);
RegQueryValueExW(
hKey,
TEXT(TWINUI_PCSHELL_SB_4),
0,
NULL,
&(symbols_PTRS->twinui_pcshell_PTRS[4]),
&dwSize
);
RegQueryValueExW(
hKey,
TEXT(TWINUI_PCSHELL_SB_5),
0,
NULL,
&(symbols_PTRS->twinui_pcshell_PTRS[5]),
&dwSize
);
RegQueryValueExW(
hKey,
TEXT(TWINUI_PCSHELL_SB_6),
0,
NULL,
&(symbols_PTRS->twinui_pcshell_PTRS[6]),
&dwSize
);
RegQueryValueExW(
hKey,
TEXT(TWINUI_PCSHELL_SB_7),
0,
NULL,
&(symbols_PTRS->twinui_pcshell_PTRS[7]),
&dwSize
);
RegCloseKey(hKey);
RegCreateKeyExW(
HKEY_CURRENT_USER,
TEXT(REGPATH) L"\\" TEXT(STARTDOCKED_SB_NAME),
0,
NULL,
REG_OPTION_NON_VOLATILE,
KEY_READ,
NULL,
&hKey,
&dwDisposition
);
RegQueryValueExW(
hKey,
TEXT(STARTDOCKED_SB_0),
0,
wszSettingsPath
NULL,
&(symbols_PTRS->startdocked_PTRS[0]),
&dwSize
);
if (hKeySettings)
{
RegSetValueExW(
hKeySettings,
TEXT(STARTDOCKED_SB_0),
0,
REG_DWORD,
&(symbols_PTRS->startdocked_PTRS[0]),
sizeof(DWORD)
);
}
symbols_PTRS->startdocked_PTRS[1] = VnGetUInt(
TEXT(STARTDOCKED_SB_NAME),
RegQueryValueExW(
hKey,
TEXT(STARTDOCKED_SB_1),
0,
wszSettingsPath
NULL,
&(symbols_PTRS->startdocked_PTRS[1]),
&dwSize
);
if (hKeySettings)
{
RegSetValueExW(
hKeySettings,
TEXT(STARTDOCKED_SB_1),
0,
REG_DWORD,
&(symbols_PTRS->startdocked_PTRS[1]),
sizeof(DWORD)
);
}
symbols_PTRS->startdocked_PTRS[2] = VnGetUInt(
TEXT(STARTDOCKED_SB_NAME),
RegQueryValueExW(
hKey,
TEXT(STARTDOCKED_SB_2),
0,
wszSettingsPath
NULL,
&(symbols_PTRS->startdocked_PTRS[2]),
&dwSize
);
if (hKeySettings)
{
RegSetValueExW(
hKeySettings,
TEXT(STARTDOCKED_SB_2),
0,
REG_DWORD,
&(symbols_PTRS->startdocked_PTRS[2]),
sizeof(DWORD)
);
}
symbols_PTRS->startdocked_PTRS[3] = VnGetUInt(
TEXT(STARTDOCKED_SB_NAME),
RegQueryValueExW(
hKey,
TEXT(STARTDOCKED_SB_3),
0,
wszSettingsPath
NULL,
&(symbols_PTRS->startdocked_PTRS[3]),
&dwSize
);
if (hKeySettings)
{
RegSetValueExW(
hKeySettings,
TEXT(STARTDOCKED_SB_3),
0,
REG_DWORD,
&(symbols_PTRS->startdocked_PTRS[3]),
sizeof(DWORD)
);
}
symbols_PTRS->startdocked_PTRS[4] = VnGetUInt(
TEXT(STARTDOCKED_SB_NAME),
RegQueryValueExW(
hKey,
TEXT(STARTDOCKED_SB_4),
0,
wszSettingsPath
NULL,
&(symbols_PTRS->startdocked_PTRS[4]),
&dwSize
);
if (hKeySettings)
{
RegSetValueExW(
hKeySettings,
TEXT(STARTDOCKED_SB_4),
0,
REG_DWORD,
&(symbols_PTRS->startdocked_PTRS[4]),
sizeof(DWORD)
);
}
if (hKeySettings)
{
RegCloseKey(hKeySettings);
}
RegCloseKey(hKey);
BOOL bNeedToDownload = FALSE;
for (UINT i = 0; i < sizeof(symbols_addr) / sizeof(DWORD); ++i)
@ -624,15 +669,27 @@ BOOL LoadSymbols(symbols_addr* symbols_PTRS, TCHAR* wszSettingsPath)
rovi.dwBuildNumber,
ubr
);
VnGetString(
TEXT("OS"),
TEXT("Build"),
szStoredVersion,
MAX_PATH,
MAX_PATH,
RegCreateKeyExW(
HKEY_CURRENT_USER,
TEXT(REGPATH),
0,
NULL,
wszSettingsPath
REG_OPTION_NON_VOLATILE,
KEY_READ,
NULL,
&hKey,
&dwDisposition
);
dwSize = MAX_PATH;
RegQueryValueExW(
hKey,
TEXT("szOSBuild"),
0,
NULL,
szStoredVersion,
&dwSize
);
RegCloseKey(hKey);
if (!bNeedToDownload)
{
bNeedToDownload = wcscmp(szReportedVersion, szStoredVersion);

View File

@ -8,9 +8,8 @@
#include "utility.h"
#define EXIT_CODE_EXPLORER 1
#define REGPATH_OTHERS "SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Explorer\\ExplorerPatcher"
#define SYMBOLS_RELATIVE_PATH "\\ExplorerPatcher\\settings.ini"
#define SYMBOLS_RELATIVE_PATH "\\ExplorerPatcher"
#define TWINUI_PCSHELL_SB_NAME "twinui.pcshell"
#define TWINUI_PCSHELL_SB_0 "CImmersiveContextMenuOwnerDrawHelper::s_ContextMenuWndProc"
#define TWINUI_PCSHELL_SB_1 "CLauncherTipContextMenu::GetMenuItemsAsync"
@ -38,10 +37,9 @@ typedef struct symbols_addr
typedef struct _DownloadSymbolsParams
{
TCHAR* wszSettingsPath;
HMODULE hModule;
} DownloadSymbolsParams;
DWORD DownloadSymbols(DownloadSymbolsParams* params);
BOOL LoadSymbols(symbols_addr* symbols_PTRS, TCHAR* wszSettingsPath);
BOOL LoadSymbols(symbols_addr* symbols_PTRS);
#endif

View File

@ -8,6 +8,7 @@
#include <valinet/universal/toast/toast.h>
#define APPID L"Microsoft.Windows.Explorer"
#define REGPATH "SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Explorer\\ExplorerPatcher"
#pragma region "Weird stuff"
INT64 nimpl4_1(INT64 a1, DWORD* a2);