Browse Source

Moved all program settings to registry

pull/51/head
Valentin Radu 4 years ago
parent
commit
fdfeecb28b
  1. 134
      ExplorerPatcher/dllmain.c
  2. 469
      ExplorerPatcher/symbols.c
  3. 6
      ExplorerPatcher/symbols.h
  4. 1
      ExplorerPatcher/utility.h

134
ExplorerPatcher/dllmain.c

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

469
ExplorerPatcher/symbols.c

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

6
ExplorerPatcher/symbols.h

@ -8,9 +8,8 @@
#include "utility.h" #include "utility.h"
#define EXIT_CODE_EXPLORER 1 #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_NAME "twinui.pcshell"
#define TWINUI_PCSHELL_SB_0 "CImmersiveContextMenuOwnerDrawHelper::s_ContextMenuWndProc" #define TWINUI_PCSHELL_SB_0 "CImmersiveContextMenuOwnerDrawHelper::s_ContextMenuWndProc"
#define TWINUI_PCSHELL_SB_1 "CLauncherTipContextMenu::GetMenuItemsAsync" #define TWINUI_PCSHELL_SB_1 "CLauncherTipContextMenu::GetMenuItemsAsync"
@ -38,10 +37,9 @@ typedef struct symbols_addr
typedef struct _DownloadSymbolsParams typedef struct _DownloadSymbolsParams
{ {
TCHAR* wszSettingsPath;
HMODULE hModule; HMODULE hModule;
} DownloadSymbolsParams; } DownloadSymbolsParams;
DWORD DownloadSymbols(DownloadSymbolsParams* params); DWORD DownloadSymbols(DownloadSymbolsParams* params);
BOOL LoadSymbols(symbols_addr* symbols_PTRS, TCHAR* wszSettingsPath); BOOL LoadSymbols(symbols_addr* symbols_PTRS);
#endif #endif

1
ExplorerPatcher/utility.h

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

Loading…
Cancel
Save