|
@@ -118,6 +118,17 @@ struct InitializerInitMKTask : ITaskSp
|
|
|
}
|
|
|
};
|
|
|
|
|
|
+struct GetTermSysInfoTask : ITaskSp
|
|
|
+{
|
|
|
+ CAccessAuthEntity* m_entity;
|
|
|
+ GetTermSysInfoTask(CAccessAuthEntity* entity) :m_entity(entity) {}
|
|
|
+
|
|
|
+ void Process()
|
|
|
+ {
|
|
|
+ m_entity->GetHardWareInfo();
|
|
|
+ }
|
|
|
+};
|
|
|
+
|
|
|
typedef struct _REG_TZI_FORMAT
|
|
|
{
|
|
|
LONG Bias;
|
|
@@ -190,6 +201,9 @@ void CAccessAuthEntity::OnStarted()
|
|
|
GetOutPutStr("%s%08X", "获取系统静态信息错误", rc).c_str(), strErrMsg.GetData());
|
|
|
DbgWithLink(LOG_LEVEL_INFO, LOG_TYPE_SYSTEM)(GetOutPutStr("%s%08X", "获取系统静态信息错误", rc).c_str());
|
|
|
}
|
|
|
+
|
|
|
+ CSmartPointer<GetTermSysInfoTask> getTermSysInfoTask = new GetTermSysInfoTask(this);
|
|
|
+ GetFunction()->PostThreadPoolTask(getTermSysInfoTask.GetRawPointer());
|
|
|
}
|
|
|
|
|
|
void CAccessAuthEntity::OnPreStart(CAutoArray<CSimpleStringA> strArgs,CSmartPointer<ITransactionContext> pTransactionContext)
|
|
@@ -1283,6 +1297,241 @@ pair<string, string> CAccessAuthEntity::EncryptedByPubKey(CSimpleStringA pubKey,
|
|
|
return make_pair(pBlock, strRam);
|
|
|
}
|
|
|
|
|
|
+void CAccessAuthEntity::GetHardWareInfo()
|
|
|
+{
|
|
|
+ std::map<std::string, std::string> errInfo;
|
|
|
+
|
|
|
+ //oilyang@20231008 to get system info from runcfg first
|
|
|
+ //no matter calculating from runcfg succeed or not,we also get system info from system api for update runcfg
|
|
|
+ bool bGetFromRunCfg = false;
|
|
|
+ CSimpleString csInfo, strErrMsg, strRet;
|
|
|
+ CSmartPointer<IConfigInfo> pConfigRun;
|
|
|
+ ErrorCodeEnum eErr = GetFunction()->OpenConfig(Config_Run, pConfigRun);
|
|
|
+ if (eErr == Error_Succeed && pConfigRun->ReadConfigValue("system", "info", csInfo) == Error_Succeed && !csInfo.IsNullOrEmpty()) {
|
|
|
+ DbgWithLink(LOG_LEVEL_INFO, LOG_TYPE_SYSTEM)("read device info from runcfg: [%s]", csInfo.GetData());
|
|
|
+ CAutoArray<CSimpleStringA> sysInfo = csInfo.Split('|');
|
|
|
+ if (sysInfo.GetCount() == 3)
|
|
|
+ {
|
|
|
+ m_cpuId = sysInfo[0];
|
|
|
+ m_mainBoardId = sysInfo[1];
|
|
|
+ m_hardDiskId = sysInfo[2];
|
|
|
+ bGetFromRunCfg = true;
|
|
|
+ m_iGetTermSysInfo = 1;
|
|
|
+ }
|
|
|
+ else
|
|
|
+ {
|
|
|
+ m_iGetTermSysInfo = -1;
|
|
|
+ DbgWithLink(LOG_LEVEL_WARN, LOG_TYPE_SYSTEM).setAPI("GetTerminalFingerPrint")("get sm3 hash as fingerprint fail");
|
|
|
+ }
|
|
|
+ }
|
|
|
+ else
|
|
|
+ DbgWithLink(LOG_LEVEL_WARN, LOG_TYPE_SYSTEM)("GetTermSysInfo, OpenConfig Config_Run error=%d.", eErr);
|
|
|
+
|
|
|
+#ifdef RVC_OS_LINUX
|
|
|
+ char szTmp[1024] = {};
|
|
|
+ string strTmp;
|
|
|
+ int nTmpBufLen = 1024;
|
|
|
+
|
|
|
+ CSimpleStringA runInfoPath;
|
|
|
+ auto rc = GetFunction()->GetPath("runinfo", runInfoPath);
|
|
|
+ if (rc != Error_Succeed) {
|
|
|
+ DbgWithLink(LOG_LEVEL_INFO, LOG_TYPE_SYSTEM)("GetPath runinfo error=%d.", rc);
|
|
|
+ return;
|
|
|
+ }
|
|
|
+ runInfoPath += SPLIT_SLASH_STR "runcfg";
|
|
|
+
|
|
|
+ //CPU
|
|
|
+ if (!get_cpu_id_by_system(strTmp, runInfoPath.GetData()))
|
|
|
+ {
|
|
|
+ if (!bGetFromRunCfg)
|
|
|
+ {
|
|
|
+ errInfo["errcode"] = "RTA5213";
|
|
|
+ errInfo["msg"] = "调用系统api获取CPU序号失败";
|
|
|
+ errInfo["getLastErr"] = GetLastError();
|
|
|
+ m_cpuId = generateJsonStr(errInfo).second.c_str();
|
|
|
+
|
|
|
+ m_iGetTermSysInfo = -1;
|
|
|
+ }
|
|
|
+
|
|
|
+ strErrMsg = CSimpleStringA::Format("查询CPU ID失败,请重启机器并重新初始化");
|
|
|
+ SetAuthErrMsg((const char*)strErrMsg);
|
|
|
+
|
|
|
+ LogWarn(Severity_Middle, Error_Unexpect, ERR_ACCESSAUTH_GET_TERMINAL_FINGERPRINT,
|
|
|
+ GetOutPutStr("%s%s%s%d", "QueryWMIDevice", "False", "Processor", GetLastError()).c_str());
|
|
|
+ DbgWithLink(LOG_LEVEL_WARN, LOG_TYPE_SYSTEM).setResultCode("RTA5213")
|
|
|
+ (GetOutPutStr("%s%s", "Processor", "False").c_str());
|
|
|
+ return;
|
|
|
+ }
|
|
|
+ m_cpuId = strTmp.c_str();
|
|
|
+ strRet = strTmp.c_str();
|
|
|
+ strTmp.clear();
|
|
|
+
|
|
|
+ //主板
|
|
|
+ if (!get_board_serial_by_system(strTmp, runInfoPath.GetData()))
|
|
|
+ {
|
|
|
+ if (!bGetFromRunCfg)
|
|
|
+ {
|
|
|
+ errInfo["errcode"] = "RTA5214";
|
|
|
+ errInfo["msg"] = "调用系统api获取主板ID号失败";
|
|
|
+ errInfo["getLastErr"] = GetLastError();
|
|
|
+ m_mainBoardId = generateJsonStr(errInfo).second.c_str();
|
|
|
+
|
|
|
+ m_iGetTermSysInfo = -1;
|
|
|
+ }
|
|
|
+ strErrMsg = CSimpleStringA::Format("查询主板序列号失败, 请重启机器并重新初始化");
|
|
|
+ SetAuthErrMsg((const char*)strErrMsg);
|
|
|
+
|
|
|
+ LogWarn(Severity_Middle, Error_Unexpect, ERR_ACCESSAUTH_GET_TERMINAL_FINGERPRINT,
|
|
|
+ GetOutPutStr("%s%s%s%d", "QueryWMIDevice", "False", "BaseBoard", GetLastError()).c_str());
|
|
|
+ DbgWithLink(LOG_LEVEL_WARN, LOG_TYPE_SYSTEM).setResultCode("RTA5214")
|
|
|
+ (GetOutPutStr("%s%s", "BaseBoard", "False").c_str());
|
|
|
+ return;
|
|
|
+ }
|
|
|
+ m_mainBoardId = strTmp.c_str();
|
|
|
+ strRet += "|";
|
|
|
+ strRet += strTmp.c_str();
|
|
|
+
|
|
|
+ //硬盘
|
|
|
+ vector<string> diskArr;
|
|
|
+ int errCode = 0;
|
|
|
+ if (!get_disk_serial_by_system(diskArr, errCode, runInfoPath.GetData()))
|
|
|
+ {
|
|
|
+ if (!bGetFromRunCfg)
|
|
|
+ {
|
|
|
+ errInfo["errcode"] = "RTA5215";
|
|
|
+ errInfo["msg"] = "调用系统api获取硬盘ID号失败";
|
|
|
+ errInfo["getLastErr"] = GetLastError();
|
|
|
+ m_hardDiskId = generateJsonStr(errInfo).second.c_str();
|
|
|
+
|
|
|
+ m_iGetTermSysInfo = -1;
|
|
|
+ }
|
|
|
+ DbgWithLink(LOG_LEVEL_INFO, LOG_TYPE_SYSTEM)("get_disk_serial_by_system errCode:%d", errCode);
|
|
|
+ strErrMsg = CSimpleStringA::Format("查询磁盘序列号失败, 请重启机器并重新初始化");
|
|
|
+ SetAuthErrMsg((const char*)strErrMsg);
|
|
|
+
|
|
|
+ LogWarn(Severity_Middle, Error_Unexpect, ERR_ACCESSAUTH_GET_TERMINAL_FINGERPRINT,
|
|
|
+ GetOutPutStr("%s%s%s%d", "QueryWMIDevice", "False", "BaseBoard", GetLastError()).c_str());
|
|
|
+ DbgWithLink(LOG_LEVEL_WARN, LOG_TYPE_SYSTEM).setResultCode("RTA5215")
|
|
|
+ (GetOutPutStr("%s%s", "DiskDrive", "False").c_str());
|
|
|
+ return;
|
|
|
+ }
|
|
|
+ strRet += "|";
|
|
|
+ strTmp = "";
|
|
|
+ vector<string>::iterator it = diskArr.begin();
|
|
|
+ while (it != diskArr.end()) {
|
|
|
+ strTmp += *it;
|
|
|
+ it++;
|
|
|
+ }
|
|
|
+ strRet += strTmp.c_str();
|
|
|
+ m_hardDiskId = strTmp.c_str();
|
|
|
+#else
|
|
|
+ ULONGLONG ullStart = GetTickCount64();
|
|
|
+ char szTmp[1024] = {};
|
|
|
+ int nTmpBufLen = 1024;
|
|
|
+ if (!QueryWMIDevice(Processor, "ProcessorId", szTmp, &nTmpBufLen))
|
|
|
+ {
|
|
|
+ if (!bGetFromRunCfg)
|
|
|
+ {
|
|
|
+ errInfo["errcode"] = "RTA5213";
|
|
|
+ errInfo["msg"] = "调用系统api获取CPU序号失败";
|
|
|
+ errInfo["getLastErr"] = GetLastError();
|
|
|
+ m_cpuId = generateJsonStr(errInfo).second.c_str();
|
|
|
+
|
|
|
+ m_iGetTermSysInfo = -1;
|
|
|
+ }
|
|
|
+ strErrMsg = CSimpleStringA::Format("查询 cpu id 失败: %d, 请尝试重启应用", GetLastError());
|
|
|
+ SetAuthErrMsg((const char*)strErrMsg);
|
|
|
+
|
|
|
+ LogWarn(Severity_Middle, Error_Unexpect, ERR_ACCESSAUTH_GET_TERMINAL_FINGERPRINT,
|
|
|
+ GetOutPutStr("%s%s%s%d", "QueryWMIDevice", "False", "Processor", GetLastError()).c_str());
|
|
|
+
|
|
|
+ DbgWithLink(LOG_LEVEL_WARN, LOG_TYPE_SYSTEM).setResultCode("RTA5213")
|
|
|
+ (GetOutPutStr("%s%s%s%d", "QueryWMIDevice", "False", "Processor", GetLastError()).c_str());
|
|
|
+
|
|
|
+ return;
|
|
|
+ }
|
|
|
+ strRet = szTmp;
|
|
|
+ m_cpuId = szTmp;
|
|
|
+
|
|
|
+ nTmpBufLen = 1024;
|
|
|
+ memset(szTmp, 0, sizeof(szTmp));
|
|
|
+ if (!QueryWMIDevice(BaseBoard, "SerialNumber", szTmp, &nTmpBufLen))
|
|
|
+ {
|
|
|
+ if (!bGetFromRunCfg)
|
|
|
+ {
|
|
|
+ errInfo["errcode"] = "RTA5214";
|
|
|
+ errInfo["msg"] = "调用系统api获取主板ID号失败";
|
|
|
+ errInfo["getLastErr"] = GetLastError();
|
|
|
+ m_mainBoardId = generateJsonStr(errInfo).second.c_str();
|
|
|
+
|
|
|
+ m_iGetTermSysInfo = -1;
|
|
|
+ }
|
|
|
+ strErrMsg = CSimpleStringA::Format("查询 baseboard sn 失败: %d, 请尝试重启应用", GetLastError());
|
|
|
+ SetAuthErrMsg((const char*)strErrMsg);
|
|
|
+
|
|
|
+ LogWarn(Severity_Middle, Error_Unexpect, ERR_ACCESSAUTH_GET_TERMINAL_FINGERPRINT,
|
|
|
+ GetOutPutStr("%s%s%s%d", "QueryWMIDevice", "False", "BaseBoard", GetLastError()).c_str());
|
|
|
+ DbgWithLink(LOG_LEVEL_WARN, LOG_TYPE_SYSTEM).setResultCode("RTA5214")
|
|
|
+ (GetOutPutStr("%s%s%s%d", "QueryWMIDevice", "False", "BaseBoard", GetLastError()).c_str());
|
|
|
+
|
|
|
+ return;
|
|
|
+ }
|
|
|
+
|
|
|
+ strRet += "|";
|
|
|
+ strRet += szTmp;
|
|
|
+ m_mainBoardId = szTmp;
|
|
|
+
|
|
|
+ nTmpBufLen = 1024;
|
|
|
+ memset(szTmp, 0, sizeof(szTmp));
|
|
|
+ if (!QueryWMIDevice(DiskDrive, "SerialNumber", szTmp, &nTmpBufLen))
|
|
|
+ {
|
|
|
+ if (!bGetFromRunCfg)
|
|
|
+ {
|
|
|
+ errInfo["errcode"] = "RTA5215";
|
|
|
+ errInfo["msg"] = "调用系统api获取硬盘ID号失败";
|
|
|
+ errInfo["getLastErr"] = GetLastError();
|
|
|
+ m_hardDiskId = generateJsonStr(errInfo).second.c_str();
|
|
|
+
|
|
|
+ m_iGetTermSysInfo = -1;
|
|
|
+ }
|
|
|
+ strErrMsg = CSimpleStringA::Format("查询 harddisk sn 失败: %d, 请尝试重启应用", GetLastError());
|
|
|
+ SetAuthErrMsg((const char*)strErrMsg);
|
|
|
+
|
|
|
+ LogWarn(Severity_Middle, Error_Unexpect, ERR_ACCESSAUTH_GET_TERMINAL_FINGERPRINT,
|
|
|
+ GetOutPutStr("%s%s%s%d", "QueryWMIDevice", "False", "DiskDrive", GetLastError()).c_str());
|
|
|
+ DbgWithLink(LOG_LEVEL_WARN, LOG_TYPE_SYSTEM).setResultCode("RTA5215")
|
|
|
+ (GetOutPutStr("%s%s", "DiskDrive", "False").c_str());
|
|
|
+
|
|
|
+ return;
|
|
|
+ }
|
|
|
+
|
|
|
+ strRet += "|";
|
|
|
+ strRet += szTmp;
|
|
|
+ m_hardDiskId = szTmp;
|
|
|
+
|
|
|
+ ULONGLONG ullEnd = GetTickCount64();
|
|
|
+ if (ullEnd - ullStart > 5000)
|
|
|
+ {
|
|
|
+ DbgWithLink(LOG_LEVEL_WARN, LOG_TYPE_SYSTEM).setResultCode("RTA5201")
|
|
|
+ ("获取系统信息耗时过长:%d秒", (ullEnd - ullStart) / 1000);
|
|
|
+ LogWarn(Severity_Middle, Error_Unexpect, AccessAuthorization_UserErrorCode_GetTermCostTooLong,
|
|
|
+ CSimpleStringA::Format("获取系统信息耗时过长:%d秒", (ullEnd - ullStart) / 1000));
|
|
|
+ }
|
|
|
+#endif // RVC_OS_LINUX
|
|
|
+
|
|
|
+ if (!bGetFromRunCfg || csInfo.Compare(strRet) != 0)
|
|
|
+ {
|
|
|
+ eErr = pConfigRun->WriteConfigValue("system", "info", strRet.GetData());
|
|
|
+ DbgWithLink(LOG_LEVEL_WARN, LOG_TYPE_SYSTEM)("device info changed,before[%s],current[%s],write to runcfg:%d"
|
|
|
+ , csInfo.GetData(), strRet.GetData(), eErr);
|
|
|
+ }
|
|
|
+ else
|
|
|
+ DbgWithLink(LOG_LEVEL_INFO, LOG_TYPE_SYSTEM)("device info: [%s]", strRet.GetData());
|
|
|
+
|
|
|
+ return;
|
|
|
+
|
|
|
+}
|
|
|
+
|
|
|
SP_BEGIN_ENTITY_MAP()
|
|
|
SP_ENTITY(CAccessAuthEntity)
|
|
|
SP_END_ENTITY_MAP()
|