|
@@ -5,6 +5,7 @@
|
|
|
#include <assert.h>
|
|
|
#include <algorithm>
|
|
|
#include "fileutil.h"
|
|
|
+#include "osutil.h"
|
|
|
#include <ctime>
|
|
|
#include "SpUtility.h"
|
|
|
#include "RestfulFunc.h"
|
|
@@ -14,6 +15,7 @@
|
|
|
#include "ResourceWatcher_UserCode.h"
|
|
|
|
|
|
#ifdef RVC_OS_LINUX
|
|
|
+
|
|
|
#include <vector>
|
|
|
#include <dirent.h>
|
|
|
#include <sstream>
|
|
@@ -24,7 +26,13 @@
|
|
|
#include "iniutil.h"
|
|
|
#include "osutil.h"
|
|
|
#include <winpr/file.h>
|
|
|
+
|
|
|
+#define PROCESS_ITEM 14 //进程CPU信息读取位置参数
|
|
|
+const int MAX_MAINLINK_CHECK_TIME = 5000;
|
|
|
+const int TIMER_MAINLINK_CHECK = 4;
|
|
|
+#define SECNAME_SFINSTALL "SoftwareInstallDetect%d"
|
|
|
#else
|
|
|
+
|
|
|
#include <intrin.h>
|
|
|
#include <ShlObj.h>
|
|
|
#include <ShellAPI.h>
|
|
@@ -46,14 +54,7 @@
|
|
|
#include <sysinfoapi.h>
|
|
|
#include "Mmdeviceapi.h"
|
|
|
#include "Propidl.h"
|
|
|
-#endif
|
|
|
|
|
|
-#ifdef RVC_OS_LINUX
|
|
|
-#define PROCESS_ITEM 14 //进程CPU信息读取位置参数
|
|
|
-const int MAX_MAINLINK_CHECK_TIME = 5000;
|
|
|
-const int TIMER_MAINLINK_CHECK = 4;
|
|
|
-#define SECNAME_SFINSTALL "SoftwareInstallDetect%d"
|
|
|
-#else
|
|
|
const int MILLION = 1048576;
|
|
|
#define SECNAME_SFINSTALL "SoftwareInstallDetectWIN%d"
|
|
|
#define ENCODING (X509_ASN_ENCODING | PKCS_7_ASN_ENCODING)
|
|
@@ -1579,35 +1580,13 @@ void ResourceWatcherFSM::DetectAutoStartupCover()
|
|
|
}
|
|
|
}
|
|
|
|
|
|
-//TODO: CrossPlaform [Gifur@2025729]
|
|
|
-static int Is32R64Platform()
|
|
|
-{
|
|
|
- static int isWow64 = -1;
|
|
|
- typedef BOOL(WINAPI* LPFN_ISWOW64PROCESS)(HANDLE, PBOOL);
|
|
|
- if (isWow64 == -1) {
|
|
|
- BOOL bIsWow64 = FALSE;
|
|
|
- LPFN_ISWOW64PROCESS fnIsWow64Process = (LPFN_ISWOW64PROCESS)GetProcAddress(GetModuleHandle("kernel32"), "IsWow64Process");
|
|
|
- if (NULL != fnIsWow64Process) {
|
|
|
- if (!fnIsWow64Process(GetCurrentProcess(), &bIsWow64)) {
|
|
|
- DbgWithLink(LOG_LEVEL_WARN, LOG_TYPE_SYSTEM)("detect is running with 64bit or not failed: %u", GetLastError());
|
|
|
- return -1;
|
|
|
- }
|
|
|
- else
|
|
|
- {
|
|
|
- isWow64 = bIsWow64 ? 1 : 0;
|
|
|
- }
|
|
|
- }
|
|
|
- }
|
|
|
- return isWow64;
|
|
|
-}
|
|
|
-
|
|
|
int ResourceWatcherFSM::DetectAutoStartupType(CSimpleStringA& strValue)
|
|
|
{
|
|
|
LOG_FUNCTION();
|
|
|
|
|
|
int vbsType = -1;
|
|
|
DWORD dwFlag = KEY_READ | KEY_QUERY_VALUE | KEY_ENUMERATE_SUB_KEYS;
|
|
|
- if (Is32R64Platform() != 0) {
|
|
|
+ if (osutil_is32r64_platform() == 1) {
|
|
|
dwFlag |= KEY_WOW64_64KEY;
|
|
|
}
|
|
|
bool explorerSet = false;
|
|
@@ -1710,7 +1689,7 @@ ErrorCodeEnum ResourceWatcherFSM::ChangeAutoStartupWithExe(bool resetVBS, bool r
|
|
|
}
|
|
|
|
|
|
DWORD dwFlag = KEY_WRITE;
|
|
|
- if (Is32R64Platform() != 0) {
|
|
|
+ if (osutil_is32r64_platform() == 1) {
|
|
|
dwFlag |= KEY_WOW64_64KEY;
|
|
|
}
|
|
|
HKEY hKey;
|
|
@@ -2036,85 +2015,11 @@ void ResourceWatcherFSM::DetectVersionHasChangedAndWarn()
|
|
|
}
|
|
|
}
|
|
|
|
|
|
-bool ResourceWatcherFSM::SetDesktopSysIcon2Registry(const std::string& key, bool toDisplay)
|
|
|
-{
|
|
|
- bool result(true);
|
|
|
- DWORD dwFlag = KEY_READ | KEY_WRITE | KEY_QUERY_VALUE | KEY_ENUMERATE_SUB_KEYS;
|
|
|
- if (Is32R64Platform() != 0) {
|
|
|
- dwFlag |= KEY_WOW64_64KEY;
|
|
|
- }
|
|
|
- HKEY hKey4Panel;
|
|
|
- HKEY hKey4StartMenu;
|
|
|
- DWORD dwCurValue4Panel = (DWORD)-1;
|
|
|
- DWORD dwCurValue4StartMenu = (DWORD)-1;
|
|
|
-
|
|
|
- LONG lResult = RegOpenKeyEx(HKEY_CURRENT_USER,"Software\\Microsoft\\Windows\\CurrentVersion\\Explorer\\HideDesktopIcons\\NewStartPanel", 0, dwFlag, &hKey4Panel);
|
|
|
- if (lResult == ERROR_SUCCESS) {
|
|
|
- DWORD dwType = REG_DWORD;
|
|
|
- DWORD dwValue = 0;
|
|
|
- DWORD dwSize = sizeof(DWORD);
|
|
|
- lResult = RegQueryValueExA(hKey4Panel, key.c_str(), NULL, &dwType, (LPBYTE)&dwValue, &dwSize);
|
|
|
- if (lResult == ERROR_SUCCESS) {
|
|
|
- dwCurValue4Panel = dwValue;
|
|
|
- DbgWithLink(LOG_LEVEL_DEBUG, LOG_TYPE_SYSTEM).setAPI(__FUNCTION__)("NewStartPanel Value of %s: %d", key.c_str(), dwCurValue4Panel);
|
|
|
- }
|
|
|
- else {
|
|
|
- result = false;
|
|
|
- DbgWithLink(LOG_LEVEL_WARN, LOG_TYPE_SYSTEM).setAPI(__FUNCTION__)("RegQueryValueEx for \"%s\" in NewStartPanel error, result=%ld.", key.c_str(), lResult);
|
|
|
- }
|
|
|
- }
|
|
|
-
|
|
|
- lResult = RegOpenKeyEx(HKEY_CURRENT_USER, "Software\\Microsoft\\Windows\\CurrentVersion\\Explorer\\HideDesktopIcons\\ClassicStartMenu", 0, dwFlag, &hKey4StartMenu);
|
|
|
- if (lResult == ERROR_SUCCESS) {
|
|
|
- DWORD dwType = REG_DWORD;
|
|
|
- DWORD dwValue = 0;
|
|
|
- DWORD dwSize = sizeof(DWORD);
|
|
|
- lResult = RegQueryValueExA(hKey4StartMenu, key.c_str(), NULL, &dwType, (LPBYTE)&dwValue, &dwSize);
|
|
|
- if (lResult == ERROR_SUCCESS) {
|
|
|
- dwCurValue4StartMenu = dwValue;
|
|
|
- DbgWithLink(LOG_LEVEL_DEBUG, LOG_TYPE_SYSTEM).setAPI(__FUNCTION__)("ClassicStartMenu Value of %s: %d", key.c_str(), dwCurValue4StartMenu);
|
|
|
- }
|
|
|
- else {
|
|
|
- result = false;
|
|
|
- DbgWithLink(LOG_LEVEL_WARN, LOG_TYPE_SYSTEM).setAPI(__FUNCTION__)("RegQueryValueEx for \"%s\" in ClassicStartMenu error, result=%ld.", key.c_str(), lResult);
|
|
|
- }
|
|
|
- }
|
|
|
- const DWORD dwAimValue = toDisplay ? 0 : 1;
|
|
|
- if (dwCurValue4Panel != (DWORD)(-1) && dwCurValue4Panel != dwAimValue) {
|
|
|
- DWORD dwType = REG_DWORD;
|
|
|
- DWORD dwValue = dwAimValue;
|
|
|
- DWORD dwSize = sizeof(DWORD);
|
|
|
- lResult = RegSetValueExA(hKey4Panel, key.c_str(), 0, dwType, (BYTE*)&dwValue, dwSize);
|
|
|
- if (lResult == ERROR_SUCCESS) {
|
|
|
- DbgWithLink(LOG_LEVEL_INFO, LOG_TYPE_SYSTEM).setAPI(__FUNCTION__)("Set Value with %d for %s in NewStartPanel succ.", dwValue, key.c_str());
|
|
|
- }
|
|
|
- else {
|
|
|
- result = false;
|
|
|
- DbgWithLink(LOG_LEVEL_WARN, LOG_TYPE_SYSTEM).setAPI(__FUNCTION__)("Set Value with %d for %s in NewStartPanel error, result=%ld.", dwValue, key.c_str(), lResult);
|
|
|
- }
|
|
|
- }
|
|
|
- if (dwCurValue4StartMenu != (DWORD)(-1) && dwCurValue4StartMenu != dwAimValue) {
|
|
|
- DWORD dwType = REG_DWORD;
|
|
|
- DWORD dwValue = dwAimValue;
|
|
|
- DWORD dwSize = sizeof(DWORD);
|
|
|
- lResult = RegSetValueExA(hKey4StartMenu, key.c_str(), 0, dwType, (BYTE*)&dwValue, dwSize);
|
|
|
- if (lResult == ERROR_SUCCESS) {
|
|
|
- DbgWithLink(LOG_LEVEL_INFO, LOG_TYPE_SYSTEM).setAPI(__FUNCTION__)("Set Value with %d for %s in ClassicStartMenu succ.", dwValue, key.c_str());
|
|
|
- }
|
|
|
- else {
|
|
|
- result = false;
|
|
|
- DbgWithLink(LOG_LEVEL_WARN, LOG_TYPE_SYSTEM).setAPI(__FUNCTION__)("Set Value with %d for %s in ClassicStartMenu error, result=%ld.", dwValue, key.c_str(), lResult);
|
|
|
- }
|
|
|
- }
|
|
|
- RegCloseKey(hKey4Panel);
|
|
|
- RegCloseKey(hKey4StartMenu);
|
|
|
- return result;
|
|
|
-}
|
|
|
-
|
|
|
void ResourceWatcherFSM::MakeSureWin8IntoDesktopPageAtLogon()
|
|
|
{
|
|
|
+ const bool isWow64 = (osutil_is32r64_platform() == 1);
|
|
|
DWORD dwFlag = KEY_READ | KEY_QUERY_VALUE | KEY_ENUMERATE_SUB_KEYS;
|
|
|
- if (Is32R64Platform() != 0) {
|
|
|
+ if (isWow64) {
|
|
|
dwFlag |= KEY_WOW64_64KEY;
|
|
|
}
|
|
|
bool isWin8(false);
|
|
@@ -2146,7 +2051,7 @@ void ResourceWatcherFSM::MakeSureWin8IntoDesktopPageAtLogon()
|
|
|
}
|
|
|
if (toSetOpenAtLogon) {
|
|
|
dwFlag = KEY_WRITE;
|
|
|
- if (Is32R64Platform() != 0) {
|
|
|
+ if (isWow64) {
|
|
|
dwFlag |= KEY_WOW64_64KEY;
|
|
|
}
|
|
|
DbgWithLink(LOG_LEVEL_DEBUG, LOG_TYPE_SYSTEM)("to Set OpenAtLogon");
|
|
@@ -3485,8 +3390,9 @@ void ResourceWatcherFSM::DetectWallpaperAndWarn()
|
|
|
return;
|
|
|
}
|
|
|
bool wallpapaerSetCMD = true;
|
|
|
+ const bool isWow64 = (osutil_is32r64_platform() == 1);
|
|
|
DWORD dwFlag = KEY_READ | KEY_QUERY_VALUE | KEY_ENUMERATE_SUB_KEYS;
|
|
|
- if (Is32R64Platform() != 0) {
|
|
|
+ if (isWow64) {
|
|
|
dwFlag |= KEY_WOW64_64KEY;
|
|
|
}
|
|
|
bool wellDone = false;
|
|
@@ -3555,7 +3461,7 @@ void ResourceWatcherFSM::DetectWallpaperAndWarn()
|
|
|
|
|
|
if (ExistsFileA(aimWallPaper)) {
|
|
|
dwFlag = KEY_WRITE;
|
|
|
- if (Is32R64Platform() != 0) {
|
|
|
+ if (isWow64) {
|
|
|
dwFlag |= KEY_WOW64_64KEY;
|
|
|
}
|
|
|
lResult = RegOpenKeyEx(HKEY_CURRENT_USER, "Control Panel\\Desktop", 0, dwFlag, &hKey);
|
|
@@ -3818,7 +3724,7 @@ const char* dmi_string(const dmi_header* dm, BYTE s)
|
|
|
void FetchSoftewareInstall(vector<SetupSoftInfo>& stupInfo, DWORD& dwInitFlag)
|
|
|
{
|
|
|
DWORD dwFlag = KEY_READ | KEY_QUERY_VALUE | KEY_ENUMERATE_SUB_KEYS;
|
|
|
- if (dwInitFlag == 0 && Is32R64Platform() != 0) {
|
|
|
+ if (dwInitFlag == 0 && osutil_is32r64_platform() == 1) {
|
|
|
dwInitFlag = 1;
|
|
|
DbgWithLink(LOG_LEVEL_DEBUG, LOG_TYPE_SYSTEM)("with KEY_WOW64_64KEY");
|
|
|
dwFlag |= KEY_WOW64_64KEY;
|
|
@@ -3833,7 +3739,6 @@ void FetchSoftewareInstall(vector<SetupSoftInfo>& stupInfo, DWORD& dwInitFlag)
|
|
|
TCHAR szValue[MAX_PATH + 1] = { 0 };
|
|
|
memset(szValue, '\0', MAX_PATH + 1);
|
|
|
RegEnumKeyEx(hKey, i, szValue, &dwRegSize, NULL, NULL, NULL, NULL);
|
|
|
- //DbgWithLink(LOG_LEVEL_DEBUG, LOG_TYPE_SYSTEM)("%d:%s",i,szValue);
|
|
|
DWORD dwType;
|
|
|
HKEY hSubKey;
|
|
|
if (RegOpenKeyEx(hKey, szValue, NULL, KEY_READ, &hSubKey) == ERROR_SUCCESS)
|