|
|
@@ -8,6 +8,7 @@
|
|
|
#include "fileutil.h"
|
|
|
#include <ctime>
|
|
|
#include "CommEntityUtil.hpp"
|
|
|
+#include "SpUtility.h"
|
|
|
#include <stdio.h>
|
|
|
#include <stdlib.h>
|
|
|
#include "ResourceWatcher_UserCode.h"
|
|
|
@@ -289,15 +290,7 @@ void ResourceWatcherFSM::TriggerAtStatusChanged(bool bMStatus)
|
|
|
VerifyDigitSignTask* task = new VerifyDigitSignTask(this);
|
|
|
GetEntityBase()->GetFunction()->PostThreadPoolTask(task);
|
|
|
}
|
|
|
-
|
|
|
- if (IsHasSetAutoStartupByFolder()) {
|
|
|
- /** 因为安装时已经设置为开机自启动了,所以要把注册表的开机自启动取消掉(如果有) Gifur@20221017]*/
|
|
|
- m_forceStartupWithExeFlag = 3;
|
|
|
- }
|
|
|
- else {
|
|
|
- InitialAutoStartupSetType();
|
|
|
- }
|
|
|
- DetectAutoStartupCover();
|
|
|
+
|
|
|
#endif //RVC_OS_WIN
|
|
|
|
|
|
if (hardwareCheckTime <= 0) { //非法数值情况下设置为默认一分钟
|
|
|
@@ -371,14 +364,10 @@ ErrorCodeEnum ResourceWatcherFSM::OnInit()
|
|
|
m_bFirstRunAfterBoot = DetectIsFirstRunAtBoot();
|
|
|
if (m_bFirstRunAfterBoot) {
|
|
|
DbgWithLink(LOG_LEVEL_DEBUG, LOG_TYPE_SYSTEM)("First time to run after system boot.");
|
|
|
-#if defined(RVC_OS_WIN)
|
|
|
- m_DoneDetectAutostart = false;
|
|
|
-#endif //RVC_OS_WIN
|
|
|
}
|
|
|
|
|
|
if (m_bFirstRunAfterBoot) {
|
|
|
#if defined(RVC_OS_WIN)
|
|
|
- DetectDesktopFileAndWarn();
|
|
|
//GetSystemMetrics (SM_CMONITORS) 计数仅显示可见的显示器
|
|
|
const int screenNums = GetSystemMetrics(SM_CMONITORS);
|
|
|
const int aimScreenNums4Stand2S = 2;
|
|
|
@@ -413,6 +402,28 @@ ErrorCodeEnum ResourceWatcherFSM::OnExit()
|
|
|
|
|
|
void ResourceWatcherFSM::AfterInit()
|
|
|
{
|
|
|
+#if defined(RVC_OS_WIN)
|
|
|
+ if (m_bFirstRunAfterBoot) {
|
|
|
+
|
|
|
+ DetectAutoStartupCover();
|
|
|
+
|
|
|
+ CSmartPointer<IConfigInfo> spCtSettingConfig;
|
|
|
+ GetEntityBase()->GetFunction()->OpenConfig(Config_CenterSetting, spCtSettingConfig);
|
|
|
+
|
|
|
+ int clearDesktopFlag(0);
|
|
|
+ CSimpleStringA strFileWhiteSheet(true);
|
|
|
+ spCtSettingConfig->ReadConfigValueInt(GetEntityBase()->GetEntityName(), "ClearDesktopSwitch", clearDesktopFlag);
|
|
|
+ if (!!clearDesktopFlag) {
|
|
|
+ spCtSettingConfig->ReadConfigValue(GetEntityBase()->GetEntityName(), "DesktopWhiteSheet", strFileWhiteSheet);
|
|
|
+ if (!strFileWhiteSheet.IsNullOrEmpty()) {
|
|
|
+ std::string strLowFileName = SP::Utility::ToLower(std::string(strFileWhiteSheet.GetData()));
|
|
|
+ strFileWhiteSheet = strLowFileName.c_str();
|
|
|
+ }
|
|
|
+ }
|
|
|
+ DetectDestopFileAndWarn(!!clearDesktopFlag, strFileWhiteSheet);
|
|
|
+ }
|
|
|
+ DetectVersionHasChangedAndWarnCover();
|
|
|
+#endif //RVC_OS_WIN
|
|
|
}
|
|
|
|
|
|
void ResourceWatcherFSM::LinkDetect(int detectType, const char* url, bool& status, unsigned int& delay, int warnFlag)
|
|
|
@@ -1666,18 +1677,51 @@ bool ResourceWatcherFSM::GetRegValue(HKEY hKey, LPCTSTR lpcszParam,
|
|
|
|
|
|
void ResourceWatcherFSM::DetectAutoStartupCover()
|
|
|
{
|
|
|
- int bStartupByVbs(0);
|
|
|
- DetectAutoStartup(bStartupByVbs);
|
|
|
- if (m_forceStartupWithExeFlag == 1 && bStartupByVbs == 1 && !m_IsPadDevice) {
|
|
|
- ChangeAutoStartupWithExe(); //test succ
|
|
|
- }
|
|
|
- else if (m_forceStartupWithExeFlag == 2 && (bStartupByVbs == 0 || bStartupByVbs == 1) && !m_IsPadDevice)
|
|
|
- {
|
|
|
- ChangeAutoStartupWithExe(); //test succ || test succ
|
|
|
+ const int nStartupType = DetectAutoStartupType();
|
|
|
+ ErrorCodeEnum rc = Error_InvalidState;
|
|
|
+ int setType = 0;
|
|
|
+ bool toCheckAndDelteAutostartFile(false);
|
|
|
+ switch (setType)
|
|
|
+ {
|
|
|
+ case 1://将VBS改成EXE,前提是VBS必须已在注册表
|
|
|
+ if (nStartupType == 1) {
|
|
|
+ rc = ChangeAutoStartupWithExe();
|
|
|
+ }
|
|
|
+ break;
|
|
|
+ case 2: //设置使用EXE自启动
|
|
|
+ if (nStartupType == 1 || nStartupType == 0 || nStartupType == 3) {
|
|
|
+ rc = ChangeAutoStartupWithExe();
|
|
|
+ if (rc == Error_Succeed && nStartupType == 3) {
|
|
|
+ toCheckAndDelteAutostartFile = true;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ break;
|
|
|
+ case 3: //不设置开机自启动
|
|
|
+ if (nStartupType == 1 || nStartupType == 2) {
|
|
|
+ rc = ChangeAutoStartupWithExe(false, true);
|
|
|
+ }
|
|
|
+ else if (nStartupType == 3) {
|
|
|
+ toCheckAndDelteAutostartFile = true;
|
|
|
+ }
|
|
|
+ break;
|
|
|
+ case 4: //恢复VBS启动(防止EXE启动失败)
|
|
|
+ if (nStartupType == 2 || nStartupType == 0 || nStartupType == 3) {
|
|
|
+ rc = ChangeAutoStartupWithExe(true);
|
|
|
+ if (rc == Error_Succeed && nStartupType == 3) {
|
|
|
+ toCheckAndDelteAutostartFile = true;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ break;
|
|
|
+ default:
|
|
|
+ break;
|
|
|
}
|
|
|
- else if (m_forceStartupWithExeFlag == 3 && (bStartupByVbs == 1 || bStartupByVbs == 2))
|
|
|
- {
|
|
|
- ChangeAutoStartupWithExe(true); //test succ || test succ
|
|
|
+
|
|
|
+ if (toCheckAndDelteAutostartFile) {
|
|
|
+ CSimpleStringA strLnkPath(true);
|
|
|
+ if (IsHasSetAutoStartupByFolder(strLnkPath) && !strLnkPath.IsNullOrEmpty()) {
|
|
|
+ DbgWithLink(LOG_LEVEL_INFO, LOG_TYPE_SYSTEM)("remove auto start lnk file: %s", strLnkPath.GetData());
|
|
|
+ RemoveFileA(strLnkPath);
|
|
|
+ }
|
|
|
}
|
|
|
}
|
|
|
|
|
|
@@ -1703,15 +1747,11 @@ static int Is32R64Platform()
|
|
|
return isWow64;
|
|
|
}
|
|
|
|
|
|
-void ResourceWatcherFSM::DetectAutoStartup(int& vbsType)
|
|
|
+int ResourceWatcherFSM::DetectAutoStartupType()
|
|
|
{
|
|
|
LOG_FUNCTION();
|
|
|
|
|
|
- vbsType = -1;
|
|
|
- if (m_DoneDetectAutostart) {
|
|
|
- vbsType = -2;
|
|
|
- return;
|
|
|
- }
|
|
|
+ int vbsType = -1;
|
|
|
DWORD dwFlag = KEY_READ | KEY_QUERY_VALUE | KEY_ENUMERATE_SUB_KEYS;
|
|
|
if (Is32R64Platform() != 0) {
|
|
|
dwFlag |= KEY_WOW64_64KEY;
|
|
|
@@ -1727,22 +1767,24 @@ void ResourceWatcherFSM::DetectAutoStartup(int& vbsType)
|
|
|
TCHAR szValue[MAX_PATH + 1] = { 0 };
|
|
|
lResult = RegQueryValueEx(hKey, "Shell", NULL, &dwType, (LPBYTE)szValue, &dwSize);
|
|
|
if (lResult == ERROR_SUCCESS) {
|
|
|
- CSimpleStringA value(szValue);
|
|
|
- if (value.IsNullOrEmpty() || value.Compare("explorer.exe") != 0) {
|
|
|
- if (value.IsEndWith(".vbs", true)) {
|
|
|
- LogWarn(Severity_Low, Error_Debug, LOG_WARN_AUTO_STARTUP_FROM_REGIST, value);
|
|
|
- vbsType = 1;
|
|
|
- }
|
|
|
- else if (value.IsEndWith("VTM.exe", true)) {
|
|
|
- LogWarn(Severity_Low, Error_Debug, LOG_WARN_CHECK_AUTO_STARTUP_WITH_EXE, value);
|
|
|
- vbsType = 2;
|
|
|
- }
|
|
|
+ std::string strValue(szValue);
|
|
|
+ strValue = SP::Utility::ToLower(strValue);
|
|
|
+ CSimpleStringA value(strValue.c_str());
|
|
|
+ if (value.IsStartWith("spexplorer", true) && value.IsEndWith(".vbs", true)) {
|
|
|
+ LogWarn(Severity_Low, Error_Debug, LOG_WARN_AUTO_STARTUP_FROM_REGIST, value);
|
|
|
+ vbsType = 1;
|
|
|
+ }
|
|
|
+ else if (value.IsEndWith("vtm.exe", true)) {
|
|
|
+ LogWarn(Severity_Low, Error_Debug, LOG_WARN_CHECK_AUTO_STARTUP_WITH_EXE, value);
|
|
|
+ vbsType = 2;
|
|
|
+ }
|
|
|
+ else if (value.Compare("explorer.exe") == 0 || value.IsNullOrEmpty()) {
|
|
|
+ LogWarn(Severity_Low, Error_Debug, LOG_WARN_NOT_AUTO_STARTUP_FROM_REGIST, value);
|
|
|
+ vbsType = 0;
|
|
|
}
|
|
|
else {
|
|
|
- LogWarn(Severity_Low, Error_Debug, LOG_WARN_NOT_AUTO_STARTUP_FROM_REGIST, value);
|
|
|
- if (value.Compare("explorer.exe") == 0) {
|
|
|
- vbsType = 0;
|
|
|
- }
|
|
|
+ LogWarn(Severity_Low, Error_Debug, LOG_WARN_CHECK_AUTO_STARTUP_UNKNOWN, value);
|
|
|
+ vbsType = 0;
|
|
|
}
|
|
|
}
|
|
|
else {
|
|
|
@@ -1755,11 +1797,18 @@ void ResourceWatcherFSM::DetectAutoStartup(int& vbsType)
|
|
|
CSimpleStringA::Format("RegOpenKeyEx error, GLE=%u.", GetLastError()));
|
|
|
}
|
|
|
RegCloseKey(hKey);
|
|
|
- m_DoneDetectAutostart = true;
|
|
|
- return;
|
|
|
+
|
|
|
+ if (vbsType == 0 || vbsType == -1) {
|
|
|
+ CSimpleStringA strLnkPath(true);
|
|
|
+ if (IsHasSetAutoStartupByFolder(strLnkPath)) {
|
|
|
+ LogWarn(Severity_Low, Error_Debug, LOG_WARN_CHECK_AUTO_STARTUP_WITH_STARTMENU, strLnkPath);
|
|
|
+ vbsType = 3;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ return vbsType;
|
|
|
}
|
|
|
|
|
|
-ErrorCodeEnum ResourceWatcherFSM::ChangeAutoStartupWithExe(bool resetExplorer)
|
|
|
+ErrorCodeEnum ResourceWatcherFSM::ChangeAutoStartupWithExe(bool resetVBS, bool resetExplorer)
|
|
|
{
|
|
|
const char* exploreExe = "explorer.exe";
|
|
|
ErrorCodeEnum result(Error_Succeed);
|
|
|
@@ -1771,12 +1820,18 @@ ErrorCodeEnum ResourceWatcherFSM::ChangeAutoStartupWithExe(bool resetExplorer)
|
|
|
{
|
|
|
result = GetEntityBase()->GetFunction()->GetPath("RootVer", exePath);
|
|
|
if (exePath.IsNullOrEmpty() || result != Error_Succeed) {
|
|
|
- DbgWithLink(LOG_LEVEL_WARN, LOG_TYPE_SYSTEM)("Get RootVer path failed: %d", result);
|
|
|
+ LogWarn(Severity_Middle, Error_Unexpect, LOG_WARN_UPDATE_AUTO_STARTUP_WITH_EXE_FAILED
|
|
|
+ , CSimpleStringA::Format("Get RootVer path failed: %d", result));
|
|
|
return Error_Unexpect;
|
|
|
}
|
|
|
- exePath.Append("\\VTM.exe");
|
|
|
+ if (!resetVBS)
|
|
|
+ exePath.Append("\\VTM.exe");
|
|
|
+ else
|
|
|
+ exePath.Append("\\spexplorerfast.vbs");
|
|
|
+
|
|
|
if (!ExistsFileA(exePath)) {
|
|
|
- DbgWithLink(LOG_LEVEL_WARN, LOG_TYPE_SYSTEM)("[%s] is not existed!", exePath.GetData());
|
|
|
+ LogWarn(Severity_Middle, Error_Unexpect, LOG_WARN_UPDATE_AUTO_STARTUP_WITH_EXE_FAILED
|
|
|
+ , CSimpleStringA::Format("[%s] is not existed!", exePath.GetData()));
|
|
|
return Error_NotExist;
|
|
|
}
|
|
|
}
|
|
|
@@ -1813,22 +1868,24 @@ ErrorCodeEnum ResourceWatcherFSM::ChangeAutoStartupWithExe(bool resetExplorer)
|
|
|
return result;
|
|
|
}
|
|
|
|
|
|
-void ResourceWatcherFSM::InitialAutoStartupSetType()
|
|
|
+int ResourceWatcherFSM::InitialAutoStartupSetType()
|
|
|
{
|
|
|
+ int ret = 0;
|
|
|
CSmartPointer<IConfigInfo> spConfig;
|
|
|
GetEntityBase()->GetFunction()->OpenConfig(Config_CenterSetting, spConfig);
|
|
|
int value(0);
|
|
|
spConfig->ReadConfigValueInt(GetEntityBase()->GetEntityName(), "AutoStartCMD", value);
|
|
|
if (value != 0) {
|
|
|
- m_forceStartupWithExeFlag = value;
|
|
|
- DbgWithLink(LOG_LEVEL_INFO, LOG_TYPE_SYSTEM)("Get AutoStartCMD from CS: %d", m_forceStartupWithExeFlag);
|
|
|
+ ret = value;
|
|
|
+ DbgWithLink(LOG_LEVEL_INFO, LOG_TYPE_SYSTEM)("Get AutoStartCMD from CS: %d", ret);
|
|
|
}
|
|
|
+ return ret;
|
|
|
}
|
|
|
|
|
|
-BOOL ResourceWatcherFSM::IsHasSetAutoStartupByFolder()
|
|
|
+BOOL ResourceWatcherFSM::IsHasSetAutoStartupByFolder(CSimpleStringA& strPath)
|
|
|
{
|
|
|
BOOL result(FALSE);
|
|
|
-
|
|
|
+ strPath.Clear();
|
|
|
const char* STARTUP_DIR_FULL_PATH = "C:\\ProgramData\\Microsoft\\Windows\\Start Menu\\Programs\\StartUp";
|
|
|
|
|
|
#ifdef DEVOPS_ON_ST /*DevOps流水线编译,ST环境*/
|
|
|
@@ -1846,23 +1903,32 @@ BOOL ResourceWatcherFSM::IsHasSetAutoStartupByFolder()
|
|
|
DbgWithLink(LOG_LEVEL_INFO, LOG_TYPE_SYSTEM)("[%s] dir is not exist!", STARTUP_DIR_FULL_PATH);
|
|
|
return result;
|
|
|
}
|
|
|
+ strPath = STARTUP_DIR_FULL_PATH;
|
|
|
+ strPath += "\\";
|
|
|
+ strPath += CMB_LINK_FILE_NAME;
|
|
|
|
|
|
- auto arr = fileutil_get_sub_files(STARTUP_DIR_FULL_PATH);
|
|
|
- if (arr != NULL) {
|
|
|
- for (int i = 0; i < arr->nelts; ++i) {
|
|
|
- char* file = ARRAY_IDX(arr, i, char*);
|
|
|
- char* filename = strrchr(file, '\\');
|
|
|
- if (filename != NULL) { filename += 1; }
|
|
|
- DbgWithLink(LOG_LEVEL_INFO, LOG_TYPE_SYSTEM)("autostartup[%s]", filename);
|
|
|
- if (filename != NULL/* && strcmp(filename, CMB_LINK_FILE_NAME) == 0*/) {
|
|
|
- CSimpleStringA strfilename(filename);
|
|
|
- if (strfilename.IsStartWith("招商银行可视柜台") && strfilename.IsEndWith(".lnk")) {
|
|
|
- result = TRUE;
|
|
|
- break;
|
|
|
- }
|
|
|
- }
|
|
|
- }
|
|
|
- toolkit_array_free2(arr);
|
|
|
+ if (ExistsFileA(strPath)) {
|
|
|
+ result = TRUE;
|
|
|
+ }
|
|
|
+ else {
|
|
|
+ auto arr = fileutil_get_sub_files(STARTUP_DIR_FULL_PATH);
|
|
|
+ if (arr != NULL) {
|
|
|
+ for (int i = 0; i < arr->nelts; ++i) {
|
|
|
+ char* file = ARRAY_IDX(arr, i, char*);
|
|
|
+ char* filename = strrchr(file, '\\');
|
|
|
+ if (filename != NULL) { filename += 1; }
|
|
|
+ DbgWithLink(LOG_LEVEL_INFO, LOG_TYPE_SYSTEM)("autostartup[%s]", filename);
|
|
|
+ if (filename != NULL/* && strcmp(filename, CMB_LINK_FILE_NAME) == 0*/) {
|
|
|
+ CSimpleStringA strfilename(filename);
|
|
|
+ if (strfilename.IsStartWith("招商银行可视柜台") && strfilename.IsEndWith(".lnk")) {
|
|
|
+ strPath = file;
|
|
|
+ result = TRUE;
|
|
|
+ break;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ toolkit_array_free2(arr);
|
|
|
+ }
|
|
|
}
|
|
|
return result;
|
|
|
}
|
|
|
@@ -1917,7 +1983,7 @@ void ResourceWatcherFSM::DetectVersionHasChangedAndWarn()
|
|
|
}
|
|
|
}
|
|
|
|
|
|
-void ResourceWatcherFSM::DetectDesktopFileAndWarn()
|
|
|
+void ResourceWatcherFSM::DetectDestopFileAndWarn(bool bClear, CSimpleStringA& strFileSaveList)
|
|
|
{
|
|
|
const DWORD INFO_BUFFER_SIZE = 2048;
|
|
|
char infoBuf[INFO_BUFFER_SIZE];
|
|
|
@@ -1936,47 +2002,72 @@ void ResourceWatcherFSM::DetectDesktopFileAndWarn()
|
|
|
}
|
|
|
else
|
|
|
{
|
|
|
+ CSimpleStringA filelist(true);
|
|
|
+ int dirCount(0), fileCount(0);
|
|
|
DbgWithLink(LOG_LEVEL_INFO, LOG_TYPE_SYSTEM)("User name: %s", infoBuf);
|
|
|
CSimpleStringA desktopFullPath = CSimpleStringA::Format("C:\\Users\\%s\\Desktop", infoBuf);
|
|
|
- auto arr = fileutil_get_sub_files(desktopFullPath);
|
|
|
- CSimpleStringA filelist(true);
|
|
|
- int dirCount(0), fileCount(0);
|
|
|
- if (arr != NULL) {
|
|
|
- for (int i = 0; i < arr->nelts; ++i) {
|
|
|
- char* file = ARRAY_IDX(arr, i, char*);
|
|
|
- char* filename = strrchr(file, '\\');
|
|
|
- if (filename != NULL) { filename += 1; }
|
|
|
- else { filename = file; }
|
|
|
- fileCount++;
|
|
|
- if (!filelist.IsNullOrEmpty()) {
|
|
|
- filelist += "|";
|
|
|
- }
|
|
|
- filelist += filename;
|
|
|
- }
|
|
|
- toolkit_array_free2(arr);
|
|
|
- }
|
|
|
-
|
|
|
- filelist += ";";
|
|
|
- arr = fileutil_get_sub_dirs(desktopFullPath);
|
|
|
- if (arr != NULL) {
|
|
|
- for (int i = 0; i < arr->nelts; ++i) {
|
|
|
- char* dir = ARRAY_IDX(arr, i, char*);
|
|
|
- char* dirname = strrchr(dir, '\\');
|
|
|
- if (dirname != NULL) { dirname += 1; }
|
|
|
- else { dirname = dir; }
|
|
|
- dirCount++;
|
|
|
- if (!filelist.IsNullOrEmpty() && i != 0) {
|
|
|
- filelist += "|";
|
|
|
- }
|
|
|
- filelist += dirname;
|
|
|
- }
|
|
|
- toolkit_array_free2(arr);
|
|
|
- }
|
|
|
- if (fileCount + dirCount > 0) {
|
|
|
- LogWarn(Severity_Low, Error_Debug, LOG_INFO_DESKTOP_FILESTATUS, CSimpleStringA::Format(
|
|
|
- "%s's deskop: file(%d),dir(%d), list:(%s)", infoBuf, fileCount, dirCount,
|
|
|
- filelist.GetLength() < 950 ? filelist.GetData() : (filelist.SubString(0, 950) + "....").GetData()));
|
|
|
+ CSimpleStringA desktopPublicPath("C:\\Users\\Public\\Desktop");
|
|
|
+ CAutoArray<CSimpleStringA> desktopPaths;
|
|
|
+ desktopPaths.Init(2);
|
|
|
+ desktopPaths[0] = desktopFullPath;
|
|
|
+ desktopPaths[1] = desktopPublicPath;
|
|
|
+ for (int i = 0; i < desktopPaths.GetCount(); ++i) {
|
|
|
+ CSimpleStringA& curPath = desktopPaths[i];
|
|
|
+ auto arr = fileutil_get_sub_files(curPath);
|
|
|
+ if (arr != NULL) {
|
|
|
+ for (int i = 0; i < arr->nelts; ++i) {
|
|
|
+ char* file = ARRAY_IDX(arr, i, char*);
|
|
|
+ char* filename = strrchr(file, '\\');
|
|
|
+ if (filename != NULL) { filename += 1; }
|
|
|
+ else { filename = file; }
|
|
|
+ fileCount++;
|
|
|
+ if (!filelist.IsNullOrEmpty()) {
|
|
|
+ filelist += "|";
|
|
|
+ }
|
|
|
+ filelist += filename;
|
|
|
+ if (bClear) {
|
|
|
+ std::string strLowFileName = SP::Utility::ToLower(std::string(filename));
|
|
|
+ if (strFileSaveList.IsNullOrEmpty() || strFileSaveList.IndexOf(strLowFileName.c_str()) == -1) {
|
|
|
+ DbgWithLink(LOG_LEVEL_INFO, LOG_TYPE_SYSTEM)("delete desktop file:%s", filename);
|
|
|
+ RemoveFileA(file);
|
|
|
+ }
|
|
|
+ else {
|
|
|
+ DbgWithLink(LOG_LEVEL_DEBUG, LOG_TYPE_SYSTEM)("skip to delete: %s", filename);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ if (arr->nelts > 0) {
|
|
|
+ filelist += ";";
|
|
|
+ }
|
|
|
+ toolkit_array_free2(arr);
|
|
|
+ }
|
|
|
+
|
|
|
+ arr = fileutil_get_sub_dirs(curPath);
|
|
|
+ if (arr != NULL) {
|
|
|
+ for (int i = 0; i < arr->nelts; ++i) {
|
|
|
+ char* dir = ARRAY_IDX(arr, i, char*);
|
|
|
+ char* dirname = strrchr(dir, '\\');
|
|
|
+ if (dirname != NULL) { dirname += 1; }
|
|
|
+ else { dirname = dir; }
|
|
|
+ dirCount++;
|
|
|
+ if (!filelist.IsNullOrEmpty() && i != 0) {
|
|
|
+ filelist += "|";
|
|
|
+ }
|
|
|
+ filelist += dirname;
|
|
|
+ if (bClear) {
|
|
|
+ DbgWithLink(LOG_LEVEL_INFO, LOG_TYPE_SYSTEM)("remove desktop dir:%s", dirname);
|
|
|
+ RemoveDirRecursiveA(dir);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ if (arr->nelts > 0) {
|
|
|
+ filelist += ";";
|
|
|
+ }
|
|
|
+ toolkit_array_free2(arr);
|
|
|
+ }
|
|
|
}
|
|
|
+ LogWarn(Severity_Low, Error_Debug, LOG_INFO_DESKTOP_FILESTATUS
|
|
|
+ ,CSimpleStringA::Format("{\"subject\":\"desktop_file\",\"username\":\"%s\",\"file_count\":%d,\"dir_count\":%d,\"content\":\"%s\"}"
|
|
|
+ , infoBuf, fileCount, dirCount,filelist.GetLength() < 950 ? filelist.GetData() : (filelist.SubString(0, 950) + "....").GetData()));
|
|
|
}
|
|
|
}
|
|
|
|
|
|
@@ -2259,7 +2350,9 @@ void ResourceWatcherFSM::VerifySignature(const CSimpleStringA& filePath)
|
|
|
string strFileName = fileName;
|
|
|
string strFilePath;
|
|
|
|
|
|
- if (strFileName.find(".dll") == string::npos && strFileName.find(".exe") == string::npos)
|
|
|
+ if(strFileName.empty()
|
|
|
+ || (strFileName.rfind(".dll") != strFileName.length() - 4
|
|
|
+ && strFileName.rfind(".exe") != strFileName.length() - 4))
|
|
|
continue;
|
|
|
|
|
|
strFilePath = strDirPath;
|