mirror of
https://github.com/valinet/ExplorerPatcher.git
synced 2024-11-27 17:00:59 +01:00
Symbols: Add explorer.exe
symbols and unified the method for Windows 10 Alt+Tab on 22000
This commit is contained in:
parent
79b0f68aff
commit
1f2e2c4821
@ -10987,7 +10987,7 @@ void TryToFindTwinuiPCShellOffsets(DWORD* pOffsets)
|
||||
printf("CLauncherTipContextMenu::ShowLauncherTipContextMenu() = %lX\n", pOffsets[6]);
|
||||
}
|
||||
}
|
||||
if (IsWindows11Version22H2OrHigher() && (!pOffsets[7] || pOffsets[7] == 0xFFFFFFFF)) // TODO If we get rid of IsUndockedAssetAvailable, we can use this on 21H2 too
|
||||
if (!pOffsets[7] || pOffsets[7] == 0xFFFFFFFF)
|
||||
{
|
||||
// Ref: CMultitaskingViewManager::_CreateMTVHost()
|
||||
// Inlined GetMTVHostKind()
|
||||
@ -11029,7 +11029,7 @@ void TryToFindTwinuiPCShellOffsets(DWORD* pOffsets)
|
||||
}
|
||||
}
|
||||
}
|
||||
if (IsWindows11Version22H2OrHigher() && (!pOffsets[8] || pOffsets[8] == 0xFFFFFFFF))
|
||||
if (!pOffsets[8] || pOffsets[8] == 0xFFFFFFFF)
|
||||
{
|
||||
// Ref: CMultitaskingViewManager::_CreateMTVHost()
|
||||
// Inlined GetMTVHostKind()
|
||||
@ -12293,10 +12293,10 @@ DWORD Inject(BOOL bIsExplorer)
|
||||
printf("Failed to hook CLauncherTipContextMenu::ShowLauncherTipContextMenu(). rv = %d\n", rv);
|
||||
}
|
||||
|
||||
rv = -1;
|
||||
if (symbols_PTRS.twinui_pcshell_PTRS[7] && symbols_PTRS.twinui_pcshell_PTRS[7] != 0xFFFFFFFF)
|
||||
if (IsWindows11())
|
||||
{
|
||||
if (IsWindows11Version22H2OrHigher())
|
||||
rv = -1;
|
||||
if (symbols_PTRS.twinui_pcshell_PTRS[7] && symbols_PTRS.twinui_pcshell_PTRS[7] != 0xFFFFFFFF)
|
||||
{
|
||||
twinui_pcshell_CMultitaskingViewManager__CreateDCompMTVHostFunc = (INT64(*)(void*, POINT*))
|
||||
((uintptr_t)hTwinuiPcshell + symbols_PTRS.twinui_pcshell_PTRS[TWINUI_PCSHELL_SB_CNT - 1]);
|
||||
@ -12308,23 +12308,10 @@ DWORD Inject(BOOL bIsExplorer)
|
||||
twinui_pcshell_CMultitaskingViewManager__CreateXamlMTVHostHook
|
||||
);
|
||||
}
|
||||
else if (IsWindows11())
|
||||
if (rv != 0)
|
||||
{
|
||||
twinui_pcshell_IsUndockedAssetAvailableFunc = (INT64(*)(void*, POINT*))
|
||||
((uintptr_t)hTwinuiPcshell + symbols_PTRS.twinui_pcshell_PTRS[7]);
|
||||
rv = funchook_prepare(
|
||||
funchook,
|
||||
(void**)&twinui_pcshell_IsUndockedAssetAvailableFunc,
|
||||
twinui_pcshell_IsUndockedAssetAvailableHook
|
||||
);
|
||||
}
|
||||
}
|
||||
if (rv != 0)
|
||||
{
|
||||
if (IsWindows11Version22H2OrHigher())
|
||||
printf("Failed to hook CMultitaskingViewManager::_CreateXamlMTVHost(). rv = %d\n", rv);
|
||||
else if (IsWindows11())
|
||||
printf("Failed to hook IsUndockedAssetAvailable(). rv = %d\n", rv);
|
||||
}
|
||||
}
|
||||
|
||||
/*rv = -1;
|
||||
|
@ -1,5 +1,16 @@
|
||||
#include "symbols.h"
|
||||
|
||||
const char* explorer_SN[EXPLORER_SB_CNT] = {
|
||||
EXPLORER_SB_0,
|
||||
EXPLORER_SB_1,
|
||||
EXPLORER_SB_2,
|
||||
EXPLORER_SB_3,
|
||||
EXPLORER_SB_4,
|
||||
EXPLORER_SB_5,
|
||||
EXPLORER_SB_6,
|
||||
EXPLORER_SB_7,
|
||||
EXPLORER_SB_8
|
||||
};
|
||||
const char* twinui_pcshell_SN[TWINUI_PCSHELL_SB_CNT] = {
|
||||
TWINUI_PCSHELL_SB_0,
|
||||
TWINUI_PCSHELL_SB_1,
|
||||
@ -38,6 +49,102 @@ const wchar_t DownloadNotificationXML[] =
|
||||
extern INT VnDownloadSymbols(HMODULE hModule, char* dllName, char* szLibPath, UINT sizeLibPath);
|
||||
extern INT VnGetSymbols(const char* pdb_file, DWORD* addresses, char** symbols, DWORD numOfSymbols);
|
||||
|
||||
BOOL CheckVersion(HKEY hKey, DWORD dwVersion)
|
||||
{
|
||||
DWORD dwSize = sizeof(DWORD);
|
||||
DWORD dwStoredVersion = 0;
|
||||
if (RegQueryValueExW(hKey, TEXT("Version"), 0, NULL, &dwStoredVersion, &dwSize) == ERROR_SUCCESS)
|
||||
{
|
||||
return dwStoredVersion == dwVersion;
|
||||
}
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
void SaveVersion(HKEY hKey, DWORD dwVersion)
|
||||
{
|
||||
RegSetValueExW(hKey, TEXT("Version"), 0, REG_DWORD, &dwVersion, sizeof(DWORD));
|
||||
}
|
||||
|
||||
static BOOL ProcessExplorerSymbols(const char* pszSettingsPath, DWORD* pOffsets)
|
||||
{
|
||||
HKEY hKey = NULL;
|
||||
DWORD dwDisposition;
|
||||
RegCreateKeyExW(
|
||||
HKEY_CURRENT_USER,
|
||||
TEXT(REGPATH) L"\\" TEXT(EXPLORER_SB_NAME),
|
||||
0,
|
||||
NULL,
|
||||
REG_OPTION_NON_VOLATILE,
|
||||
KEY_WRITE,
|
||||
NULL,
|
||||
&hKey,
|
||||
&dwDisposition
|
||||
);
|
||||
if (!hKey || hKey == INVALID_HANDLE_VALUE)
|
||||
{
|
||||
printf("[Symbols] Unable to create registry key.\n");
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
CHAR szHash[100];
|
||||
WCHAR wszPath[MAX_PATH];
|
||||
|
||||
ZeroMemory(szHash, sizeof(szHash));
|
||||
ZeroMemory(wszPath, sizeof(wszPath));
|
||||
|
||||
char explorer_sb_dll[MAX_PATH];
|
||||
ZeroMemory(explorer_sb_dll, sizeof(explorer_sb_dll));
|
||||
GetWindowsDirectoryA(explorer_sb_dll, MAX_PATH);
|
||||
strcat_s(explorer_sb_dll, MAX_PATH, "\\" EXPLORER_SB_NAME ".exe");
|
||||
|
||||
GetWindowsDirectoryW(wszPath, MAX_PATH);
|
||||
wcscat_s(wszPath, MAX_PATH, L"\\" _T(EXPLORER_SB_NAME) L".exe");
|
||||
ComputeFileHash(wszPath, szHash, ARRAYSIZE(szHash));
|
||||
|
||||
printf("[Symbols] Downloading symbols for \"%s\" (\"%s\")...\n", explorer_sb_dll, szHash);
|
||||
if (VnDownloadSymbols(
|
||||
NULL,
|
||||
explorer_sb_dll,
|
||||
pszSettingsPath,
|
||||
MAX_PATH
|
||||
))
|
||||
{
|
||||
printf("[Symbols] Symbols for \"%s\" are not available - unable to download.\n", explorer_sb_dll);
|
||||
printf("[Symbols] Please refer to \"https://github.com/valinet/ExplorerPatcher/wiki/Symbols\" for more information.\n");
|
||||
if (hKey) RegCloseKey(hKey);
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
printf("[Symbols] Reading symbols...\n");
|
||||
if (VnGetSymbols(
|
||||
pszSettingsPath,
|
||||
pOffsets,
|
||||
explorer_SN,
|
||||
EXPLORER_SB_CNT
|
||||
))
|
||||
{
|
||||
printf("[Symbols] Failure in reading symbols for \"%s\".\n", explorer_sb_dll);
|
||||
if (hKey) RegCloseKey(hKey);
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
RegSetValueExW(hKey, TEXT(EXPLORER_SB_0), 0, REG_DWORD, &pOffsets[0], sizeof(DWORD));
|
||||
RegSetValueExW(hKey, TEXT(EXPLORER_SB_1), 0, REG_DWORD, &pOffsets[1], sizeof(DWORD));
|
||||
RegSetValueExW(hKey, TEXT(EXPLORER_SB_2), 0, REG_DWORD, &pOffsets[2], sizeof(DWORD));
|
||||
RegSetValueExW(hKey, TEXT(EXPLORER_SB_3), 0, REG_DWORD, &pOffsets[3], sizeof(DWORD));
|
||||
RegSetValueExW(hKey, TEXT(EXPLORER_SB_4), 0, REG_DWORD, &pOffsets[4], sizeof(DWORD));
|
||||
RegSetValueExW(hKey, TEXT(EXPLORER_SB_5), 0, REG_DWORD, &pOffsets[5], sizeof(DWORD));
|
||||
RegSetValueExW(hKey, TEXT(EXPLORER_SB_6), 0, REG_DWORD, &pOffsets[6], sizeof(DWORD));
|
||||
RegSetValueExW(hKey, TEXT(EXPLORER_SB_7), 0, REG_DWORD, &pOffsets[7], sizeof(DWORD));
|
||||
RegSetValueExW(hKey, TEXT(EXPLORER_SB_8), 0, REG_DWORD, &pOffsets[8], sizeof(DWORD));
|
||||
|
||||
RegSetValueExA(hKey, "Hash", 0, REG_SZ, szHash, strlen(szHash) + 1);
|
||||
SaveVersion(hKey, EXPLORER_SB_VERSION);
|
||||
|
||||
if (hKey) RegCloseKey(hKey);
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
static BOOL ProcessTwinuiPcshellSymbols(const char* pszSettingsPath, DWORD* pOffsets)
|
||||
{
|
||||
HKEY hKey = NULL;
|
||||
@ -100,16 +207,6 @@ static BOOL ProcessTwinuiPcshellSymbols(const char* pszSettingsPath, DWORD* pOff
|
||||
VirtualProtect(twinui_pcshell_SN, sizeof(twinui_pcshell_SN), flOldProtect, &flOldProtect);
|
||||
}
|
||||
}
|
||||
if (IsWindows11Version22H2OrHigher())
|
||||
{
|
||||
DWORD flOldProtect = 0;
|
||||
if (VirtualProtect(twinui_pcshell_SN, sizeof(twinui_pcshell_SN), PAGE_EXECUTE_READWRITE, &flOldProtect))
|
||||
{
|
||||
twinui_pcshell_SN[7] = "CMultitaskingViewManager::_CreateXamlMTVHost";
|
||||
twinui_pcshell_SN[TWINUI_PCSHELL_SB_CNT - 1] = "CMultitaskingViewManager::_CreateDCompMTVHost";
|
||||
VirtualProtect(twinui_pcshell_SN, sizeof(twinui_pcshell_SN), flOldProtect, &flOldProtect);
|
||||
}
|
||||
}
|
||||
if (VnGetSymbols(
|
||||
pszSettingsPath,
|
||||
pOffsets,
|
||||
@ -117,34 +214,9 @@ static BOOL ProcessTwinuiPcshellSymbols(const char* pszSettingsPath, DWORD* pOff
|
||||
IsWindows11() ? TWINUI_PCSHELL_SB_CNT : 4
|
||||
))
|
||||
{
|
||||
if (!IsWindows11())
|
||||
{
|
||||
printf("[Symbols] Failure in reading symbols for \"%s\".\n", twinui_pcshell_sb_dll);
|
||||
if (hKey) RegCloseKey(hKey);
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
//printf("[Symbols] Hooking Win+C is not available in this build.\n");
|
||||
if (VnGetSymbols(
|
||||
pszSettingsPath,
|
||||
pOffsets,
|
||||
twinui_pcshell_SN,
|
||||
TWINUI_PCSHELL_SB_CNT - 1
|
||||
))
|
||||
{
|
||||
printf("[Symbols] Windows 10 window switcher style may not be available in this build.\n");
|
||||
if (VnGetSymbols(
|
||||
pszSettingsPath,
|
||||
pOffsets,
|
||||
twinui_pcshell_SN,
|
||||
TWINUI_PCSHELL_SB_CNT - 2
|
||||
))
|
||||
{
|
||||
printf("[Symbols] Failure in reading symbols for \"%s\".\n", twinui_pcshell_sb_dll);
|
||||
if (hKey) RegCloseKey(hKey);
|
||||
return FALSE;
|
||||
}
|
||||
}
|
||||
printf("[Symbols] Failure in reading symbols for \"%s\".\n", twinui_pcshell_sb_dll);
|
||||
if (hKey) RegCloseKey(hKey);
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
if (!IsWindows11())
|
||||
@ -162,6 +234,7 @@ static BOOL ProcessTwinuiPcshellSymbols(const char* pszSettingsPath, DWORD* pOff
|
||||
RegSetValueExW(hKey, TEXT(TWINUI_PCSHELL_SB_8), 0, REG_DWORD, &pOffsets[8], sizeof(DWORD));
|
||||
|
||||
RegSetValueExA(hKey, "Hash", 0, REG_SZ, szHash, strlen(szHash) + 1);
|
||||
SaveVersion(hKey, TWINUI_PCSHELL_SB_VERSION);
|
||||
|
||||
if (hKey) RegCloseKey(hKey);
|
||||
return TRUE;
|
||||
@ -239,6 +312,7 @@ static BOOL ProcessStartDockedSymbols(const char* pszSettingsPath, DWORD* pOffse
|
||||
RegSetValueExW(hKey, TEXT(STARTDOCKED_SB_4), 0, REG_DWORD, &pOffsets[4], sizeof(DWORD));
|
||||
|
||||
RegSetValueExA(hKey, "Hash", 0, REG_SZ, szHash, strlen(szHash) + 1);
|
||||
SaveVersion(hKey, STARTDOCKED_SB_VERSION);
|
||||
|
||||
if (hKey) RegCloseKey(hKey);
|
||||
return TRUE;
|
||||
@ -312,6 +386,7 @@ static BOOL ProcessStartUISymbols(const char* pszSettingsPath, DWORD* pOffsets)
|
||||
RegSetValueExW(hKey, TEXT(STARTUI_SB_0), 0, REG_DWORD, &pOffsets[0], sizeof(DWORD));
|
||||
|
||||
RegSetValueExA(hKey, "Hash", 0, REG_SZ, szHash, strlen(szHash) + 1);
|
||||
SaveVersion(hKey, STARTUI_SB_VERSION);
|
||||
|
||||
if (hKey) RegCloseKey(hKey);
|
||||
return TRUE;
|
||||
@ -452,6 +527,12 @@ DWORD DownloadSymbols(DownloadSymbolsParams* params)
|
||||
symbols_addr symbols_PTRS;
|
||||
ZeroMemory(&symbols_PTRS, sizeof(symbols_addr));
|
||||
BOOL bAnySuccess = FALSE, bAllSuccess = TRUE;
|
||||
if (params->loadResult.bNeedToDownloadExplorerSymbols && IsWindows11Version22H2OrHigher())
|
||||
{
|
||||
BOOL bSuccess = ProcessExplorerSymbols(szSettingsPath, symbols_PTRS.explorer_PTRS);
|
||||
bAnySuccess |= bSuccess;
|
||||
bAllSuccess &= bSuccess;
|
||||
}
|
||||
if (params->loadResult.bNeedToDownloadTwinuiPcshellSymbols)
|
||||
{
|
||||
BOOL bSuccess = ProcessTwinuiPcshellSymbols(szSettingsPath, symbols_PTRS.twinui_pcshell_PTRS);
|
||||
@ -554,6 +635,64 @@ LoadSymbolsResult LoadSymbols(symbols_addr* symbols_PTRS)
|
||||
wchar_t wszPath[MAX_PATH];
|
||||
BOOL bOffsetsValid;
|
||||
|
||||
// Load explorer.exe offsets
|
||||
if (IsWindows11Version22H2OrHigher())
|
||||
{
|
||||
bOffsetsValid = FALSE;
|
||||
RegCreateKeyExW(
|
||||
HKEY_CURRENT_USER,
|
||||
TEXT(REGPATH) L"\\" TEXT(EXPLORER_SB_NAME),
|
||||
0,
|
||||
NULL,
|
||||
REG_OPTION_NON_VOLATILE,
|
||||
KEY_READ,
|
||||
NULL,
|
||||
&hKey,
|
||||
&dwDisposition
|
||||
);
|
||||
if (!hKey || hKey == INVALID_HANDLE_VALUE)
|
||||
{
|
||||
result.bSuccess = FALSE;
|
||||
return result;
|
||||
}
|
||||
|
||||
GetWindowsDirectoryW(wszPath, MAX_PATH);
|
||||
wcscat_s(wszPath, MAX_PATH, L"\\" TEXT(EXPLORER_SB_NAME) L".exe");
|
||||
if (ComputeFileHash(wszPath, szHash, ARRAYSIZE(szHash)) == ERROR_SUCCESS)
|
||||
{
|
||||
szStoredHash[0] = 0;
|
||||
dwSize = sizeof(szStoredHash);
|
||||
if (RegQueryValueExA(hKey, "Hash", 0, NULL, szStoredHash, &dwSize) == ERROR_SUCCESS
|
||||
&& !_stricmp(szHash, szStoredHash) && CheckVersion(hKey, EXPLORER_SB_VERSION))
|
||||
{
|
||||
dwSize = sizeof(DWORD);
|
||||
RegQueryValueExW(hKey, TEXT(EXPLORER_SB_0), 0, NULL, &symbols_PTRS->explorer_PTRS[0], &dwSize);
|
||||
RegQueryValueExW(hKey, TEXT(EXPLORER_SB_1), 0, NULL, &symbols_PTRS->explorer_PTRS[1], &dwSize);
|
||||
RegQueryValueExW(hKey, TEXT(EXPLORER_SB_2), 0, NULL, &symbols_PTRS->explorer_PTRS[2], &dwSize);
|
||||
RegQueryValueExW(hKey, TEXT(EXPLORER_SB_3), 0, NULL, &symbols_PTRS->explorer_PTRS[3], &dwSize);
|
||||
RegQueryValueExW(hKey, TEXT(EXPLORER_SB_4), 0, NULL, &symbols_PTRS->explorer_PTRS[4], &dwSize);
|
||||
RegQueryValueExW(hKey, TEXT(EXPLORER_SB_5), 0, NULL, &symbols_PTRS->explorer_PTRS[5], &dwSize);
|
||||
RegQueryValueExW(hKey, TEXT(EXPLORER_SB_6), 0, NULL, &symbols_PTRS->explorer_PTRS[6], &dwSize);
|
||||
RegQueryValueExW(hKey, TEXT(EXPLORER_SB_7), 0, NULL, &symbols_PTRS->explorer_PTRS[7], &dwSize);
|
||||
RegQueryValueExW(hKey, TEXT(EXPLORER_SB_8), 0, NULL, &symbols_PTRS->explorer_PTRS[8], &dwSize);
|
||||
bOffsetsValid = TRUE;
|
||||
}
|
||||
else
|
||||
{
|
||||
printf("[Symbols] Symbols for \"%s\" are not available.\n", EXPLORER_SB_NAME);
|
||||
result.bNeedToDownloadExplorerSymbols = TRUE;
|
||||
}
|
||||
}
|
||||
if (hKey) RegCloseKey(hKey);
|
||||
if (!bOffsetsValid)
|
||||
{
|
||||
RegDeleteTreeW(
|
||||
HKEY_CURRENT_USER,
|
||||
TEXT(REGPATH) L"\\" TEXT(EXPLORER_SB_NAME)
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
// Load twinui.pcshell.dll offsets
|
||||
bOffsetsValid = FALSE;
|
||||
RegCreateKeyExW(
|
||||
@ -580,7 +719,7 @@ LoadSymbolsResult LoadSymbols(symbols_addr* symbols_PTRS)
|
||||
szStoredHash[0] = 0;
|
||||
dwSize = sizeof(szStoredHash);
|
||||
if (RegQueryValueExA(hKey, "Hash", 0, NULL, szStoredHash, &dwSize) == ERROR_SUCCESS
|
||||
&& !_stricmp(szHash, szStoredHash))
|
||||
&& !_stricmp(szHash, szStoredHash) && CheckVersion(hKey, TWINUI_PCSHELL_SB_VERSION))
|
||||
{
|
||||
dwSize = sizeof(DWORD);
|
||||
RegQueryValueExW(hKey, TEXT(TWINUI_PCSHELL_SB_0), 0, NULL, &symbols_PTRS->twinui_pcshell_PTRS[0], &dwSize);
|
||||
@ -591,10 +730,7 @@ LoadSymbolsResult LoadSymbols(symbols_addr* symbols_PTRS)
|
||||
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);
|
||||
if (IsWindows11Version22H2OrHigher())
|
||||
{
|
||||
RegQueryValueExW(hKey, TEXT(TWINUI_PCSHELL_SB_LAST), 0, NULL, &symbols_PTRS->twinui_pcshell_PTRS[TWINUI_PCSHELL_SB_CNT - 1], &dwSize);
|
||||
}
|
||||
RegQueryValueExW(hKey, TEXT(TWINUI_PCSHELL_SB_8), 0, NULL, &symbols_PTRS->twinui_pcshell_PTRS[8], &dwSize);
|
||||
bOffsetsValid = TRUE;
|
||||
}
|
||||
else
|
||||
@ -636,7 +772,7 @@ LoadSymbolsResult LoadSymbols(symbols_addr* symbols_PTRS)
|
||||
szStoredHash[0] = 0;
|
||||
dwSize = sizeof(szStoredHash);
|
||||
if (RegQueryValueExA(hKey, "Hash", 0, NULL, szStoredHash, &dwSize) == ERROR_SUCCESS
|
||||
&& !_stricmp(szHash, szStoredHash))
|
||||
&& !_stricmp(szHash, szStoredHash) && CheckVersion(hKey, STARTDOCKED_SB_VERSION))
|
||||
{
|
||||
dwSize = sizeof(DWORD);
|
||||
RegQueryValueExW(hKey, TEXT(STARTDOCKED_SB_0), 0, NULL, &symbols_PTRS->startdocked_PTRS[0], &dwSize);
|
||||
@ -685,7 +821,7 @@ LoadSymbolsResult LoadSymbols(symbols_addr* symbols_PTRS)
|
||||
szStoredHash[0] = 0;
|
||||
dwSize = sizeof(szStoredHash);
|
||||
if (RegQueryValueExA(hKey, "Hash", 0, NULL, szStoredHash, &dwSize) == ERROR_SUCCESS
|
||||
&& !_stricmp(szHash, szStoredHash))
|
||||
&& !_stricmp(szHash, szStoredHash) && CheckVersion(hKey, STARTUI_SB_VERSION))
|
||||
{
|
||||
dwSize = sizeof(DWORD);
|
||||
RegQueryValueExW(hKey, TEXT(STARTUI_SB_0), 0, NULL, &symbols_PTRS->startui_PTRS[0], &dwSize);
|
||||
|
@ -1,15 +1,31 @@
|
||||
#ifndef _H_SYMBOLS_H_
|
||||
#define _H_SYMBOLS_H_
|
||||
#include <Windows.h>
|
||||
|
||||
#ifndef __cplusplus
|
||||
#define _LIBVALINET_INCLUDE_UNIVERSAL
|
||||
#include <valinet/universal/toast/toast.h>
|
||||
#include <valinet/utility/osversion.h>
|
||||
#include <roapi.h>
|
||||
#include "utility.h"
|
||||
#include "../ep_gui/resources/EPSharedResources.h"
|
||||
#endif
|
||||
|
||||
#define EXIT_CODE_EXPLORER 1
|
||||
|
||||
#define EXPLORER_SB_NAME "explorer"
|
||||
#define EXPLORER_SB_0 "CImmersiveColor::GetColor"
|
||||
#define EXPLORER_SB_1 "CImmersiveColor::IsColorSchemeChangeMessage"
|
||||
#define EXPLORER_SB_2 "CImmersiveColorImpl::GetColorPreferenceImpl"
|
||||
#define EXPLORER_SB_3 "ImmersiveTray::AttachWindowToTray"
|
||||
#define EXPLORER_SB_4 "ImmersiveTray::RaiseWindow"
|
||||
#define EXPLORER_SB_5 "CTaskBand_CreateInstance"
|
||||
#define EXPLORER_SB_6 "HandleFirstTimeLegacy"
|
||||
#define EXPLORER_SB_7 "SetColorPreferenceForLogonUI"
|
||||
#define EXPLORER_SB_8 "TrayUI::_UpdatePearlSize"
|
||||
#define EXPLORER_SB_CNT 9
|
||||
#define EXPLORER_SB_VERSION 2
|
||||
|
||||
#define TWINUI_PCSHELL_SB_NAME "twinui.pcshell"
|
||||
#define TWINUI_PCSHELL_SB_0 "CImmersiveContextMenuOwnerDrawHelper::s_ContextMenuWndProc"
|
||||
#define TWINUI_PCSHELL_SB_1 "CLauncherTipContextMenu::GetMenuItemsAsync"
|
||||
@ -18,10 +34,11 @@
|
||||
#define TWINUI_PCSHELL_SB_4 "CLauncherTipContextMenu::_ExecuteShutdownCommand"
|
||||
#define TWINUI_PCSHELL_SB_5 "CLauncherTipContextMenu::_ExecuteCommand"
|
||||
#define TWINUI_PCSHELL_SB_6 "CLauncherTipContextMenu::ShowLauncherTipContextMenu"
|
||||
#define TWINUI_PCSHELL_SB_7 "IsUndockedAssetAvailable"
|
||||
#define TWINUI_PCSHELL_SB_8 "winrt::Windows::Internal::Shell::implementation::MeetAndChatManager::OnMessage" // should be always last
|
||||
#define TWINUI_PCSHELL_SB_LAST TWINUI_PCSHELL_SB_8
|
||||
#define TWINUI_PCSHELL_SB_7 "CMultitaskingViewManager::_CreateXamlMTVHost"
|
||||
#define TWINUI_PCSHELL_SB_8 "CMultitaskingViewManager::_CreateDCompMTVHost"
|
||||
#define TWINUI_PCSHELL_SB_CNT 9
|
||||
#define TWINUI_PCSHELL_SB_VERSION 1
|
||||
|
||||
#define STARTDOCKED_SB_NAME "StartDocked"
|
||||
#define STARTDOCKED_SB_0 "StartDocked::LauncherFrame::ShowAllApps" // UNUSED
|
||||
#define STARTDOCKED_SB_1 "StartDocked::LauncherFrame::ShowAllApps"
|
||||
@ -29,12 +46,21 @@
|
||||
#define STARTDOCKED_SB_3 "StartDocked::SystemListPolicyProvider::GetMaximumFrequentApps"
|
||||
#define STARTDOCKED_SB_4 "StartDocked::StartSizingFrame::StartSizingFrame"
|
||||
#define STARTDOCKED_SB_CNT 5
|
||||
#define STARTDOCKED_SB_VERSION 1
|
||||
|
||||
#define STARTUI_SB_NAME "StartUI"
|
||||
#define STARTUI_SB_0 "StartUI::SystemListPolicyProvider::GetMaximumFrequentApps"
|
||||
#define STARTUI_SB_CNT 1
|
||||
#define STARTUI_SB_VERSION 1
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
#pragma pack(push, 1)
|
||||
typedef struct symbols_addr
|
||||
{
|
||||
DWORD explorer_PTRS[EXPLORER_SB_CNT];
|
||||
DWORD twinui_pcshell_PTRS[TWINUI_PCSHELL_SB_CNT];
|
||||
DWORD startdocked_PTRS[STARTDOCKED_SB_CNT];
|
||||
DWORD startui_PTRS[STARTUI_SB_CNT];
|
||||
@ -44,6 +70,7 @@ typedef struct symbols_addr
|
||||
typedef struct _LoadSymbolsResult
|
||||
{
|
||||
BOOL bSuccess : 1;
|
||||
BOOL bNeedToDownloadExplorerSymbols : 1;
|
||||
BOOL bNeedToDownloadTwinuiPcshellSymbols : 1;
|
||||
BOOL bNeedToDownloadStartDockedSymbols : 1;
|
||||
BOOL bNeedToDownloadStartUISymbols : 1;
|
||||
@ -51,7 +78,10 @@ typedef struct _LoadSymbolsResult
|
||||
|
||||
inline BOOL NeedToDownloadSymbols(const LoadSymbolsResult* pLoadResult)
|
||||
{
|
||||
return pLoadResult->bNeedToDownloadTwinuiPcshellSymbols || pLoadResult->bNeedToDownloadStartDockedSymbols || pLoadResult->bNeedToDownloadStartUISymbols;
|
||||
return pLoadResult->bNeedToDownloadExplorerSymbols
|
||||
|| pLoadResult->bNeedToDownloadTwinuiPcshellSymbols
|
||||
|| pLoadResult->bNeedToDownloadStartDockedSymbols
|
||||
|| pLoadResult->bNeedToDownloadStartUISymbols;
|
||||
}
|
||||
|
||||
typedef struct _DownloadSymbolsParams
|
||||
@ -71,4 +101,9 @@ inline BOOL IsBuild(RTL_OSVERSIONINFOW rovi, DWORD32 ubr, DWORD BuildNumber, DWO
|
||||
rovi.dwBuildNumber == BuildNumber &&
|
||||
ubr == BuildMinor);
|
||||
}
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
|
||||
#endif
|
Loading…
Reference in New Issue
Block a user