|
@@ -251,72 +251,9 @@ static LONG WINAPI SuppressError(struct _EXCEPTION_POINTERS* ExceptionInfo)
|
|
|
return EXCEPTION_EXECUTE_HANDLER;
|
|
|
}
|
|
|
|
|
|
-static void DisableSetUnhandledExceptionFilter()
|
|
|
-{
|
|
|
- void* addr = (void*)GetProcAddress(LoadLibrary("kernel32.dll"), "SetUnhandledExceptionFilter");
|
|
|
- if (addr) {
|
|
|
- DWORD dwOldFlag, dwTempFlag;
|
|
|
- unsigned char code[] = {0x33, 0xC0, 0xC2, 0x04, 0x00}; // xor eax,eax; ret 4;
|
|
|
- //VirtualProtect(addr, sizeof(code), PAGE_READWRITE, &dwOldFlag);
|
|
|
- VirtualProtectEx(GetCurrentProcess(), addr, sizeof(code), PAGE_EXECUTE_READWRITE, &dwOldFlag);
|
|
|
- WriteProcessMemory(GetCurrentProcess(), addr, code, sizeof(code), NULL);
|
|
|
- VirtualProtect(addr, sizeof(code), dwOldFlag, &dwTempFlag);
|
|
|
- }
|
|
|
-}
|
|
|
-
|
|
|
__declspec(dllimport) bool DisableCharmbar();
|
|
|
__declspec(dllimport) bool EnableCharmbar();
|
|
|
|
|
|
-
|
|
|
-static HANDLE create_process(const char *app)
|
|
|
-{
|
|
|
- //BOOL bRet;
|
|
|
- STARTUPINFOA si = { sizeof(STARTUPINFOA) };
|
|
|
- si.wShowWindow = SW_SHOWMAXIMIZED;
|
|
|
- si.dwFlags = STARTF_USESHOWWINDOW;
|
|
|
- PROCESS_INFORMATION pi;
|
|
|
- DWORD dwSessionId;
|
|
|
- HANDLE hUserTokenDup, hThisToken;
|
|
|
- HANDLE hProcess = NULL;
|
|
|
-
|
|
|
- dwSessionId = WTSGetActiveConsoleSessionId();
|
|
|
- if (OpenProcessToken(GetCurrentProcess(), TOKEN_ALL_ACCESS, &hThisToken)) {
|
|
|
- LUID luid;
|
|
|
- TOKEN_PRIVILEGES tp;
|
|
|
- LPVOID pEnv = NULL;
|
|
|
- LookupPrivilegeValueA(NULL, SE_DEBUG_NAME, &luid);
|
|
|
- tp.PrivilegeCount = 1;
|
|
|
- tp.Privileges[0].Luid = luid;
|
|
|
- tp.Privileges[0].Attributes = SE_PRIVILEGE_ENABLED;
|
|
|
- DuplicateTokenEx(hThisToken, MAXIMUM_ALLOWED, NULL,
|
|
|
- SecurityIdentification, TokenPrimary, &hUserTokenDup);
|
|
|
- SetTokenInformation(hUserTokenDup,
|
|
|
- TokenSessionId, (void*)&dwSessionId, sizeof(DWORD));
|
|
|
- AdjustTokenPrivileges(hUserTokenDup, FALSE, &tp, sizeof(TOKEN_PRIVILEGES),
|
|
|
- (PTOKEN_PRIVILEGES)NULL, NULL);
|
|
|
- //CreateEnvironmentBlock(&pEnv,hUserTokenDup,TRUE);
|
|
|
- if (CreateProcessAsUserA(hUserTokenDup, NULL,
|
|
|
- (LPSTR)app, // "D:\\Source\\RVC\\RVCProject\\Release\\version\\1.0.0.1\\bin\\MetroWatcher64.exe 732",
|
|
|
- NULL, NULL, FALSE, 0, pEnv, NULL, &si, &pi))
|
|
|
- {
|
|
|
- CloseHandle(pi.hThread);
|
|
|
- hProcess = pi.hProcess;
|
|
|
- }
|
|
|
- else
|
|
|
- DbgWithLink(LOG_LEVEL_WARN, LOG_TYPE_SYSTEM).setAPI(__FUNCTION__)("create process failed! Error : ", GetLastError());
|
|
|
-
|
|
|
- //if (pEnv)
|
|
|
- //DestroyEnvironmentBlock(pEnv);
|
|
|
- CloseHandle(hUserTokenDup);
|
|
|
- CloseHandle(hThisToken);
|
|
|
- }
|
|
|
- else {
|
|
|
- DbgWithLink(LOG_LEVEL_WARN, LOG_TYPE_SYSTEM).setAPI(__FUNCTION__)("open process token failed! Error : ", GetLastError());
|
|
|
- }
|
|
|
-
|
|
|
- return hProcess;
|
|
|
-}
|
|
|
-
|
|
|
static void AutoHideTaskBar(bool bHide)
|
|
|
{
|
|
|
APPBARDATA apBar;
|
|
@@ -331,31 +268,6 @@ static void AutoHideTaskBar(bool bHide)
|
|
|
}
|
|
|
}
|
|
|
|
|
|
-
|
|
|
-
|
|
|
-static bool AddRegIntValue(HKEY hKey, const char *szSubKey, const char *szKeyName, DWORD dwValue, bool bWin64)
|
|
|
-{
|
|
|
- HKEY hSubKey;
|
|
|
- LONG nRet = ::RegCreateKeyEx(hKey,
|
|
|
- szSubKey,
|
|
|
- 0,
|
|
|
- NULL,
|
|
|
- 0,
|
|
|
- bWin64 ? (KEY_ALL_ACCESS | KEY_WOW64_64KEY) : (KEY_ALL_ACCESS | KEY_WOW64_32KEY),
|
|
|
- NULL,
|
|
|
- &hSubKey,
|
|
|
- NULL);
|
|
|
- if (nRet != ERROR_SUCCESS)
|
|
|
- return false;
|
|
|
-
|
|
|
- nRet = RegSetValueExA(hSubKey, szKeyName, 0, REG_DWORD, (BYTE*)&dwValue, sizeof(DWORD));
|
|
|
- RegCloseKey(hSubKey);
|
|
|
- return (nRet == ERROR_SUCCESS);
|
|
|
-}
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
static bool AddFirewallRules()
|
|
|
{
|
|
|
char szBinDir[MAX_PATH] = {};
|
|
@@ -408,43 +320,6 @@ static void AddFirewallRulesEx()
|
|
|
|
|
|
|
|
|
|
|
|
-bool DisableWindowsCharmBar(void *param)
|
|
|
-{
|
|
|
-
|
|
|
- auto AutoHideCharmBar = []()->bool
|
|
|
- {
|
|
|
- HWND hWnd = FindWindow(NULL, "Charm Bar");
|
|
|
- if (hWnd)
|
|
|
- {
|
|
|
- ShowWindow(hWnd, SW_HIDE);
|
|
|
- return true;
|
|
|
- }
|
|
|
- else
|
|
|
- return false;
|
|
|
-
|
|
|
- };
|
|
|
- static bool firstRun = true;
|
|
|
- while(true)
|
|
|
- {
|
|
|
- auto ret = AutoHideCharmBar();
|
|
|
- if(firstRun)
|
|
|
- {
|
|
|
- firstRun = false;
|
|
|
- if(ret) DbgWithLink(LOG_LEVEL_INFO, LOG_TYPE_SYSTEM).setAPI(__FUNCTION__)("disable windows 8 charmbar %s", "succ");
|
|
|
- }
|
|
|
- if (!ret) break;
|
|
|
- Sleep(5000);
|
|
|
- }
|
|
|
- DbgWithLink(LOG_LEVEL_INFO, LOG_TYPE_SYSTEM).setAPI(__FUNCTION__)("disable windows 8 charmbar failed, end!!");
|
|
|
- return false;
|
|
|
-}
|
|
|
-
|
|
|
-static void DisableWindowsCharmBarThread(bool bX64)
|
|
|
-{
|
|
|
- static bool curver = bX64;
|
|
|
- CloseHandle(CreateThread(NULL, 0, (LPTHREAD_START_ROUTINE)&DisableWindowsCharmBar, &curver, 0, NULL));
|
|
|
-}
|
|
|
-
|
|
|
#endif //RVC_OS_WIN
|
|
|
|
|
|
/*!
|
|
@@ -576,24 +451,6 @@ void DisplayUsage()
|
|
|
#endif
|
|
|
}
|
|
|
|
|
|
-static CSimpleStringA GetTerminalVerFromShellConfig()
|
|
|
-{
|
|
|
- char tmp[MAX_PATH];
|
|
|
- GetModuleFileNameA(NULL, tmp, MAX_PATH);
|
|
|
- *strrchr(tmp, SPLIT_SLASH) = 0;
|
|
|
- *strrchr(tmp, SPLIT_SLASH) = 0;
|
|
|
- strcat(tmp, SPLIT_SLASH_STR "cfg");
|
|
|
- strcat(tmp, SPLIT_SLASH_STR "shell.ini");
|
|
|
- char* value = inifile_read_str(tmp, "Main", "SoftwareVersion", "");
|
|
|
- if (value == NULL) return "";
|
|
|
-
|
|
|
- CSimpleStringA result(value);
|
|
|
- FREE(value);
|
|
|
-
|
|
|
- return result;
|
|
|
-}
|
|
|
-
|
|
|
-
|
|
|
static void DestroyArgs(sp_cfg_start_args_t* args)
|
|
|
{
|
|
|
if (args != NULL) {
|