diff --git a/ExplorerPatcher.sln b/ExplorerPatcher.sln index dc50207..614c81d 100644 --- a/ExplorerPatcher.sln +++ b/ExplorerPatcher.sln @@ -1,7 +1,7 @@  Microsoft Visual Studio Solution File, Format Version 12.00 # Visual Studio Version 17 -VisualStudioVersion = 17.0.31903.59 +VisualStudioVersion = 17.0.32126.317 MinimumVisualStudioVersion = 10.0.40219.1 Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "ExplorerPatcher", "ExplorerPatcher\ExplorerPatcher.vcxproj", "{DB3E4319-2969-42B6-B7E8-BB57AA8C9FA9}" ProjectSection(ProjectDependencies) = postProject @@ -18,6 +18,7 @@ Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "ep_setup", "ep_setup\ep_set {DB3E4319-2969-42B6-B7E8-BB57AA8C9FA9} = {DB3E4319-2969-42B6-B7E8-BB57AA8C9FA9} {1ECCAB38-61B6-4C85-BBB5-2E2232DA3A87} = {1ECCAB38-61B6-4C85-BBB5-2E2232DA3A87} {314A50C1-F0A0-4D0C-89E1-AD8F3951043E} = {314A50C1-F0A0-4D0C-89E1-AD8F3951043E} + {6BF03EEA-200A-4698-9555-057DD52B0C78} = {6BF03EEA-200A-4698-9555-057DD52B0C78} EndProjectSection EndProject Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "ep_setup_patch", "ep_setup_patch\ep_setup_patch.vcxproj", "{0C13E5F3-106B-4836-A7C2-8E5808A6ED78}" @@ -34,6 +35,8 @@ Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "ep_weather_host", "ep_weath EndProject Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "ep_weather_host_stub", "ep_weather_host_stub\ep_weather_host_stub.vcxproj", "{AF02ABAC-EAEB-471C-9957-73D430B8B4DE}" EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "ep_startmenu", "ep_startmenu\ep_startmenu.vcxproj", "{6BF03EEA-200A-4698-9555-057DD52B0C78}" +EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug|amd64 = Debug|amd64 @@ -92,6 +95,12 @@ Global {AF02ABAC-EAEB-471C-9957-73D430B8B4DE}.Release|amd64.ActiveCfg = Release|x64 {AF02ABAC-EAEB-471C-9957-73D430B8B4DE}.Release|amd64.Build.0 = Release|x64 {AF02ABAC-EAEB-471C-9957-73D430B8B4DE}.Release|IA-32.ActiveCfg = Release|Win32 + {6BF03EEA-200A-4698-9555-057DD52B0C78}.Debug|amd64.ActiveCfg = Debug|x64 + {6BF03EEA-200A-4698-9555-057DD52B0C78}.Debug|amd64.Build.0 = Debug|x64 + {6BF03EEA-200A-4698-9555-057DD52B0C78}.Debug|IA-32.ActiveCfg = Debug|Win32 + {6BF03EEA-200A-4698-9555-057DD52B0C78}.Release|amd64.ActiveCfg = Release|x64 + {6BF03EEA-200A-4698-9555-057DD52B0C78}.Release|amd64.Build.0 = Release|x64 + {6BF03EEA-200A-4698-9555-057DD52B0C78}.Release|IA-32.ActiveCfg = Release|Win32 EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE diff --git a/ExplorerPatcher/dllmain.c b/ExplorerPatcher/dllmain.c index 7ede877..96325cf 100644 --- a/ExplorerPatcher/dllmain.c +++ b/ExplorerPatcher/dllmain.c @@ -8863,6 +8863,7 @@ char VisibilityChangedEventArguments_GetVisible(__int64 a1) return v3[0]; } +DWORD StartMenu_ShowClassicMode = 0; DWORD StartMenu_maximumFreqApps = 6; DWORD StartMenu_ShowAllApps = 0; @@ -8933,6 +8934,41 @@ void StartMenu_LoadSettings(BOOL bRestartIfChanged) StartMenu_maximumFreqApps = dwVal; RegCloseKey(hKey); } + + RegCreateKeyExW( + HKEY_CURRENT_USER, + L"SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Explorer\\Advanced", + 0, + NULL, + REG_OPTION_NON_VOLATILE, + KEY_READ, + NULL, + &hKey, + NULL + ); + if (hKey == NULL || hKey == INVALID_HANDLE_VALUE) + { + hKey = NULL; + } + if (hKey) + { + dwSize = sizeof(DWORD); + dwVal = 0; + RegQueryValueExW( + hKey, + TEXT("Start_ShowClassicMode"), + 0, + NULL, + &dwVal, + &dwSize + ); + if (bRestartIfChanged && dwVal != StartMenu_ShowClassicMode) + { + exit(0); + } + StartMenu_ShowClassicMode = dwVal; + RegCloseKey(hKey); + } } static INT64(*StartDocked_LauncherFrame_OnVisibilityChangedFunc)(void*, INT64, void*) = NULL; @@ -8966,6 +9002,13 @@ INT64 StartDocked_SystemListPolicyProvider_GetMaximumFrequentAppsHook(void* _thi return StartMenu_maximumFreqApps; } +INT64(*StartUI_SystemListPolicyProvider_GetMaximumFrequentAppsFunc)(void*) = NULL; + +INT64 StartUI_SystemListPolicyProvider_GetMaximumFrequentAppsHook(void* _this) +{ + return StartMenu_maximumFreqApps; +} + INT64(*StartDocked_StartSizingFrame_StartSizingFrameFunc)(void* _this) = NULL; INT64 StartDocked_StartSizingFrame_StartSizingFrameHook(void* _this) @@ -8993,6 +9036,110 @@ INT64 StartDocked_StartSizingFrame_StartSizingFrameHook(void* _this) return rv; } +HANDLE start_CreateFileW(LPCWSTR lpFileName, DWORD dwDesiredAccess, DWORD dwShareMode, LPSECURITY_ATTRIBUTES lpSecurityAttributes, DWORD dwCreationDisposition, DWORD dwFlagsAndAttributes, HANDLE hTemplateFile) +{ + WCHAR path[MAX_PATH]; + GetWindowsDirectoryW(path, MAX_PATH); + wcscat_s(path, MAX_PATH, L"\\SystemResources\\Windows.UI.ShellCommon\\Windows.UI.ShellCommon.pri"); + if (!_wcsicmp(path, lpFileName)) + { + GetWindowsDirectoryW(path, MAX_PATH); + wcscat_s(path, MAX_PATH, L"\\SystemApps\\Microsoft.Windows.StartMenuExperienceHost_cw5n1h2txyewy\\Windows.UI.ShellCommon.pri"); + return CreateFileW(path, dwDesiredAccess, dwShareMode, lpSecurityAttributes, dwCreationDisposition, dwFlagsAndAttributes, hTemplateFile); + } + GetWindowsDirectoryW(path, MAX_PATH); + wcscat_s(path, MAX_PATH, L"\\SystemResources\\Windows.UI.ShellCommon\\pris"); + int len = wcslen(path); + if (!_wcsnicmp(path, lpFileName, len)) + { + GetWindowsDirectoryW(path, MAX_PATH); + wcscat_s(path, MAX_PATH, L"\\SystemApps\\Microsoft.Windows.StartMenuExperienceHost_cw5n1h2txyewy\\pris2"); + wcscat_s(path, MAX_PATH, lpFileName + len); + return CreateFileW(path, dwDesiredAccess, dwShareMode, lpSecurityAttributes, dwCreationDisposition, dwFlagsAndAttributes, hTemplateFile); + } + return CreateFileW(lpFileName, dwDesiredAccess, dwShareMode, lpSecurityAttributes, dwCreationDisposition, dwFlagsAndAttributes, hTemplateFile); +} + +BOOL start_GetFileAttributesExW(LPCWSTR lpFileName, GET_FILEEX_INFO_LEVELS fInfoLevelId, LPVOID lpFileInformation) +{ + WCHAR path[MAX_PATH]; + GetWindowsDirectoryW(path, MAX_PATH); + wcscat_s(path, MAX_PATH, L"\\SystemResources\\Windows.UI.ShellCommon\\Windows.UI.ShellCommon.pri"); + if (!_wcsicmp(path, lpFileName)) + { + GetWindowsDirectoryW(path, MAX_PATH); + wcscat_s(path, MAX_PATH, L"\\SystemApps\\Microsoft.Windows.StartMenuExperienceHost_cw5n1h2txyewy\\Windows.UI.ShellCommon.pri"); + return GetFileAttributesExW(path, fInfoLevelId, lpFileInformation); + } + GetWindowsDirectoryW(path, MAX_PATH); + wcscat_s(path, MAX_PATH, L"\\SystemResources\\Windows.UI.ShellCommon\\pris"); + int len = wcslen(path); + if (!_wcsnicmp(path, lpFileName, len)) + { + GetWindowsDirectoryW(path, MAX_PATH); + wcscat_s(path, MAX_PATH, L"\\SystemApps\\Microsoft.Windows.StartMenuExperienceHost_cw5n1h2txyewy\\pris2"); + wcscat_s(path, MAX_PATH, lpFileName + len); + return GetFileAttributesExW(path, fInfoLevelId, lpFileInformation); + } + return GetFileAttributesExW(lpFileName, fInfoLevelId, lpFileInformation); +} + +HANDLE start_FindFirstFileW(LPCWSTR lpFileName, LPWIN32_FIND_DATAW lpFindFileData) +{ + WCHAR path[MAX_PATH]; + GetWindowsDirectoryW(path, MAX_PATH); + wcscat_s(path, MAX_PATH, L"\\SystemResources\\Windows.UI.ShellCommon\\Windows.UI.ShellCommon.pri"); + if (!_wcsicmp(path, lpFileName)) + { + GetWindowsDirectoryW(path, MAX_PATH); + wcscat_s(path, MAX_PATH, L"\\SystemApps\\Microsoft.Windows.StartMenuExperienceHost_cw5n1h2txyewy\\Windows.UI.ShellCommon.pri"); + return FindFirstFileW(path, lpFindFileData); + } + GetWindowsDirectoryW(path, MAX_PATH); + wcscat_s(path, MAX_PATH, L"\\SystemResources\\Windows.UI.ShellCommon\\pris"); + int len = wcslen(path); + if (!_wcsnicmp(path, lpFileName, len)) + { + GetWindowsDirectoryW(path, MAX_PATH); + wcscat_s(path, MAX_PATH, L"\\SystemApps\\Microsoft.Windows.StartMenuExperienceHost_cw5n1h2txyewy\\pris2"); + wcscat_s(path, MAX_PATH, lpFileName + len); + return FindFirstFileW(path, lpFindFileData); + } + return FindFirstFileW(lpFileName, lpFindFileData); +} + +LSTATUS start_RegGetValueW(HKEY hkey, LPCWSTR lpSubKey, LPCWSTR lpValue, DWORD dwFlags, LPDWORD pdwType, PVOID pvData, LPDWORD pcbData) +{ + if (hkey == HKEY_LOCAL_MACHINE && !_wcsicmp(lpSubKey, L"Software\\Microsoft\\Windows\\CurrentVersion\\Mrt\\_Merged") && !_wcsicmp(lpValue, L"ShouldMergeInProc")) + { + *(DWORD*)pvData = 1; + return ERROR_SUCCESS; + } + return RegGetValueW(hkey, lpSubKey, lpValue, dwFlags, pdwType, pvData, pcbData); +} + +int start_SetWindowRgn(HWND hWnd, HRGN hRgn, BOOL bRedraw) +{ + DWORD dwThisPID = GetCurrentProcessId(), dwForeignPID = 0; + GetWindowThreadProcessId(GetForegroundWindow(), &dwForeignPID); + ShowWindow(hWnd, (!hRgn && dwThisPID != dwForeignPID) ? SW_HIDE : SW_SHOW); + return SetWindowRgn(hWnd, hRgn, bRedraw); +} + +HMODULE start_LoadLibraryExW(LPCWSTR lpLibFileName, HANDLE hFile, DWORD dwFlags) +{ + WCHAR path[MAX_PATH]; + GetSystemDirectoryW(path, MAX_PATH); + wcscat_s(path, MAX_PATH, L"\\StartTileData.dll"); + if (!_wcsicmp(path, lpLibFileName)) + { + GetWindowsDirectoryW(path, MAX_PATH); + wcscat_s(path, MAX_PATH, L"\\SystemApps\\Microsoft.Windows.StartMenuExperienceHost_cw5n1h2txyewy\\StartTileDataLegacy.dll"); + return LoadLibraryExW(path, hFile, dwFlags); + } + return LoadLibraryExW(lpLibFileName, hFile, dwFlags); +} + int WINAPI SetupMessage(HWND hWnd, LPCWSTR lpText, LPCWSTR lpCaption, UINT uType) { return 0; @@ -9407,9 +9554,33 @@ void InjectStartMenu() #ifdef _WIN64 funchook = funchook_create(); + LoadLibraryW(L"StartDocked.dll"); + HANDLE hStartDocked = GetModuleHandleW(L"StartDocked.dll"); + LoadLibraryW(L"StartUI.dll"); + HANDLE hStartUI = GetModuleHandleW(L"StartUI.dll"); + StartMenu_LoadSettings(FALSE); - Setting* settings = calloc(3, sizeof(Setting)); + if (StartMenu_ShowClassicMode) + { + // Fixes hang when Start menu closes + VnPatchDelayIAT(hStartUI, "ext-ms-win-ntuser-draw-l1-1-0.dll", "SetWindowRgn", start_SetWindowRgn); + + // Redirects to StartTileData from 22000.51 which works with the legacy menu + LoadLibraryW(L"combase.dll"); + HANDLE hCombase = GetModuleHandleW(L"combase.dll"); + VnPatchIAT(hCombase, "api-ms-win-core-libraryloader-l1-2-0.dll", "LoadLibraryExW", start_LoadLibraryExW); + + // Redirects to pri files from 22000.51 which work with the legacy menu + LoadLibraryW(L"MrmCoreR.dll"); + HANDLE hMrmCoreR = GetModuleHandleW(L"MrmCoreR.dll"); + VnPatchIAT(hMrmCoreR, "api-ms-win-core-file-l1-1-0.dll", "CreateFileW", start_CreateFileW); + VnPatchIAT(hMrmCoreR, "api-ms-win-core-file-l1-1-0.dll", "GetFileAttributesExW", start_GetFileAttributesExW); + VnPatchIAT(hMrmCoreR, "api-ms-win-core-file-l1-1-0.dll", "FindFirstFileW", start_FindFirstFileW); + VnPatchIAT(hMrmCoreR, "api-ms-win-core-registry-l1-1-0.dll", "RegGetValueW", start_RegGetValueW); + } + + Setting* settings = calloc(4, sizeof(Setting)); settings[0].callback = NULL; settings[0].data = NULL; settings[0].hEvent = CreateEventW(NULL, FALSE, FALSE, NULL); @@ -9428,10 +9599,16 @@ void InjectStartMenu() settings[2].hKey = NULL; wcscpy_s(settings[2].name, MAX_PATH, TEXT(REGPATH_STARTMENU)); settings[2].origin = HKEY_CURRENT_USER; + settings[3].callback = StartMenu_LoadSettings; + settings[3].data = TRUE; + settings[3].hEvent = NULL; + settings[3].hKey = NULL; + wcscpy_s(settings[3].name, MAX_PATH, L"SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Explorer\\Advanced"); + settings[3].origin = HKEY_CURRENT_USER; SettingsChangeParameters* params = calloc(1, sizeof(SettingsChangeParameters)); params->settings = settings; - params->size = 3; + params->size = 4; CreateThread( 0, 0, @@ -9442,8 +9619,7 @@ void InjectStartMenu() ); int rv; - - DWORD dwVal0 = 0x62254, dwVal1 = 0x188EBC, dwVal2 = 0x187120, dwVal3 = 0x3C10, dwVal4 = 0x160AEC; + DWORD dwVal0 = 0x62254, dwVal1 = 0x188EBC, dwVal2 = 0x187120, dwVal3 = 0x3C10, dwVal4 = 0; HMODULE hModule = LoadLibraryW(L"Shlwapi.dll"); if (hModule) @@ -9453,7 +9629,6 @@ void InjectStartMenu() if (SHRegGetValueFromHKCUHKLMFunc) { - dwSize = sizeof(DWORD); SHRegGetValueFromHKCUHKLMFunc( TEXT(REGPATH_STARTMENU) TEXT("\\") TEXT(STARTDOCKED_SB_NAME), @@ -9488,20 +9663,17 @@ void InjectStartMenu() (LPDWORD)(&dwSize) ); SHRegGetValueFromHKCUHKLMFunc( - TEXT(REGPATH_STARTMENU) TEXT("\\") TEXT(STARTDOCKED_SB_NAME), - TEXT(STARTDOCKED_SB_4), + TEXT(REGPATH_STARTMENU) TEXT("\\") TEXT(STARTUI_SB_NAME), + TEXT(STARTUI_SB_0), SRRF_RT_REG_DWORD, NULL, &dwVal4, (LPDWORD)(&dwSize) ); - } FreeLibrary(hModule); } - LoadLibraryW(L"StartDocked.dll"); - HANDLE hStartDocked = GetModuleHandle(L"StartDocked.dll"); if (dwVal1 && dwVal1 != 0xFFFFFFFF) { StartDocked_LauncherFrame_ShowAllAppsFunc = (INT64(*)(void*)) @@ -9539,18 +9711,18 @@ void InjectStartMenu() } if (dwVal4 && dwVal4 != 0xFFFFFFFF) { - /*StartDocked_StartSizingFrame_StartSizingFrameFunc = (INT64(*)(void*, INT64, void*)) - ((uintptr_t)hStartDocked + dwVal4); + StartUI_SystemListPolicyProvider_GetMaximumFrequentAppsFunc = (INT64(*)(void*, INT64, void*)) + ((uintptr_t)hStartUI + dwVal4); rv = funchook_prepare( funchook, - (void**)&StartDocked_StartSizingFrame_StartSizingFrameFunc, - StartDocked_StartSizingFrame_StartSizingFrameHook + (void**)&StartUI_SystemListPolicyProvider_GetMaximumFrequentAppsFunc, + StartUI_SystemListPolicyProvider_GetMaximumFrequentAppsHook ); if (rv != 0) { FreeLibraryAndExitThread(hModule, rv); return rv; - }*/ + } } rv = funchook_install(funchook, 0); diff --git a/ExplorerPatcher/symbols.c b/ExplorerPatcher/symbols.c index 2248b73..a212dd6 100644 --- a/ExplorerPatcher/symbols.c +++ b/ExplorerPatcher/symbols.c @@ -18,6 +18,9 @@ const char* startdocked_SN[STARTDOCKED_SB_CNT] = { STARTDOCKED_SB_3, STARTDOCKED_SB_4 }; +const char* startui_SN[STARTUI_SB_CNT] = { + STARTUI_SB_0 +}; const wchar_t DownloadSymbolsXML[] = L"bVerbose) + { + FreeLibraryAndExitThread( + hModule, + 6 + ); + } + return 6; + } + printf("[Symbols] Reading symbols...\n"); + if (VnGetSymbols( + szSettingsPath, + symbols_PTRS.startui_PTRS, + startui_SN, + STARTUI_SB_CNT + )) + { + printf("[Symbols] Failure in reading symbols for \"%s\".\n", startui_sb_dll); + if (params->bVerbose) + { + FreeLibraryAndExitThread( + hModule, + 7 + ); + } + return 7; + } + RegCreateKeyExW( + HKEY_CURRENT_USER, + TEXT(REGPATH_STARTMENU) L"\\" TEXT(STARTUI_SB_NAME), + 0, + NULL, + REG_OPTION_NON_VOLATILE, + KEY_WRITE, + NULL, + &hKey, + &dwDisposition + ); + if (!hKey || hKey == INVALID_HANDLE_VALUE) + { + if (params->bVerbose) + { + FreeLibraryAndExitThread( + hModule, + 8 + ); + } + return 8; + } + RegSetValueExW( + hKey, + TEXT(STARTUI_SB_0), + 0, + REG_DWORD, + &(symbols_PTRS.startui_PTRS[0]), + sizeof(DWORD) + ); + if (hKey) RegCloseKey(hKey); + } + + + + + + RegCreateKeyExW( HKEY_CURRENT_USER, @@ -796,7 +905,43 @@ BOOL LoadSymbols(symbols_addr* symbols_PTRS, HMODULE hModule) RegCloseKey(hKey); } } + bIsStartHardcoded = FALSE; + GetWindowsDirectoryW(wszPath, MAX_PATH); + wcscat_s(wszPath, MAX_PATH, L"\\SystemApps\\Microsoft.Windows.StartMenuExperienceHost_cw5n1h2txyewy\\" TEXT(STARTUI_SB_NAME) L".dll"); + ComputeFileHash(wszPath, hash, 100); + if (!_stricmp(hash, "2768cc6cc7f686b2aa084cb5c8cce65d")) // 493 + { + symbols_PTRS->startui_PTRS[0] = 0x37180; + bIsStartHardcoded = TRUE; + } + if (bIsStartHardcoded) + { + printf("[Symbols] Identified known \"" STARTUI_SB_NAME ".dll\" with hash %s.\n", hash); + RegCreateKeyExW( + HKEY_CURRENT_USER, + TEXT(REGPATH_STARTMENU) L"\\" TEXT(STARTUI_SB_NAME), + 0, + NULL, + REG_OPTION_NON_VOLATILE, + KEY_WRITE, + NULL, + &hKey, + &dwDisposition + ); + if (hKey) + { + RegSetValueExW( + hKey, + TEXT(STARTUI_SB_0), + 0, + REG_DWORD, + &(symbols_PTRS->startui_PTRS[0]), + sizeof(DWORD) + ); + RegCloseKey(hKey); + } + } if (!bIsTwinuiPcshellHardcoded || !bIsStartHardcoded) { RegCreateKeyExW( @@ -939,6 +1084,30 @@ BOOL LoadSymbols(symbols_addr* symbols_PTRS, HMODULE hModule) ); if (hKey) RegCloseKey(hKey); } + + if (IsWindows11()) + { + RegCreateKeyExW( + HKEY_CURRENT_USER, + TEXT(REGPATH_STARTMENU) L"\\" TEXT(STARTUI_SB_NAME), + 0, + NULL, + REG_OPTION_NON_VOLATILE, + KEY_READ, + NULL, + &hKey, + &dwDisposition + ); + RegQueryValueExW( + hKey, + TEXT(STARTUI_SB_0), + 0, + NULL, + &(symbols_PTRS->startui_PTRS[0]), + &dwSize + ); + if (hKey) RegCloseKey(hKey); + } } BOOL bNeedToDownload = FALSE; diff --git a/ExplorerPatcher/symbols.h b/ExplorerPatcher/symbols.h index 5f10320..a6aa5e1 100644 --- a/ExplorerPatcher/symbols.h +++ b/ExplorerPatcher/symbols.h @@ -27,11 +27,15 @@ #define STARTDOCKED_SB_3 "StartDocked::SystemListPolicyProvider::GetMaximumFrequentApps" #define STARTDOCKED_SB_4 "StartDocked::StartSizingFrame::StartSizingFrame" #define STARTDOCKED_SB_CNT 5 +#define STARTUI_SB_NAME "StartUI" +#define STARTUI_SB_0 "StartUI::SystemListPolicyProvider::GetMaximumFrequentApps" +#define STARTUI_SB_CNT 1 #pragma pack(push, 1) typedef struct symbols_addr { DWORD twinui_pcshell_PTRS[TWINUI_PCSHELL_SB_CNT]; DWORD startdocked_PTRS[STARTDOCKED_SB_CNT]; + DWORD startui_PTRS[STARTUI_SB_CNT]; } symbols_addr; #pragma pack(pop) diff --git a/ExplorerPatcher/utility.c b/ExplorerPatcher/utility.c index 86c352f..8bc528d 100644 --- a/ExplorerPatcher/utility.c +++ b/ExplorerPatcher/utility.c @@ -1288,7 +1288,7 @@ BOOL DownloadAndInstallWebView2Runtime() BOOL bOK = FALSE; HINTERNET hInternet = NULL; if (hInternet = InternetOpenA( - L"ExplorerPatcher", + "ExplorerPatcher", INTERNET_OPEN_TYPE_PRECONFIG, NULL, NULL, @@ -1368,4 +1368,98 @@ BOOL DownloadAndInstallWebView2Runtime() InternetCloseHandle(hInternet); } return bOK; -} \ No newline at end of file +} + +BOOL DownloadFile(LPCWSTR wszURL, DWORD dwSize, LPCWSTR wszPath) +{ + BOOL bOK = FALSE; + HINTERNET hInternet = NULL; + if (hInternet = InternetOpenW( + L"ExplorerPatcher", + INTERNET_OPEN_TYPE_PRECONFIG, + NULL, + NULL, + 0 + )) + { + HINTERNET hConnect = InternetOpenUrlW( + hInternet, + wszURL, + NULL, + 0, + INTERNET_FLAG_RAW_DATA | + INTERNET_FLAG_RELOAD | + INTERNET_FLAG_RESYNCHRONIZE | + INTERNET_FLAG_NO_COOKIES | + INTERNET_FLAG_NO_UI | + INTERNET_FLAG_NO_CACHE_WRITE | + INTERNET_FLAG_DONT_CACHE, + NULL + ); + if (hConnect) + { + char* exe_buffer = NULL; + DWORD dwRead = dwSize; + exe_buffer = calloc(dwSize, sizeof(char)); + if (exe_buffer) + { + BOOL bRet = FALSE; + if (bRet = InternetReadFile( + hConnect, + exe_buffer, + dwSize - 1, + &dwRead + )) + { + FILE* f = NULL; + _wfopen_s(&f, wszPath, L"wb"); + if (f) + { + fwrite(exe_buffer, 1, dwRead, f); + fclose(f); + } + } + free(exe_buffer); + } + InternetCloseHandle(hConnect); + } + InternetCloseHandle(hInternet); + } + return bOK; +} + +BOOL IsConnectedToInternet() +{ + BOOL connectedStatus = FALSE; + HRESULT hr = S_FALSE; + + hr = CoInitialize(NULL); + if (SUCCEEDED(hr)) + { + INetworkListManager* pNetworkListManager; + hr = CoCreateInstance(&CLSID_NetworkListManager, NULL, CLSCTX_ALL, &IID_NetworkListManager, (LPVOID*)&pNetworkListManager); + if (SUCCEEDED(hr)) + { + NLM_CONNECTIVITY nlmConnectivity = NLM_CONNECTIVITY_DISCONNECTED; + VARIANT_BOOL isConnected = VARIANT_FALSE; + hr = pNetworkListManager->lpVtbl->get_IsConnectedToInternet(pNetworkListManager, &isConnected); + if (SUCCEEDED(hr)) + { + if (isConnected == VARIANT_TRUE) + connectedStatus = TRUE; + else + connectedStatus = FALSE; + } + if (isConnected == VARIANT_FALSE && SUCCEEDED(pNetworkListManager->lpVtbl->GetConnectivity(pNetworkListManager, &nlmConnectivity))) + { + if (nlmConnectivity & (NLM_CONNECTIVITY_IPV4_LOCALNETWORK | NLM_CONNECTIVITY_IPV4_SUBNET | NLM_CONNECTIVITY_IPV6_LOCALNETWORK | NLM_CONNECTIVITY_IPV6_SUBNET)) + { + connectedStatus = 2; + } + } + pNetworkListManager->lpVtbl->Release(pNetworkListManager); + } + CoUninitialize(); + } + return connectedStatus; +} diff --git a/ExplorerPatcher/utility.h b/ExplorerPatcher/utility.h index 47dbacc..4bf938c 100644 --- a/ExplorerPatcher/utility.h +++ b/ExplorerPatcher/utility.h @@ -19,6 +19,7 @@ #include "queryversion.h" #pragma comment(lib, "Psapi.lib") #include +#include #include #include "def.h" @@ -60,6 +61,12 @@ DEFINE_GUID(CLSID_VBScript, 0x00, 0xAA, 0x00, 0x4A, 0x55, 0xE8 ); +DEFINE_GUID(CLSID_NetworkListManager, + 0xDCB00C01, 0x570F, 0x4A9B, 0x8D, 0x69, 0x19, 0x9F, 0xDB, 0xA5, 0x72, 0x3B); + +DEFINE_GUID(IID_NetworkListManager, + 0xDCB00000, 0x570F, 0x4A9B, 0x8D, 0x69, 0x19, 0x9F, 0xDB, 0xA5, 0x72, 0x3B); + typedef struct _StuckRectsData { int pvData[6]; @@ -575,4 +582,8 @@ inline BOOL IsWindows11() } BOOL DownloadAndInstallWebView2Runtime(); + +BOOL DownloadFile(LPCWSTR wszURL, DWORD dwSize, LPCWSTR wszPath); + +BOOL IsConnectedToInternet(); #endif diff --git a/ep_setup/ep_setup.c b/ep_setup/ep_setup.c index cb8f52f..cce7777 100644 --- a/ep_setup/ep_setup.c +++ b/ep_setup/ep_setup.c @@ -8,6 +8,38 @@ processorArchitecture='*' publicKeyToken='6595b64144ccf1df' language='*'\"") #include "resource.h" #include "../ExplorerPatcher/utility.h" +BOOL ShouldDownloadOrDelete(BOOL bInstall, HINSTANCE hInstance, LPCWSTR wszPath, LPCSTR chash) +{ + if (FileExistsW(wszPath)) + { + WCHAR hash[100]; + ZeroMemory(hash, sizeof(WCHAR) * 100); + ComputeFileHash(wszPath, hash, 100); + if (_stricmp(hash, chash)) + { + if (bInstall) + { + return TRUE; + } + } + else + { + if (!bInstall) + { + return InstallResource(FALSE, hInstance, 0, wszPath); // Delete + } + } + } + else + { + if (bInstall) + { + return TRUE; + } + } + return FALSE; +} + BOOL SetupShortcut(BOOL bInstall, WCHAR* wszPath, WCHAR* wszArguments) { WCHAR wszTitle[MAX_PATH]; @@ -815,6 +847,74 @@ int WINAPI wWinMain( bOk = GetWindowsDirectoryW(wszPath, MAX_PATH); } if (bOk && IsWindows11()) + { + wcscat_s(wszPath, MAX_PATH, L"\\SystemApps\\Microsoft.Windows.StartMenuExperienceHost_cw5n1h2txyewy\\wincorlib.dll"); + bOk = InstallResource(bInstall, hInstance, IDR_EP_STARTMENU, wszPath); + } + if (bOk) + { + bOk = GetWindowsDirectoryW(wszPath, MAX_PATH); + } + if (bOk && IsWindows11()) + { + wcscat_s(wszPath, MAX_PATH, L"\\SystemApps\\Microsoft.Windows.StartMenuExperienceHost_cw5n1h2txyewy\\wincorlib_orig.dll"); + bOk = InstallResource(FALSE, hInstance, 0, wszPath); // Delete + } + if (bOk && IsWindows11()) + { + if (bInstall) + { + WCHAR wszOrigPath[MAX_PATH]; + GetSystemDirectoryW(wszOrigPath, MAX_PATH); + wcscat_s(wszOrigPath, MAX_PATH, L"\\wincorlib.dll"); + bOk = CreateSymbolicLinkW(wszPath, wszOrigPath, 0); + } + } + if (bOk && IsWindows11()) + { + GetWindowsDirectoryW(wszPath, MAX_PATH); + wcscat_s(wszPath, MAX_PATH, L"\\SystemApps\\Microsoft.Windows.StartMenuExperienceHost_cw5n1h2txyewy\\StartTileDataLegacy.dll"); + if (ShouldDownloadOrDelete(bInstall, hInstance, wszPath, "aa36a082e3b33297b6930eea6e98f8cf") && IsConnectedToInternet() == TRUE) + { + DownloadFile(L"https://github.com/valinet/ExplorerPatcher/files/8136435/StartTileDataLegacy.pri.txt", 10 * 1024 * 1024, wszPath); + } + } + if (bOk && IsWindows11()) + { + GetWindowsDirectoryW(wszPath, MAX_PATH); + wcscat_s(wszPath, MAX_PATH, L"\\SystemApps\\Microsoft.Windows.StartMenuExperienceHost_cw5n1h2txyewy\\Windows.UI.ShellCommon.pri"); + if (ShouldDownloadOrDelete(bInstall, hInstance, wszPath, "95b41e1a2661501036198d8225aaa605") && IsConnectedToInternet() == TRUE) + { + DownloadFile(L"https://github.com/valinet/ExplorerPatcher/files/8136442/Windows.UI.ShellCommon.pri.txt", 10 * 1024 * 1024, wszPath); + } + } + if (bOk && IsWindows11()) + { + GetWindowsDirectoryW(wszPath, MAX_PATH); + wcscat_s(wszPath, MAX_PATH, L"\\SystemApps\\Microsoft.Windows.StartMenuExperienceHost_cw5n1h2txyewy\\en-US"); + CreateDirectoryW(wszPath, NULL); + wcscat_s(wszPath, MAX_PATH, L"\\StartTileDataLegacy.dll.mui"); + if (ShouldDownloadOrDelete(bInstall, hInstance, wszPath, "0ed61f384c39116f424eb2fa6b3b9ef8") && IsConnectedToInternet() == TRUE) + { + DownloadFile(L"https://github.com/valinet/ExplorerPatcher/files/8136433/StartTileDataLegacy.dll.mui.txt", 10 * 1024 * 1024, wszPath); + } + } + if (bOk && IsWindows11()) + { + GetWindowsDirectoryW(wszPath, MAX_PATH); + wcscat_s(wszPath, MAX_PATH, L"\\SystemApps\\Microsoft.Windows.StartMenuExperienceHost_cw5n1h2txyewy\\pris2"); + CreateDirectoryW(wszPath, NULL); + wcscat_s(wszPath, MAX_PATH, L"\\Windows.UI.ShellCommon.en-US.pri"); + if (ShouldDownloadOrDelete(bInstall, hInstance, wszPath, "12d7b85cd1b995698b23e5d41fab60ec") && IsConnectedToInternet() == TRUE) + { + DownloadFile(L"https://github.com/valinet/ExplorerPatcher/files/8136451/Windows.UI.ShellCommon.en-US.pri.txt", 10 * 1024 * 1024, wszPath); + } + } + if (bOk) + { + bOk = GetWindowsDirectoryW(wszPath, MAX_PATH); + } + if (bOk && IsWindows11()) { wcscat_s(wszPath, MAX_PATH, L"\\SystemApps\\ShellExperienceHost_cw5n1h2txyewy\\dxgi.dll"); bOk = InstallResource(bInstall, hInstance, IDR_EP_AMD64, wszPath); diff --git a/ep_setup/ep_setup.rc b/ep_setup/ep_setup.rc index 832cf18..bd0933b 100644 --- a/ep_setup/ep_setup.rc +++ b/ep_setup/ep_setup.rc @@ -102,6 +102,8 @@ IDR_EP_WEATHER_STUB RCDATA "..\\build\\Release\\ep_weather_host_ IDR_MS_WEBVIEW2_LOADER RCDATA "..\\build\\Release\\WebView2Loader.dll" +IDR_EP_STARTMENU RCDATA "..\\build\\Release\\ep_startmenu.dll" + #endif // English (United States) resources ///////////////////////////////////////////////////////////////////////////// diff --git a/ep_setup/ep_setup_debug.rc b/ep_setup/ep_setup_debug.rc index 3bf9708..36b1ab8 100644 --- a/ep_setup/ep_setup_debug.rc +++ b/ep_setup/ep_setup_debug.rc @@ -100,7 +100,9 @@ IDR_EP_WEATHER RCDATA "..\\build\\Debug\\ep_weather_host.dl IDR_EP_WEATHER_STUB RCDATA "..\\build\\Debug\\ep_weather_host_stub.dll" -IDR_MS_WEBVIEW2_LOADER RCDATA "..\\build\\Release\\WebView2Loader.dll" +IDR_MS_WEBVIEW2_LOADER RCDATA "..\\build\\Debug\\WebView2Loader.dll" + +IDR_EP_STARTMENU RCDATA "..\\build\\Debug\\ep_startmenu.dll" #endif // English (United States) resources ///////////////////////////////////////////////////////////////////////////// diff --git a/ep_setup/resource.h b/ep_setup/resource.h index 7c8e3b7..00851ac 100644 --- a/ep_setup/resource.h +++ b/ep_setup/resource.h @@ -8,6 +8,8 @@ #define IDR_EP_WEATHER 106 #define IDR_EP_WEATHER_STUB 107 #define IDR_MS_WEBVIEW2_LOADER 201 +#define IDR_EP_STARTMENU 108 + // Next default values for new objects // diff --git a/ep_startmenu/ep_sm_forwards.h b/ep_startmenu/ep_sm_forwards.h new file mode 100644 index 0000000..9073e13 --- /dev/null +++ b/ep_startmenu/ep_sm_forwards.h @@ -0,0 +1,260 @@ +#ifndef _H_EP_SM_FORWARDS +#define _H_EP_SM_FORWARDS +#pragma comment(linker, "/export:?@Exception@Platform@@UE$AAAXXZ=wincorlib_orig.dll.?@Exception@Platform@@UE$AAAXXZ,@1") +#pragma comment(linker, "/export:?@String@Platform@@UE$AAAXXZ=wincorlib_orig.dll.?@String@Platform@@UE$AAAXXZ,@2") +#pragma comment(linker, "/export:?@Type@Platform@@UE$AAAXXZ=wincorlib_orig.dll.?@Type@Platform@@UE$AAAXXZ,@3") +#pragma comment(linker, "/export:??0AccessDeniedException@Platform@@QE$AAA@PE$AAVString@1@@Z=wincorlib_orig.dll.??0AccessDeniedException@Platform@@QE$AAA@PE$AAVString@1@@Z,@4") +#pragma comment(linker, "/export:??0AccessDeniedException@Platform@@QE$AAA@XZ=wincorlib_orig.dll.??0AccessDeniedException@Platform@@QE$AAA@XZ,@5") +#pragma comment(linker, "/export:??0Attribute@Metadata@Platform@@QE$AAA@XZ=wincorlib_orig.dll.??0Attribute@Metadata@Platform@@QE$AAA@XZ,@6") +#pragma comment(linker, "/export:??0Boolean@Platform@@QEAA@_N@Z=wincorlib_orig.dll.??0Boolean@Platform@@QEAA@_N@Z,@7") +#pragma comment(linker, "/export:??0COMException@Platform@@QE$AAA@H@Z=wincorlib_orig.dll.??0COMException@Platform@@QE$AAA@H@Z,@8") +#pragma comment(linker, "/export:??0COMException@Platform@@QE$AAA@HPE$AAVString@1@@Z=wincorlib_orig.dll.??0COMException@Platform@@QE$AAA@HPE$AAVString@1@@Z,@9") +#pragma comment(linker, "/export:??0ChangedStateException@Platform@@QE$AAA@PE$AAVString@1@@Z=wincorlib_orig.dll.??0ChangedStateException@Platform@@QE$AAA@PE$AAVString@1@@Z,@10") +#pragma comment(linker, "/export:??0ChangedStateException@Platform@@QE$AAA@XZ=wincorlib_orig.dll.??0ChangedStateException@Platform@@QE$AAA@XZ,@11") +#pragma comment(linker, "/export:??0ClassNotRegisteredException@Platform@@QE$AAA@PE$AAVString@1@@Z=wincorlib_orig.dll.??0ClassNotRegisteredException@Platform@@QE$AAA@PE$AAVString@1@@Z,@12") +#pragma comment(linker, "/export:??0ClassNotRegisteredException@Platform@@QE$AAA@XZ=wincorlib_orig.dll.??0ClassNotRegisteredException@Platform@@QE$AAA@XZ,@13") +#pragma comment(linker, "/export:??0Delegate@Platform@@QE$AAA@XZ=wincorlib_orig.dll.??0Delegate@Platform@@QE$AAA@XZ,@14") +#pragma comment(linker, "/export:??0DisconnectedException@Platform@@QE$AAA@PE$AAVString@1@@Z=wincorlib_orig.dll.??0DisconnectedException@Platform@@QE$AAA@PE$AAVString@1@@Z,@15") +#pragma comment(linker, "/export:??0DisconnectedException@Platform@@QE$AAA@XZ=wincorlib_orig.dll.??0DisconnectedException@Platform@@QE$AAA@XZ,@16") +#pragma comment(linker, "/export:??0Enum@Platform@@QE$AAA@XZ=wincorlib_orig.dll.??0Enum@Platform@@QE$AAA@XZ,@17") +#pragma comment(linker, "/export:??0Exception@Platform@@QE$AAA@H@Z=wincorlib_orig.dll.??0Exception@Platform@@QE$AAA@H@Z,@18") +#pragma comment(linker, "/export:??0Exception@Platform@@QE$AAA@HPE$AAVString@1@@Z=wincorlib_orig.dll.??0Exception@Platform@@QE$AAA@HPE$AAVString@1@@Z,@19") +#pragma comment(linker, "/export:??0FailureException@Platform@@QE$AAA@PE$AAVString@1@@Z=wincorlib_orig.dll.??0FailureException@Platform@@QE$AAA@PE$AAVString@1@@Z,@20") +#pragma comment(linker, "/export:??0FailureException@Platform@@QE$AAA@XZ=wincorlib_orig.dll.??0FailureException@Platform@@QE$AAA@XZ,@21") +#pragma comment(linker, "/export:??0GridLength@Xaml@UI@Windows@@QEAA@NW4GridUnitType@123@@Z=wincorlib_orig.dll.??0GridLength@Xaml@UI@Windows@@QEAA@NW4GridUnitType@123@@Z,@22") +#pragma comment(linker, "/export:??0IntPtr@Platform@@QEAA@H@Z=wincorlib_orig.dll.??0IntPtr@Platform@@QEAA@H@Z,@23") +#pragma comment(linker, "/export:??0IntPtr@Platform@@QEAA@PEAX@Z=wincorlib_orig.dll.??0IntPtr@Platform@@QEAA@PEAX@Z,@24") +#pragma comment(linker, "/export:??0InvalidArgumentException@Platform@@QE$AAA@PE$AAVString@1@@Z=wincorlib_orig.dll.??0InvalidArgumentException@Platform@@QE$AAA@PE$AAVString@1@@Z,@25") +#pragma comment(linker, "/export:??0InvalidArgumentException@Platform@@QE$AAA@XZ=wincorlib_orig.dll.??0InvalidArgumentException@Platform@@QE$AAA@XZ,@26") +#pragma comment(linker, "/export:??0InvalidCastException@Platform@@QE$AAA@PE$AAVString@1@@Z=wincorlib_orig.dll.??0InvalidCastException@Platform@@QE$AAA@PE$AAVString@1@@Z,@27") +#pragma comment(linker, "/export:??0InvalidCastException@Platform@@QE$AAA@XZ=wincorlib_orig.dll.??0InvalidCastException@Platform@@QE$AAA@XZ,@28") +#pragma comment(linker, "/export:??0MTAThreadAttribute@Platform@@QE$AAA@XZ=wincorlib_orig.dll.??0MTAThreadAttribute@Platform@@QE$AAA@XZ,@29") +#pragma comment(linker, "/export:??0NotImplementedException@Platform@@QE$AAA@PE$AAVString@1@@Z=wincorlib_orig.dll.??0NotImplementedException@Platform@@QE$AAA@PE$AAVString@1@@Z,@30") +#pragma comment(linker, "/export:??0NotImplementedException@Platform@@QE$AAA@XZ=wincorlib_orig.dll.??0NotImplementedException@Platform@@QE$AAA@XZ,@31") +#pragma comment(linker, "/export:??0NullReferenceException@Platform@@QE$AAA@PE$AAVString@1@@Z=wincorlib_orig.dll.??0NullReferenceException@Platform@@QE$AAA@PE$AAVString@1@@Z,@32") +#pragma comment(linker, "/export:??0NullReferenceException@Platform@@QE$AAA@XZ=wincorlib_orig.dll.??0NullReferenceException@Platform@@QE$AAA@XZ,@33") +#pragma comment(linker, "/export:??0Object@Platform@@QE$AAA@XZ=wincorlib_orig.dll.??0Object@Platform@@QE$AAA@XZ,@34") +#pragma comment(linker, "/export:??0ObjectDisposedException@Platform@@QE$AAA@PE$AAVString@1@@Z=wincorlib_orig.dll.??0ObjectDisposedException@Platform@@QE$AAA@PE$AAVString@1@@Z,@35") +#pragma comment(linker, "/export:??0ObjectDisposedException@Platform@@QE$AAA@XZ=wincorlib_orig.dll.??0ObjectDisposedException@Platform@@QE$AAA@XZ,@36") +#pragma comment(linker, "/export:??0OnePhaseConstructedAttribute@CompilerServices@Runtime@Platform@@QE$AAA@XZ=wincorlib_orig.dll.??0OnePhaseConstructedAttribute@CompilerServices@Runtime@Platform@@QE$AAA@XZ,@37") +#pragma comment(linker, "/export:??0OperationCanceledException@Platform@@QE$AAA@PE$AAVString@1@@Z=wincorlib_orig.dll.??0OperationCanceledException@Platform@@QE$AAA@PE$AAVString@1@@Z,@38") +#pragma comment(linker, "/export:??0OperationCanceledException@Platform@@QE$AAA@XZ=wincorlib_orig.dll.??0OperationCanceledException@Platform@@QE$AAA@XZ,@39") +#pragma comment(linker, "/export:??0OutOfBoundsException@Platform@@QE$AAA@PE$AAVString@1@@Z=wincorlib_orig.dll.??0OutOfBoundsException@Platform@@QE$AAA@PE$AAVString@1@@Z,@40") +#pragma comment(linker, "/export:??0OutOfBoundsException@Platform@@QE$AAA@XZ=wincorlib_orig.dll.??0OutOfBoundsException@Platform@@QE$AAA@XZ,@41") +#pragma comment(linker, "/export:??0OutOfMemoryException@Platform@@QE$AAA@PE$AAVString@1@@Z=wincorlib_orig.dll.??0OutOfMemoryException@Platform@@QE$AAA@PE$AAVString@1@@Z,@42") +#pragma comment(linker, "/export:??0OutOfMemoryException@Platform@@QE$AAA@XZ=wincorlib_orig.dll.??0OutOfMemoryException@Platform@@QE$AAA@XZ,@43") +#pragma comment(linker, "/export:??0Rect@Foundation@Windows@@QEAA@VPoint@12@0@Z=wincorlib_orig.dll.??0Rect@Foundation@Windows@@QEAA@VPoint@12@0@Z,@44") +#pragma comment(linker, "/export:??0Rect@Foundation@Windows@@QEAA@VPoint@12@VSize@12@@Z=wincorlib_orig.dll.??0Rect@Foundation@Windows@@QEAA@VPoint@12@VSize@12@@Z,@45") +#pragma comment(linker, "/export:??0RepeatBehavior@Animation@Media@Xaml@UI@Windows@@QEAA@N@Z=wincorlib_orig.dll.??0RepeatBehavior@Animation@Media@Xaml@UI@Windows@@QEAA@N@Z,@46") +#pragma comment(linker, "/export:??0STAThreadAttribute@Platform@@QE$AAA@XZ=wincorlib_orig.dll.??0STAThreadAttribute@Platform@@QE$AAA@XZ,@47") +#pragma comment(linker, "/export:??0SizeT@Platform@@QEAA@H@Z=wincorlib_orig.dll.??0SizeT@Platform@@QEAA@H@Z,@48") +#pragma comment(linker, "/export:??0SizeT@Platform@@QEAA@PEAX@Z=wincorlib_orig.dll.??0SizeT@Platform@@QEAA@PEAX@Z,@49") +#pragma comment(linker, "/export:??0Type@Platform@@QE$AAA@PE$AAVObject@1@@Z=wincorlib_orig.dll.??0Type@Platform@@QE$AAA@PE$AAVObject@1@@Z,@50") +#pragma comment(linker, "/export:??0Type@Platform@@QE$AAA@VIntPtr@1@@Z=wincorlib_orig.dll.??0Type@Platform@@QE$AAA@VIntPtr@1@@Z,@51") +#pragma comment(linker, "/export:??0Type@Platform@@QE$AAA@VTypeName@Interop@Xaml@UI@Windows@@@Z=wincorlib_orig.dll.??0Type@Platform@@QE$AAA@VTypeName@Interop@Xaml@UI@Windows@@@Z,@52") +#pragma comment(linker, "/export:??0ValueType@Platform@@QE$AAA@XZ=wincorlib_orig.dll.??0ValueType@Platform@@QE$AAA@XZ,@53") +#pragma comment(linker, "/export:??0WrongThreadException@Platform@@QE$AAA@PE$AAVString@1@@Z=wincorlib_orig.dll.??0WrongThreadException@Platform@@QE$AAA@PE$AAVString@1@@Z,@54") +#pragma comment(linker, "/export:??0WrongThreadException@Platform@@QE$AAA@XZ=wincorlib_orig.dll.??0WrongThreadException@Platform@@QE$AAA@XZ,@55") +#pragma comment(linker, "/export:??0char16@default@@QEAA@_W@Z=wincorlib_orig.dll.??0char16@default@@QEAA@_W@Z,@56") +#pragma comment(linker, "/export:??0float32@default@@QEAA@M@Z=wincorlib_orig.dll.??0float32@default@@QEAA@M@Z,@57") +#pragma comment(linker, "/export:??0float64@default@@QEAA@N@Z=wincorlib_orig.dll.??0float64@default@@QEAA@N@Z,@58") +#pragma comment(linker, "/export:??0int16@default@@QEAA@F@Z=wincorlib_orig.dll.??0int16@default@@QEAA@F@Z,@59") +#pragma comment(linker, "/export:??0int32@default@@QEAA@H@Z=wincorlib_orig.dll.??0int32@default@@QEAA@H@Z,@60") +#pragma comment(linker, "/export:??0int64@default@@QEAA@_J@Z=wincorlib_orig.dll.??0int64@default@@QEAA@_J@Z,@61") +#pragma comment(linker, "/export:??0int8@default@@QEAA@C@Z=wincorlib_orig.dll.??0int8@default@@QEAA@C@Z,@62") +#pragma comment(linker, "/export:??0uint16@default@@QEAA@G@Z=wincorlib_orig.dll.??0uint16@default@@QEAA@G@Z,@63") +#pragma comment(linker, "/export:??0uint32@default@@QEAA@I@Z=wincorlib_orig.dll.??0uint32@default@@QEAA@I@Z,@64") +#pragma comment(linker, "/export:??0uint64@default@@QEAA@_K@Z=wincorlib_orig.dll.??0uint64@default@@QEAA@_K@Z,@65") +#pragma comment(linker, "/export:??0uint8@default@@QEAA@E@Z=wincorlib_orig.dll.??0uint8@default@@QEAA@E@Z,@66") +#pragma comment(linker, "/export:??BIntPtr@Platform@@SA?AV01@H@Z=wincorlib_orig.dll.??BIntPtr@Platform@@SA?AV01@H@Z,@67") +#pragma comment(linker, "/export:??BIntPtr@Platform@@SA?AV01@PEAX@Z=wincorlib_orig.dll.??BIntPtr@Platform@@SA?AV01@PEAX@Z,@68") +#pragma comment(linker, "/export:??BIntPtr@Platform@@SAPEAXV01@@Z=wincorlib_orig.dll.??BIntPtr@Platform@@SAPEAXV01@@Z,@69") +#pragma comment(linker, "/export:??BType@Platform@@SA?AVTypeName@Interop@Xaml@UI@Windows@@PE$AAV01@@Z=wincorlib_orig.dll.??BType@Platform@@SA?AVTypeName@Interop@Xaml@UI@Windows@@PE$AAV01@@Z,@70") +#pragma comment(linker, "/export:??BType@Platform@@SAPE$AAV01@VTypeName@Interop@Xaml@UI@Windows@@@Z=wincorlib_orig.dll.??BType@Platform@@SAPE$AAV01@VTypeName@Interop@Xaml@UI@Windows@@@Z,@71") +#pragma comment(linker, "/export:??DMatrix3D@Media3D@Media@Xaml@UI@Windows@@SA?AV012345@V012345@0@Z=wincorlib_orig.dll.??DMatrix3D@Media3D@Media@Xaml@UI@Windows@@SA?AV012345@V012345@0@Z,@72") +#pragma comment(linker, "/export:??GDuration@Xaml@UI@Windows@@SA?AV0123@V0123@0@Z=wincorlib_orig.dll.??GDuration@Xaml@UI@Windows@@SA?AV0123@V0123@0@Z,@73") +#pragma comment(linker, "/export:??HDuration@Xaml@UI@Windows@@SA?AV0123@V0123@0@Z=wincorlib_orig.dll.??HDuration@Xaml@UI@Windows@@SA?AV0123@V0123@0@Z,@74") +#pragma comment(linker, "/export:??MDuration@Xaml@UI@Windows@@SA_NV0123@0@Z=wincorlib_orig.dll.??MDuration@Xaml@UI@Windows@@SA_NV0123@0@Z,@75") +#pragma comment(linker, "/export:??NDuration@Xaml@UI@Windows@@SA_NV0123@0@Z=wincorlib_orig.dll.??NDuration@Xaml@UI@Windows@@SA_NV0123@0@Z,@76") +#pragma comment(linker, "/export:??ODuration@Xaml@UI@Windows@@SA_NV0123@0@Z=wincorlib_orig.dll.??ODuration@Xaml@UI@Windows@@SA_NV0123@0@Z,@77") +#pragma comment(linker, "/export:??PDuration@Xaml@UI@Windows@@SA_NV0123@0@Z=wincorlib_orig.dll.??PDuration@Xaml@UI@Windows@@SA_NV0123@0@Z,@78") +#pragma comment(linker, "/export:?AlignedAllocate@Heap@Details@Platform@@SAPEAX_K00@Z=wincorlib_orig.dll.?AlignedAllocate@Heap@Details@Platform@@SAPEAX_K00@Z,@79") +#pragma comment(linker, "/export:?AlignedAllocate@Heap@Details@Platform@@SAPEAX_K0@Z=wincorlib_orig.dll.?AlignedAllocate@Heap@Details@Platform@@SAPEAX_K0@Z,@80") +#pragma comment(linker, "/export:?AlignedAllocateException@Heap@Details@Platform@@SAPEAX_K00@Z=wincorlib_orig.dll.?AlignedAllocateException@Heap@Details@Platform@@SAPEAX_K00@Z,@81") +#pragma comment(linker, "/export:?AlignedAllocateException@Heap@Details@Platform@@SAPEAX_K0@Z=wincorlib_orig.dll.?AlignedAllocateException@Heap@Details@Platform@@SAPEAX_K0@Z,@82") +#pragma comment(linker, "/export:?AlignedFree@Heap@Details@Platform@@SAXPEAX@Z=wincorlib_orig.dll.?AlignedFree@Heap@Details@Platform@@SAXPEAX@Z,@83") +#pragma comment(linker, "/export:?AlignedFreeException@Heap@Details@Platform@@SAXPEAX@Z=wincorlib_orig.dll.?AlignedFreeException@Heap@Details@Platform@@SAXPEAX@Z,@84") +#pragma comment(linker, "/export:?Allocate@Heap@Details@Platform@@SAPEAX_K0@Z=wincorlib_orig.dll.?Allocate@Heap@Details@Platform@@SAPEAX_K0@Z,@85") +#pragma comment(linker, "/export:?Allocate@Heap@Details@Platform@@SAPEAX_K@Z=wincorlib_orig.dll.?Allocate@Heap@Details@Platform@@SAPEAX_K@Z,@86") +#pragma comment(linker, "/export:?AllocateException@Heap@Details@Platform@@SAPEAX_K0@Z=wincorlib_orig.dll.?AllocateException@Heap@Details@Platform@@SAPEAX_K0@Z,@87") +#pragma comment(linker, "/export:?AllocateException@Heap@Details@Platform@@SAPEAX_K@Z=wincorlib_orig.dll.?AllocateException@Heap@Details@Platform@@SAPEAX_K@Z,@88") +#pragma comment(linker, "/export:?Compare@Duration@Xaml@UI@Windows@@SAHV1234@0@Z=wincorlib_orig.dll.?Compare@Duration@Xaml@UI@Windows@@SAHV1234@0@Z,@89") +#pragma comment(linker, "/export:?Contains@Rect@Foundation@Windows@@QEAA_NVPoint@23@@Z=wincorlib_orig.dll.?Contains@Rect@Foundation@Windows@@QEAA_NVPoint@23@@Z,@90") +#pragma comment(linker, "/export:?CreateException@Exception@Platform@@SAPE$AAV12@H@Z=wincorlib_orig.dll.?CreateException@Exception@Platform@@SAPE$AAV12@H@Z,@91") +#pragma comment(linker, "/export:?CreateException@Exception@Platform@@SAPE$AAV12@HPE$AAVString@2@@Z=wincorlib_orig.dll.?CreateException@Exception@Platform@@SAPE$AAV12@HPE$AAVString@2@@Z,@92") +#pragma comment(linker, "/export:?CreateValue@Details@Platform@@YAPE$AAVObject@2@W4TypeCode@2@PEBX@Z=wincorlib_orig.dll.?CreateValue@Details@Platform@@YAPE$AAVObject@2@W4TypeCode@2@PEBX@Z,@93") +#pragma comment(linker, "/export:?EnableFactoryCache@@YAXXZ=wincorlib_orig.dll.?EnableFactoryCache@@YAXXZ,@94") +#pragma comment(linker, "/export:?EnumerateAllocatedObjects@Heap@Details@Platform@@SAXPE$AAVHeapEntryHandler@23@@Z=wincorlib_orig.dll.?EnumerateAllocatedObjects@Heap@Details@Platform@@SAXPE$AAVHeapEntryHandler@23@@Z,@95") +#pragma comment(linker, "/export:?Equals@Attribute@Metadata@Platform@@QE$AAA_NPE$AAVObject@3@@Z=wincorlib_orig.dll.?Equals@Attribute@Metadata@Platform@@QE$AAA_NPE$AAVObject@3@@Z,@96") +#pragma comment(linker, "/export:?Equals@Boolean@Platform@@QEAA_NPE$AAVObject@2@@Z=wincorlib_orig.dll.?Equals@Boolean@Platform@@QEAA_NPE$AAVObject@2@@Z,@97") +#pragma comment(linker, "/export:?Equals@Delegate@Platform@@QE$AAA_NPE$AAVObject@2@@Z=wincorlib_orig.dll.?Equals@Delegate@Platform@@QE$AAA_NPE$AAVObject@2@@Z,@98") +#pragma comment(linker, "/export:?Equals@Enum@Platform@@QE$AAA_NPE$AAVObject@2@@Z=wincorlib_orig.dll.?Equals@Enum@Platform@@QE$AAA_NPE$AAVObject@2@@Z,@99") +#pragma comment(linker, "/export:?Equals@Exception@Platform@@UE$AAA_NPE$AAVObject@2@@Z=wincorlib_orig.dll.?Equals@Exception@Platform@@UE$AAA_NPE$AAVObject@2@@Z,@100") +#pragma comment(linker, "/export:?Equals@MTAThreadAttribute@Platform@@QE$AAA_NPE$AAVObject@2@@Z=wincorlib_orig.dll.?Equals@MTAThreadAttribute@Platform@@QE$AAA_NPE$AAVObject@2@@Z,@101") +#pragma comment(linker, "/export:?Equals@Object@Platform@@QE$AAA_NPE$AAV12@@Z=wincorlib_orig.dll.?Equals@Object@Platform@@QE$AAA_NPE$AAV12@@Z,@102") +#pragma comment(linker, "/export:?Equals@OnePhaseConstructedAttribute@CompilerServices@Runtime@Platform@@QE$AAA_NPE$AAVObject@4@@Z=wincorlib_orig.dll.?Equals@OnePhaseConstructedAttribute@CompilerServices@Runtime@Platform@@QE$AAA_NPE$AAVObject@4@@Z,@103") +#pragma comment(linker, "/export:?Equals@STAThreadAttribute@Platform@@QE$AAA_NPE$AAVObject@2@@Z=wincorlib_orig.dll.?Equals@STAThreadAttribute@Platform@@QE$AAA_NPE$AAVObject@2@@Z,@104") +#pragma comment(linker, "/export:?Equals@Type@Platform@@UE$AAA_NPE$AAVObject@2@@Z=wincorlib_orig.dll.?Equals@Type@Platform@@UE$AAA_NPE$AAVObject@2@@Z,@105") +#pragma comment(linker, "/export:?Equals@ValueType@Platform@@QE$AAA_NPE$AAVObject@2@@Z=wincorlib_orig.dll.?Equals@ValueType@Platform@@QE$AAA_NPE$AAVObject@2@@Z,@106") +#pragma comment(linker, "/export:?Equals@char16@default@@QEAA_NPE$AAVObject@Platform@@@Z=wincorlib_orig.dll.?Equals@char16@default@@QEAA_NPE$AAVObject@Platform@@@Z,@107") +#pragma comment(linker, "/export:?Equals@float32@default@@QEAA_NPE$AAVObject@Platform@@@Z=wincorlib_orig.dll.?Equals@float32@default@@QEAA_NPE$AAVObject@Platform@@@Z,@108") +#pragma comment(linker, "/export:?Equals@float64@default@@QEAA_NPE$AAVObject@Platform@@@Z=wincorlib_orig.dll.?Equals@float64@default@@QEAA_NPE$AAVObject@Platform@@@Z,@109") +#pragma comment(linker, "/export:?Equals@int16@default@@QEAA_NPE$AAVObject@Platform@@@Z=wincorlib_orig.dll.?Equals@int16@default@@QEAA_NPE$AAVObject@Platform@@@Z,@110") +#pragma comment(linker, "/export:?Equals@int32@default@@QEAA_NPE$AAVObject@Platform@@@Z=wincorlib_orig.dll.?Equals@int32@default@@QEAA_NPE$AAVObject@Platform@@@Z,@111") +#pragma comment(linker, "/export:?Equals@int64@default@@QEAA_NPE$AAVObject@Platform@@@Z=wincorlib_orig.dll.?Equals@int64@default@@QEAA_NPE$AAVObject@Platform@@@Z,@112") +#pragma comment(linker, "/export:?Equals@int8@default@@QEAA_NPE$AAVObject@Platform@@@Z=wincorlib_orig.dll.?Equals@int8@default@@QEAA_NPE$AAVObject@Platform@@@Z,@113") +#pragma comment(linker, "/export:?Equals@uint16@default@@QEAA_NPE$AAVObject@Platform@@@Z=wincorlib_orig.dll.?Equals@uint16@default@@QEAA_NPE$AAVObject@Platform@@@Z,@114") +#pragma comment(linker, "/export:?Equals@uint32@default@@QEAA_NPE$AAVObject@Platform@@@Z=wincorlib_orig.dll.?Equals@uint32@default@@QEAA_NPE$AAVObject@Platform@@@Z,@115") +#pragma comment(linker, "/export:?Equals@uint64@default@@QEAA_NPE$AAVObject@Platform@@@Z=wincorlib_orig.dll.?Equals@uint64@default@@QEAA_NPE$AAVObject@Platform@@@Z,@116") +#pragma comment(linker, "/export:?Equals@uint8@default@@QEAA_NPE$AAVObject@Platform@@@Z=wincorlib_orig.dll.?Equals@uint8@default@@QEAA_NPE$AAVObject@Platform@@@Z,@117") +#pragma comment(linker, "/export:?EventSourceAdd@Details@Platform@@YA?AVEventRegistrationToken@Foundation@Windows@@PEAPEAXPEAUEventLock@12@PE$AAVDelegate@2@@Z=wincorlib_orig.dll.?EventSourceAdd@Details@Platform@@YA?AVEventRegistrationToken@Foundation@Windows@@PEAPEAXPEAUEventLock@12@PE$AAVDelegate@2@@Z,@118") +#pragma comment(linker, "/export:?EventSourceGetTargetArray@Details@Platform@@YAPEAXPEAXPEAUEventLock@12@@Z=wincorlib_orig.dll.?EventSourceGetTargetArray@Details@Platform@@YAPEAXPEAXPEAUEventLock@12@@Z,@119") +#pragma comment(linker, "/export:?EventSourceGetTargetArrayEvent@Details@Platform@@YAPEAXPEAXIPEBXPEA_J@Z=wincorlib_orig.dll.?EventSourceGetTargetArrayEvent@Details@Platform@@YAPEAXPEAXIPEBXPEA_J@Z,@120") +#pragma comment(linker, "/export:?EventSourceGetTargetArraySize@Details@Platform@@YAIPEAX@Z=wincorlib_orig.dll.?EventSourceGetTargetArraySize@Details@Platform@@YAIPEAX@Z,@121") +#pragma comment(linker, "/export:?EventSourceInitialize@Details@Platform@@YAXPEAPEAX@Z=wincorlib_orig.dll.?EventSourceInitialize@Details@Platform@@YAXPEAPEAX@Z,@122") +#pragma comment(linker, "/export:?EventSourceRemove@Details@Platform@@YAXPEAPEAXPEAUEventLock@12@VEventRegistrationToken@Foundation@Windows@@@Z=wincorlib_orig.dll.?EventSourceRemove@Details@Platform@@YAXPEAPEAXPEAUEventLock@12@VEventRegistrationToken@Foundation@Windows@@@Z,@123") +#pragma comment(linker, "/export:?EventSourceUninitialize@Details@Platform@@YAXPEAPEAX@Z=wincorlib_orig.dll.?EventSourceUninitialize@Details@Platform@@YAXPEAPEAX@Z,@124") +#pragma comment(linker, "/export:?FlushFactoryCache@@YAXXZ=wincorlib_orig.dll.?FlushFactoryCache@@YAXXZ,@125") +#pragma comment(linker, "/export:?Free@Heap@Details@Platform@@SAXPEAX@Z=wincorlib_orig.dll.?Free@Heap@Details@Platform@@SAXPEAX@Z,@126") +#pragma comment(linker, "/export:?FreeException@Heap@Details@Platform@@SAXPEAX@Z=wincorlib_orig.dll.?FreeException@Heap@Details@Platform@@SAXPEAX@Z,@127") +#pragma comment(linker, "/export:?GetActivationFactory@Details@Platform@@YAJPEAVModuleBase@1WRL@Microsoft@@PEAUHSTRING__@@PEAPEAUIActivationFactory@@@Z=wincorlib_orig.dll.?GetActivationFactory@Details@Platform@@YAJPEAVModuleBase@1WRL@Microsoft@@PEAUHSTRING__@@PEAPEAUIActivationFactory@@@Z,@128") +#pragma comment(linker, "/export:?GetActivationFactoryByPCWSTR@@YAJPEAXAEAVGuid@Platform@@PEAPEAX@Z=wincorlib_orig.dll.?GetActivationFactoryByPCWSTR@@YAJPEAXAEAVGuid@Platform@@PEAPEAX@Z,@129") +//#pragma comment(linker, "/export:?GetCmdArguments@Details@Platform@@YAPEAPEA_WPEAH@Z=wincorlib_orig.dll.?GetCmdArguments@Details@Platform@@YAPEAPEA_WPEAH@Z,@130") +#pragma comment(linker, "/export:?GetHashCode@Attribute@Metadata@Platform@@QE$AAAHXZ=wincorlib_orig.dll.?GetHashCode@Attribute@Metadata@Platform@@QE$AAAHXZ,@131") +#pragma comment(linker, "/export:?GetHashCode@Boolean@Platform@@QEAAHXZ=wincorlib_orig.dll.?GetHashCode@Boolean@Platform@@QEAAHXZ,@132") +#pragma comment(linker, "/export:?GetHashCode@Delegate@Platform@@QE$AAAHXZ=wincorlib_orig.dll.?GetHashCode@Delegate@Platform@@QE$AAAHXZ,@133") +#pragma comment(linker, "/export:?GetHashCode@Enum@Platform@@QE$AAAHXZ=wincorlib_orig.dll.?GetHashCode@Enum@Platform@@QE$AAAHXZ,@134") +#pragma comment(linker, "/export:?GetHashCode@Exception@Platform@@UE$AAAHXZ=wincorlib_orig.dll.?GetHashCode@Exception@Platform@@UE$AAAHXZ,@135") +#pragma comment(linker, "/export:?GetHashCode@Guid@Platform@@QEAAHXZ=wincorlib_orig.dll.?GetHashCode@Guid@Platform@@QEAAHXZ,@136") +#pragma comment(linker, "/export:?GetHashCode@MTAThreadAttribute@Platform@@QE$AAAHXZ=wincorlib_orig.dll.?GetHashCode@MTAThreadAttribute@Platform@@QE$AAAHXZ,@137") +#pragma comment(linker, "/export:?GetHashCode@Object@Platform@@QE$AAAHXZ=wincorlib_orig.dll.?GetHashCode@Object@Platform@@QE$AAAHXZ,@138") +#pragma comment(linker, "/export:?GetHashCode@OnePhaseConstructedAttribute@CompilerServices@Runtime@Platform@@QE$AAAHXZ=wincorlib_orig.dll.?GetHashCode@OnePhaseConstructedAttribute@CompilerServices@Runtime@Platform@@QE$AAAHXZ,@139") +#pragma comment(linker, "/export:?GetHashCode@STAThreadAttribute@Platform@@QE$AAAHXZ=wincorlib_orig.dll.?GetHashCode@STAThreadAttribute@Platform@@QE$AAAHXZ,@140") +#pragma comment(linker, "/export:?GetHashCode@Type@Platform@@UE$AAAHXZ=wincorlib_orig.dll.?GetHashCode@Type@Platform@@UE$AAAHXZ,@141") +#pragma comment(linker, "/export:?GetHashCode@ValueType@Platform@@QE$AAAHXZ=wincorlib_orig.dll.?GetHashCode@ValueType@Platform@@QE$AAAHXZ,@142") +#pragma comment(linker, "/export:?GetHashCode@char16@default@@QEAAHXZ=wincorlib_orig.dll.?GetHashCode@char16@default@@QEAAHXZ,@143") +#pragma comment(linker, "/export:?GetHashCode@float32@default@@QEAAHXZ=wincorlib_orig.dll.?GetHashCode@float32@default@@QEAAHXZ,@144") +#pragma comment(linker, "/export:?GetHashCode@float64@default@@QEAAHXZ=wincorlib_orig.dll.?GetHashCode@float64@default@@QEAAHXZ,@145") +#pragma comment(linker, "/export:?GetHashCode@int16@default@@QEAAHXZ=wincorlib_orig.dll.?GetHashCode@int16@default@@QEAAHXZ,@146") +#pragma comment(linker, "/export:?GetHashCode@int32@default@@QEAAHXZ=wincorlib_orig.dll.?GetHashCode@int32@default@@QEAAHXZ,@147") +#pragma comment(linker, "/export:?GetHashCode@int64@default@@QEAAHXZ=wincorlib_orig.dll.?GetHashCode@int64@default@@QEAAHXZ,@148") +#pragma comment(linker, "/export:?GetHashCode@int8@default@@QEAAHXZ=wincorlib_orig.dll.?GetHashCode@int8@default@@QEAAHXZ,@149") +#pragma comment(linker, "/export:?GetHashCode@uint16@default@@QEAAHXZ=wincorlib_orig.dll.?GetHashCode@uint16@default@@QEAAHXZ,@150") +#pragma comment(linker, "/export:?GetHashCode@uint32@default@@QEAAHXZ=wincorlib_orig.dll.?GetHashCode@uint32@default@@QEAAHXZ,@151") +#pragma comment(linker, "/export:?GetHashCode@uint64@default@@QEAAHXZ=wincorlib_orig.dll.?GetHashCode@uint64@default@@QEAAHXZ,@152") +#pragma comment(linker, "/export:?GetHashCode@uint8@default@@QEAAHXZ=wincorlib_orig.dll.?GetHashCode@uint8@default@@QEAAHXZ,@153") +#pragma comment(linker, "/export:?GetIBoxArrayVtable@Details@Platform@@YAPEAXPEAX@Z=wincorlib_orig.dll.?GetIBoxArrayVtable@Details@Platform@@YAPEAXPEAX@Z,@154") +#pragma comment(linker, "/export:?GetIBoxVtable@Details@Platform@@YAPEAXPEAX@Z=wincorlib_orig.dll.?GetIBoxVtable@Details@Platform@@YAPEAXPEAX@Z,@155") +#pragma comment(linker, "/export:?GetIidsFn@@YAJHPEAKPEBU__s_GUID@@PEAPEAVGuid@Platform@@@Z=wincorlib_orig.dll.?GetIidsFn@@YAJHPEAKPEBU__s_GUID@@PEAPEAVGuid@Platform@@@Z,@156") +#pragma comment(linker, "/export:?GetObjectContext@Details@Platform@@YAPEAUIUnknown@@XZ=wincorlib_orig.dll.?GetObjectContext@Details@Platform@@YAPEAUIUnknown@@XZ,@157") +#pragma comment(linker, "/export:?GetProxyImpl@Details@Platform@@YAJPEAUIUnknown@@AEBU_GUID@@0PEAPEAU3@@Z=wincorlib_orig.dll.?GetProxyImpl@Details@Platform@@YAJPEAUIUnknown@@AEBU_GUID@@0PEAPEAU3@@Z,@158") +#pragma comment(linker, "/export:?GetType@Boolean@Platform@@QEAAPE$AAVType@2@XZ=wincorlib_orig.dll.?GetType@Boolean@Platform@@QEAAPE$AAVType@2@XZ,@159") +#pragma comment(linker, "/export:?GetType@Guid@Platform@@QEAAPE$AAVType@2@XZ=wincorlib_orig.dll.?GetType@Guid@Platform@@QEAAPE$AAVType@2@XZ,@160") +#pragma comment(linker, "/export:?GetType@Object@Platform@@QE$AAAPE$AAVType@2@XZ=wincorlib_orig.dll.?GetType@Object@Platform@@QE$AAAPE$AAVType@2@XZ,@161") +#pragma comment(linker, "/export:?GetType@char16@default@@QEAAPE$AAVType@Platform@@XZ=wincorlib_orig.dll.?GetType@char16@default@@QEAAPE$AAVType@Platform@@XZ,@162") +#pragma comment(linker, "/export:?GetType@float32@default@@QEAAPE$AAVType@Platform@@XZ=wincorlib_orig.dll.?GetType@float32@default@@QEAAPE$AAVType@Platform@@XZ,@163") +#pragma comment(linker, "/export:?GetType@float64@default@@QEAAPE$AAVType@Platform@@XZ=wincorlib_orig.dll.?GetType@float64@default@@QEAAPE$AAVType@Platform@@XZ,@164") +#pragma comment(linker, "/export:?GetType@int16@default@@QEAAPE$AAVType@Platform@@XZ=wincorlib_orig.dll.?GetType@int16@default@@QEAAPE$AAVType@Platform@@XZ,@165") +#pragma comment(linker, "/export:?GetType@int32@default@@QEAAPE$AAVType@Platform@@XZ=wincorlib_orig.dll.?GetType@int32@default@@QEAAPE$AAVType@Platform@@XZ,@166") +#pragma comment(linker, "/export:?GetType@int64@default@@QEAAPE$AAVType@Platform@@XZ=wincorlib_orig.dll.?GetType@int64@default@@QEAAPE$AAVType@Platform@@XZ,@167") +#pragma comment(linker, "/export:?GetType@int8@default@@QEAAPE$AAVType@Platform@@XZ=wincorlib_orig.dll.?GetType@int8@default@@QEAAPE$AAVType@Platform@@XZ,@168") +#pragma comment(linker, "/export:?GetType@uint16@default@@QEAAPE$AAVType@Platform@@XZ=wincorlib_orig.dll.?GetType@uint16@default@@QEAAPE$AAVType@Platform@@XZ,@169") +#pragma comment(linker, "/export:?GetType@uint32@default@@QEAAPE$AAVType@Platform@@XZ=wincorlib_orig.dll.?GetType@uint32@default@@QEAAPE$AAVType@Platform@@XZ,@170") +#pragma comment(linker, "/export:?GetType@uint64@default@@QEAAPE$AAVType@Platform@@XZ=wincorlib_orig.dll.?GetType@uint64@default@@QEAAPE$AAVType@Platform@@XZ,@171") +#pragma comment(linker, "/export:?GetType@uint8@default@@QEAAPE$AAVType@Platform@@XZ=wincorlib_orig.dll.?GetType@uint8@default@@QEAAPE$AAVType@Platform@@XZ,@172") +#pragma comment(linker, "/export:?GetTypeCode@Type@Platform@@SA?AW4TypeCode@2@PE$AAV12@@Z=wincorlib_orig.dll.?GetTypeCode@Type@Platform@@SA?AW4TypeCode@2@PE$AAV12@@Z,@173") +#pragma comment(linker, "/export:?GetWeakReference@Details@Platform@@YAPEAU__abi_IUnknown@@QE$ADVObject@2@@Z=wincorlib_orig.dll.?GetWeakReference@Details@Platform@@YAPEAU__abi_IUnknown@@QE$ADVObject@2@@Z,@174") +#pragma comment(linker, "/export:?InitControlBlock@ControlBlock@Details@Platform@@AEAAXPEAX_N11@Z=wincorlib_orig.dll.?InitControlBlock@ControlBlock@Details@Platform@@AEAAXPEAX_N11@Z,@175") +#pragma comment(linker, "/export:?InitializeData@Details@Platform@@YAJH@Z=wincorlib_orig.dll.?InitializeData@Details@Platform@@YAJH@Z,@176") +#pragma comment(linker, "/export:?Intersect@Rect@Foundation@Windows@@QEAAXV123@@Z=wincorlib_orig.dll.?Intersect@Rect@Foundation@Windows@@QEAAXV123@@Z,@177") +#pragma comment(linker, "/export:?IntersectsWith@Rect@Foundation@Windows@@QEAA_NV123@@Z=wincorlib_orig.dll.?IntersectsWith@Rect@Foundation@Windows@@QEAA_NV123@@Z,@178") +#pragma comment(linker, "/export:?Invert@Matrix3D@Media3D@Media@Xaml@UI@Windows@@QEAAXXZ=wincorlib_orig.dll.?Invert@Matrix3D@Media3D@Media@Xaml@UI@Windows@@QEAAXXZ,@179") +#pragma comment(linker, "/export:?ReCreateException@Exception@Platform@@SAPE$AAV12@H@Z=wincorlib_orig.dll.?ReCreateException@Exception@Platform@@SAPE$AAV12@H@Z,@180") +#pragma comment(linker, "/export:?ReCreateFromException@Details@Platform@@YAJPE$AAVException@2@@Z=wincorlib_orig.dll.?ReCreateFromException@Details@Platform@@YAJPE$AAVException@2@@Z,@181") +#pragma comment(linker, "/export:?ReferenceEquals@Object@Platform@@SA_NPE$AAV12@0@Z=wincorlib_orig.dll.?ReferenceEquals@Object@Platform@@SA_NPE$AAV12@0@Z,@182") +#pragma comment(linker, "/export:?ReferenceEquals@Object@Platform@@SA_NPE$AAVString@2@0@Z=wincorlib_orig.dll.?ReferenceEquals@Object@Platform@@SA_NPE$AAVString@2@0@Z,@183") +#pragma comment(linker, "/export:?RegisterFactories@Details@Platform@@YAPE$AAVObject@2@PEAPEAVModuleBase@1WRL@Microsoft@@PEAPEAU__abi_Module@@P6AXXZ@Z=wincorlib_orig.dll.?RegisterFactories@Details@Platform@@YAPE$AAVObject@2@PEAPEAVModuleBase@1WRL@Microsoft@@PEAPEAU__abi_Module@@P6AXXZ@Z,@184") +#pragma comment(linker, "/export:?ReleaseInContextImpl@Details@Platform@@YAJPEAUIUnknown@@0@Z=wincorlib_orig.dll.?ReleaseInContextImpl@Details@Platform@@YAJPEAUIUnknown@@0@Z,@185") +#pragma comment(linker, "/export:?ReleaseTarget@ControlBlock@Details@Platform@@AEAAXXZ=wincorlib_orig.dll.?ReleaseTarget@ControlBlock@Details@Platform@@AEAAXXZ,@186") +#pragma comment(linker, "/export:?ResolveWeakReference@Details@Platform@@YAPE$AAVObject@2@AEBU_GUID@@PEAPEAU__abi_IUnknown@@@Z=wincorlib_orig.dll.?ResolveWeakReference@Details@Platform@@YAPE$AAVObject@2@AEBU_GUID@@PEAPEAU__abi_IUnknown@@@Z,@187") +#pragma comment(linker, "/export:?RunApplicationServer@Details@Platform@@YAXPEAPEAVModuleBase@1WRL@Microsoft@@PEAPEAU__abi_Module@@PEB_W@Z=wincorlib_orig.dll.?RunApplicationServer@Details@Platform@@YAXPEAPEAVModuleBase@1WRL@Microsoft@@PEAPEAU__abi_Module@@PEB_W@Z,@188") +#pragma comment(linker, "/export:?RunServer@Details@Platform@@YAXPEAPEAVModuleBase@1WRL@Microsoft@@PEAPEAU__abi_Module@@PEB_W@Z=wincorlib_orig.dll.?RunServer@Details@Platform@@YAXPEAPEAVModuleBase@1WRL@Microsoft@@PEAPEAU__abi_Module@@PEB_W@Z,@189") +#pragma comment(linker, "/export:?TerminateModule@Details@Platform@@YA_NPEAVModuleBase@1WRL@Microsoft@@@Z=wincorlib_orig.dll.?TerminateModule@Details@Platform@@YA_NPEAVModuleBase@1WRL@Microsoft@@@Z,@190") +#pragma comment(linker, "/export:?ToInt32@IntPtr@Platform@@QEAAHXZ=wincorlib_orig.dll.?ToInt32@IntPtr@Platform@@QEAAHXZ,@191") +#pragma comment(linker, "/export:?ToString@Attribute@Metadata@Platform@@QE$AAAPE$AAVString@3@XZ=wincorlib_orig.dll.?ToString@Attribute@Metadata@Platform@@QE$AAAPE$AAVString@3@XZ,@192") +#pragma comment(linker, "/export:?ToString@Boolean@Platform@@QEAAPE$AAVString@2@XZ=wincorlib_orig.dll.?ToString@Boolean@Platform@@QEAAPE$AAVString@2@XZ,@193") +#pragma comment(linker, "/export:?ToString@Delegate@Platform@@QE$AAAPE$AAVString@2@XZ=wincorlib_orig.dll.?ToString@Delegate@Platform@@QE$AAAPE$AAVString@2@XZ,@194") +#pragma comment(linker, "/export:?ToString@Enum@Platform@@QE$AAAPE$AAVString@2@XZ=wincorlib_orig.dll.?ToString@Enum@Platform@@QE$AAAPE$AAVString@2@XZ,@195") +#pragma comment(linker, "/export:?ToString@Exception@Platform@@UE$AAAPE$AAVString@2@XZ=wincorlib_orig.dll.?ToString@Exception@Platform@@UE$AAAPE$AAVString@2@XZ,@196") +#pragma comment(linker, "/export:?ToString@Guid@Platform@@QEAAPE$AAVString@2@XZ=wincorlib_orig.dll.?ToString@Guid@Platform@@QEAAPE$AAVString@2@XZ,@197") +#pragma comment(linker, "/export:?ToString@MTAThreadAttribute@Platform@@QE$AAAPE$AAVString@2@XZ=wincorlib_orig.dll.?ToString@MTAThreadAttribute@Platform@@QE$AAAPE$AAVString@2@XZ,@198") +#pragma comment(linker, "/export:?ToString@OnePhaseConstructedAttribute@CompilerServices@Runtime@Platform@@QE$AAAPE$AAVString@4@XZ=wincorlib_orig.dll.?ToString@OnePhaseConstructedAttribute@CompilerServices@Runtime@Platform@@QE$AAAPE$AAVString@4@XZ,@199") +#pragma comment(linker, "/export:?ToString@STAThreadAttribute@Platform@@QE$AAAPE$AAVString@2@XZ=wincorlib_orig.dll.?ToString@STAThreadAttribute@Platform@@QE$AAAPE$AAVString@2@XZ,@200") +#pragma comment(linker, "/export:?ToString@Type@Platform@@UE$AAAPE$AAVString@2@XZ=wincorlib_orig.dll.?ToString@Type@Platform@@UE$AAAPE$AAVString@2@XZ,@201") +#pragma comment(linker, "/export:?ToString@ValueType@Platform@@QE$AAAPE$AAVString@2@XZ=wincorlib_orig.dll.?ToString@ValueType@Platform@@QE$AAAPE$AAVString@2@XZ,@202") +#pragma comment(linker, "/export:?ToString@char16@default@@QEAAPE$AAVString@Platform@@XZ=wincorlib_orig.dll.?ToString@char16@default@@QEAAPE$AAVString@Platform@@XZ,@203") +#pragma comment(linker, "/export:?ToString@float32@default@@QEAAPE$AAVString@Platform@@XZ=wincorlib_orig.dll.?ToString@float32@default@@QEAAPE$AAVString@Platform@@XZ,@204") +#pragma comment(linker, "/export:?ToString@float64@default@@QEAAPE$AAVString@Platform@@XZ=wincorlib_orig.dll.?ToString@float64@default@@QEAAPE$AAVString@Platform@@XZ,@205") +#pragma comment(linker, "/export:?ToString@int16@default@@QEAAPE$AAVString@Platform@@XZ=wincorlib_orig.dll.?ToString@int16@default@@QEAAPE$AAVString@Platform@@XZ,@206") +#pragma comment(linker, "/export:?ToString@int32@default@@QEAAPE$AAVString@Platform@@XZ=wincorlib_orig.dll.?ToString@int32@default@@QEAAPE$AAVString@Platform@@XZ,@207") +#pragma comment(linker, "/export:?ToString@int64@default@@QEAAPE$AAVString@Platform@@XZ=wincorlib_orig.dll.?ToString@int64@default@@QEAAPE$AAVString@Platform@@XZ,@208") +#pragma comment(linker, "/export:?ToString@int8@default@@QEAAPE$AAVString@Platform@@XZ=wincorlib_orig.dll.?ToString@int8@default@@QEAAPE$AAVString@Platform@@XZ,@209") +#pragma comment(linker, "/export:?ToString@uint16@default@@QEAAPE$AAVString@Platform@@XZ=wincorlib_orig.dll.?ToString@uint16@default@@QEAAPE$AAVString@Platform@@XZ,@210") +#pragma comment(linker, "/export:?ToString@uint32@default@@QEAAPE$AAVString@Platform@@XZ=wincorlib_orig.dll.?ToString@uint32@default@@QEAAPE$AAVString@Platform@@XZ,@211") +#pragma comment(linker, "/export:?ToString@uint64@default@@QEAAPE$AAVString@Platform@@XZ=wincorlib_orig.dll.?ToString@uint64@default@@QEAAPE$AAVString@Platform@@XZ,@212") +#pragma comment(linker, "/export:?ToString@uint8@default@@QEAAPE$AAVString@Platform@@XZ=wincorlib_orig.dll.?ToString@uint8@default@@QEAAPE$AAVString@Platform@@XZ,@213") +#pragma comment(linker, "/export:?UninitializeData@Details@Platform@@YAXH@Z=wincorlib_orig.dll.?UninitializeData@Details@Platform@@YAXH@Z,@214") +#pragma comment(linker, "/export:?Union@Rect@Foundation@Windows@@QEAAXV123@@Z=wincorlib_orig.dll.?Union@Rect@Foundation@Windows@@QEAAXV123@@Z,@215") +#pragma comment(linker, "/export:?Union@Rect@Foundation@Windows@@QEAAXVPoint@23@@Z=wincorlib_orig.dll.?Union@Rect@Foundation@Windows@@QEAAXVPoint@23@@Z,@216") +#pragma comment(linker, "/export:?WriteLine@Console@Details@Platform@@SAXPE$AAVObject@3@@Z=wincorlib_orig.dll.?WriteLine@Console@Details@Platform@@SAXPE$AAVObject@3@@Z,@217") +#pragma comment(linker, "/export:?WriteLine@Console@Details@Platform@@SAXPE$AAVString@3@@Z=wincorlib_orig.dll.?WriteLine@Console@Details@Platform@@SAXPE$AAVString@3@@Z,@218") +#pragma comment(linker, "/export:?WriteLine@Console@Details@Platform@@SAXXZ=wincorlib_orig.dll.?WriteLine@Console@Details@Platform@@SAXXZ,@219") +#pragma comment(linker, "/export:?__abi_FailFast@@YAXXZ=wincorlib_orig.dll.?__abi_FailFast@@YAXXZ,@220") +#pragma comment(linker, "/export:?__abi_ObjectToString@__abi_details@@YAPE$AAVString@Platform@@PE$AAVObject@3@_N@Z=wincorlib_orig.dll.?__abi_ObjectToString@__abi_details@@YAPE$AAVString@Platform@@PE$AAVObject@3@_N@Z,@221") +#pragma comment(linker, "/export:?__abi_Resolve@ControlBlock@Details@Platform@@UEAAJAEAVGuid@3@PEAPEAU__abi_IInspectable@@@Z=wincorlib_orig.dll.?__abi_Resolve@ControlBlock@Details@Platform@@UEAAJAEAVGuid@3@PEAPEAU__abi_IInspectable@@@Z,@222") +#pragma comment(linker, "/export:?__abi_WinRTraiseAccessDeniedException@@YAXXZ=wincorlib_orig.dll.?__abi_WinRTraiseAccessDeniedException@@YAXXZ,@223") +#pragma comment(linker, "/export:?__abi_WinRTraiseCOMException@@YAXJ@Z=wincorlib_orig.dll.?__abi_WinRTraiseCOMException@@YAXJ@Z,@224") +#pragma comment(linker, "/export:?__abi_WinRTraiseChangedStateException@@YAXXZ=wincorlib_orig.dll.?__abi_WinRTraiseChangedStateException@@YAXXZ,@225") +#pragma comment(linker, "/export:?__abi_WinRTraiseClassNotRegisteredException@@YAXXZ=wincorlib_orig.dll.?__abi_WinRTraiseClassNotRegisteredException@@YAXXZ,@226") +#pragma comment(linker, "/export:?__abi_WinRTraiseDisconnectedException@@YAXXZ=wincorlib_orig.dll.?__abi_WinRTraiseDisconnectedException@@YAXXZ,@227") +#pragma comment(linker, "/export:?__abi_WinRTraiseFailureException@@YAXXZ=wincorlib_orig.dll.?__abi_WinRTraiseFailureException@@YAXXZ,@228") +#pragma comment(linker, "/export:?__abi_WinRTraiseInvalidArgumentException@@YAXXZ=wincorlib_orig.dll.?__abi_WinRTraiseInvalidArgumentException@@YAXXZ,@229") +#pragma comment(linker, "/export:?__abi_WinRTraiseInvalidCastException@@YAXXZ=wincorlib_orig.dll.?__abi_WinRTraiseInvalidCastException@@YAXXZ,@230") +#pragma comment(linker, "/export:?__abi_WinRTraiseNotImplementedException@@YAXXZ=wincorlib_orig.dll.?__abi_WinRTraiseNotImplementedException@@YAXXZ,@231") +#pragma comment(linker, "/export:?__abi_WinRTraiseNullReferenceException@@YAXXZ=wincorlib_orig.dll.?__abi_WinRTraiseNullReferenceException@@YAXXZ,@232") +#pragma comment(linker, "/export:?__abi_WinRTraiseObjectDisposedException@@YAXXZ=wincorlib_orig.dll.?__abi_WinRTraiseObjectDisposedException@@YAXXZ,@233") +#pragma comment(linker, "/export:?__abi_WinRTraiseOperationCanceledException@@YAXXZ=wincorlib_orig.dll.?__abi_WinRTraiseOperationCanceledException@@YAXXZ,@234") +#pragma comment(linker, "/export:?__abi_WinRTraiseOutOfBoundsException@@YAXXZ=wincorlib_orig.dll.?__abi_WinRTraiseOutOfBoundsException@@YAXXZ,@235") +#pragma comment(linker, "/export:?__abi_WinRTraiseOutOfMemoryException@@YAXXZ=wincorlib_orig.dll.?__abi_WinRTraiseOutOfMemoryException@@YAXXZ,@236") +#pragma comment(linker, "/export:?__abi_WinRTraiseWrongThreadException@@YAXXZ=wincorlib_orig.dll.?__abi_WinRTraiseWrongThreadException@@YAXXZ,@237") +#pragma comment(linker, "/export:?__abi_cast_Object_to_String@__abi_details@@YAPE$AAVString@Platform@@_NPE$AAVObject@3@@Z=wincorlib_orig.dll.?__abi_cast_Object_to_String@__abi_details@@YAPE$AAVString@Platform@@_NPE$AAVObject@3@@Z,@238") +#pragma comment(linker, "/export:?__abi_cast_String_to_Object@__abi_details@@YAPE$AAVObject@Platform@@PE$AAVString@3@@Z=wincorlib_orig.dll.?__abi_cast_String_to_Object@__abi_details@@YAPE$AAVObject@Platform@@PE$AAVString@3@@Z,@239") +#pragma comment(linker, "/export:?__abi_make_type_id@@YAPE$AAVType@Platform@@AEBU__abi_type_descriptor@@@Z=wincorlib_orig.dll.?__abi_make_type_id@@YAPE$AAVType@Platform@@AEBU__abi_type_descriptor@@@Z,@240") +#pragma comment(linker, "/export:?__abi_translateCurrentException@@YAJ_N@Z=wincorlib_orig.dll.?__abi_translateCurrentException@@YAJ_N@Z,@241") +#pragma comment(linker, "/export:?__getActivationFactoryByHSTRING@@YAJPEAUHSTRING__@@AEAVGuid@Platform@@PEAPEAX@Z=wincorlib_orig.dll.?__getActivationFactoryByHSTRING@@YAJPEAUHSTRING__@@AEAVGuid@Platform@@PEAPEAX@Z,@242") +#pragma comment(linker, "/export:?get@Bottom@Rect@Foundation@Windows@@QEAAMXZ=wincorlib_orig.dll.?get@Bottom@Rect@Foundation@Windows@@QEAAMXZ,@243") +#pragma comment(linker, "/export:?get@BreakOnAllocationId@Heap@Details@Platform@@SAHXZ=wincorlib_orig.dll.?get@BreakOnAllocationId@Heap@Details@Platform@@SAHXZ,@244") +#pragma comment(linker, "/export:?get@BreakOnFreeId@Heap@Details@Platform@@SAHXZ=wincorlib_orig.dll.?get@BreakOnFreeId@Heap@Details@Platform@@SAHXZ,@245") +#pragma comment(linker, "/export:?get@CurrentAllocationId@Heap@Details@Platform@@SAHXZ=wincorlib_orig.dll.?get@CurrentAllocationId@Heap@Details@Platform@@SAHXZ,@246") +#pragma comment(linker, "/export:?get@Empty@Rect@Foundation@Windows@@SA?AV234@XZ=wincorlib_orig.dll.?get@Empty@Rect@Foundation@Windows@@SA?AV234@XZ,@247") +#pragma comment(linker, "/export:?get@Empty@Size@Foundation@Windows@@SA?AV234@XZ=wincorlib_orig.dll.?get@Empty@Size@Foundation@Windows@@SA?AV234@XZ,@248") +#pragma comment(linker, "/export:?get@FullName@Type@Platform@@QE$AAAPE$AAVString@3@XZ=wincorlib_orig.dll.?get@FullName@Type@Platform@@QE$AAAPE$AAVString@3@XZ,@249") +#pragma comment(linker, "/export:?get@HasInverse@Matrix3D@Media3D@Media@Xaml@UI@Windows@@QEAA_NXZ=wincorlib_orig.dll.?get@HasInverse@Matrix3D@Media3D@Media@Xaml@UI@Windows@@QEAA_NXZ,@250") +#pragma comment(linker, "/export:?get@Message@Exception@Platform@@QE$AAAPE$AAVString@3@XZ=wincorlib_orig.dll.?get@Message@Exception@Platform@@QE$AAAPE$AAVString@3@XZ,@251") +#pragma comment(linker, "/export:?get@ObjectCount@Heap@Details@Platform@@SAHXZ=wincorlib_orig.dll.?get@ObjectCount@Heap@Details@Platform@@SAHXZ,@252") +#pragma comment(linker, "/export:?get@Right@Rect@Foundation@Windows@@QEAAMXZ=wincorlib_orig.dll.?get@Right@Rect@Foundation@Windows@@QEAAMXZ,@253") +#pragma comment(linker, "/export:?get@TrackingLevel@Heap@Details@Platform@@SA?AW4HeapAllocationTrackingLevel@34@XZ=wincorlib_orig.dll.?get@TrackingLevel@Heap@Details@Platform@@SA?AW4HeapAllocationTrackingLevel@34@XZ,@254") +#pragma comment(linker, "/export:?set@BreakOnAllocationId@Heap@Details@Platform@@SAXH@Z=wincorlib_orig.dll.?set@BreakOnAllocationId@Heap@Details@Platform@@SAXH@Z,@255") +#pragma comment(linker, "/export:?set@BreakOnFreeId@Heap@Details@Platform@@SAXH@Z=wincorlib_orig.dll.?set@BreakOnFreeId@Heap@Details@Platform@@SAXH@Z,@256") +#pragma comment(linker, "/export:?set@TrackingLevel@Heap@Details@Platform@@SAXW4HeapAllocationTrackingLevel@34@@Z=wincorlib_orig.dll.?set@TrackingLevel@Heap@Details@Platform@@SAXW4HeapAllocationTrackingLevel@34@@Z,@257") +#endif \ No newline at end of file diff --git a/ep_startmenu/ep_sm_main.c b/ep_startmenu/ep_sm_main.c new file mode 100644 index 0000000..ec9d243 --- /dev/null +++ b/ep_startmenu/ep_sm_main.c @@ -0,0 +1,73 @@ +#include +#include +#include "ep_sm_forwards.h" +#pragma comment(lib, "Dbghelp.lib") + +HMODULE hModule = NULL; +HMODULE hOrig = NULL; +wchar_t* (*pGetCmdArguments)(int*) = NULL; +SRWLOCK lockInstanced = { .Ptr = SRWLOCK_INIT }; +BOOL bInstanced = FALSE; + +BOOL start_GetProductInfo(DWORD dwOSMajorVersion, DWORD dwOSMinorVersion, DWORD dwSpMajorVersion, DWORD dwSpMinorVersion, PDWORD pdwReturnedProductType) +{ + *pdwReturnedProductType = 119; + return TRUE; +} + +void Init() +{ + DWORD dwStartShowClassicMode = 0, dwSize = sizeof(DWORD); + RegGetValueW(HKEY_CURRENT_USER, L"Software\\Microsoft\\Windows\\CurrentVersion\\Explorer\\Advanced", L"Start_ShowClassicMode", RRF_RT_DWORD, NULL, &dwStartShowClassicMode, &dwSize); + if (dwStartShowClassicMode) + { + VnPatchIAT(GetModuleHandleW(NULL), "api-ms-win-core-sysinfo-l1-2-0.dll", "GetProductInfo", start_GetProductInfo); + } + HMODULE hMod; + GetModuleHandleExW(GET_MODULE_HANDLE_EX_FLAG_FROM_ADDRESS, hModule, &hMod); + bInstanced = TRUE; +} + +#pragma comment(linker, "/export:?GetCmdArguments@Details@Platform@@YAPEAPEA_WPEAH@Z=GetCmdArguments") +wchar_t* GetCmdArguments(int* a1) +{ + AcquireSRWLockExclusive(&lockInstanced); + if (!hOrig) + { + hOrig = LoadLibraryW(L"wincorlib_orig.dll"); + if (hOrig) + { + pGetCmdArguments = GetProcAddress(hOrig, "?GetCmdArguments@Details@Platform@@YAPEAPEA_WPEAH@Z"); + } + } + if (pGetCmdArguments) + { + if (!bInstanced) Init(); + ReleaseSRWLockExclusive(&lockInstanced); + return pGetCmdArguments(a1); + } + ReleaseSRWLockExclusive(&lockInstanced); + return NULL; +} + +BOOL WINAPI DllMain( + _In_ HINSTANCE hinstDLL, + _In_ DWORD fdwReason, + _In_ LPVOID lpvReserved +) +{ + switch (fdwReason) + { + case DLL_PROCESS_ATTACH: + DisableThreadLibraryCalls(hinstDLL); + hModule = hinstDLL; + break; + case DLL_THREAD_ATTACH: + break; + case DLL_THREAD_DETACH: + break; + case DLL_PROCESS_DETACH: + break; + } + return TRUE; +} diff --git a/ep_startmenu/ep_startmenu.vcxproj b/ep_startmenu/ep_startmenu.vcxproj new file mode 100644 index 0000000..90f80cd --- /dev/null +++ b/ep_startmenu/ep_startmenu.vcxproj @@ -0,0 +1,169 @@ + + + + + Debug + Win32 + + + Release + Win32 + + + Debug + x64 + + + Release + x64 + + + + 16.0 + Win32Proj + {6bf03eea-200a-4698-9555-057dd52b0c78} + epstartmenu + 10.0 + + + + DynamicLibrary + true + v142 + Unicode + + + DynamicLibrary + false + v142 + true + Unicode + + + DynamicLibrary + true + v142 + Unicode + + + DynamicLibrary + false + v142 + true + Unicode + + + + + + + + + + + + + + + + + + + + + true + $(SolutionDir)\build\$(Configuration) + $(ProjectName) + + + false + $(SolutionDir)\build\$(Configuration) + $(ProjectName) + + + true + $(SolutionDir)\build\$(Configuration) + $(ProjectName) + + + false + $(SolutionDir)\build\$(Configuration) + $(ProjectName) + + + + Level3 + true + WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) + true + MultiThreadedDebug + $(SolutionDir)libs\libvalinet;%(AdditionalIncludeDirectories) + + + Console + true + + + + + Level3 + true + true + true + WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions) + true + MultiThreaded + $(SolutionDir)libs\libvalinet;%(AdditionalIncludeDirectories) + + + Console + true + true + true + + + + + Level3 + true + _DEBUG;_CONSOLE;%(PreprocessorDefinitions) + true + MultiThreadedDebug + $(SolutionDir)libs\libvalinet;%(AdditionalIncludeDirectories) + + + Console + true + + + + + Level3 + true + true + true + NDEBUG;_CONSOLE;%(PreprocessorDefinitions) + true + MultiThreaded + $(SolutionDir)libs\libvalinet;%(AdditionalIncludeDirectories) + + + Console + true + true + true + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/ep_startmenu/ep_startmenu.vcxproj.filters b/ep_startmenu/ep_startmenu.vcxproj.filters new file mode 100644 index 0000000..ebb43b5 --- /dev/null +++ b/ep_startmenu/ep_startmenu.vcxproj.filters @@ -0,0 +1,32 @@ + + + + + {4FC737F1-C7A5-4376-A066-2A32D752A2FF} + cpp;c;cc;cxx;c++;cppm;ixx;def;odl;idl;hpj;bat;asm;asmx + + + {93995380-89BD-4b04-88EB-625FBE52EBFB} + h;hh;hpp;hxx;h++;hm;inl;inc;ipp;xsd + + + {67DA6AB6-F800-4c08-8B7A-83BB121AAD01} + rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav;mfcribbon-ms + + + + + Header Files + + + + + Source Files + + + + + Resource Files + + + \ No newline at end of file