Browse Source

#IQRV #comment Windows主板信息上送

80374374 11 months ago
parent
commit
5eab31bc7c

+ 110 - 5
Module/mod_ResourceWatcher/ResourceWatcherFSM.cpp

@@ -44,6 +44,7 @@
 #include <psapi.h>  
 #include <tlhelp32.h>
 #include <WtsApi32.h>
+#include <sysinfoapi.h>
 #pragma comment(lib, "WtsApi32.lib")
 #include "Mmdeviceapi.h"
 #include "Propidl.h"
@@ -111,6 +112,25 @@ const char* STRATUP_FILENAME_FROM_SCRIPTS = "spexplorerauto.lnk";
 
 
 #if defined(RVC_OS_WIN)
+//https://blog.csdn.net/aflyeaglenku/article/details/51742820
+typedef struct _dmi_header
+{
+	BYTE type;
+	BYTE length;
+	WORD handle;
+}dmi_header;
+
+typedef struct _RawSMBIOSData
+{
+
+	BYTE    Used20CallingMethod;
+	BYTE    SMBIOSMajorVersion;
+	BYTE    SMBIOSMinorVersion;
+	BYTE    DmiRevision;
+	DWORD   Length;
+	BYTE    SMBIOSTableData[];
+}RawSMBIOSData;
+
 void ResourceWatcherFSM::GetAutoStartFile(std::string& userDirPath, std::vector<std::string>& userDirFiles, std::string& pubDirPath, std::vector<std::string>& pubDirFiles)
 {
 	CSimpleStringA startMenuPublicPath(STARTUP_DIR_FULL_PATH);
@@ -365,8 +385,8 @@ void ResourceWatcherFSM::TriggerAtStatusChanged(bool bMStatus)
         AutoDeleteFilesTask* autoDeleteTask = new AutoDeleteFilesTask(this);
         GetEntityBase()->GetFunction()->PostThreadPoolTask(autoDeleteTask);
 
-#if defined(RVC_OS_LINUX)
         if (m_bFirstRunAfterBoot) {
+#if defined(RVC_OS_LINUX)
             UINT sysVer = 0;
             UploadSysVersionInfo(sysVer);
             ConfirmWindowEffectHasBeenOpen();
@@ -381,8 +401,11 @@ void ResourceWatcherFSM::TriggerAtStatusChanged(bool bMStatus)
             GetEntityBase()->GetFunction()->PostThreadPoolTask(new DetectSoftwareInstallStatusTask(this));
             GetEntityBase()->GetFunction()->PostThreadPoolTask(new UploadMonitorInfoTask(this));
             AlarmSystemBasicInfo();
-        }
+#else
+			AlarmSystemBasicInfo();
 #endif //RVC_OS_LINUX
+        }
+
     }
 }
 
@@ -402,7 +425,6 @@ ErrorCodeEnum ResourceWatcherFSM::OnInit()
     if (m_bFirstRunAfterBoot) {
         DbgWithLink(LOG_LEVEL_INFO, LOG_TYPE_SYSTEM)("First time to run after system boot.");
     }
-
 #if defined(RVC_OS_WIN)
     if (m_bFirstRunAfterBoot) {
 		//GetSystemMetrics (SM_CMONITORS) 计数仅显示可见的显示器
@@ -4224,6 +4246,36 @@ bool ResourceWatcherFSM::IsStartupIconExist(CSimpleStringA& strPath)
 	return false;
 }
 
+const char* dmi_string(const dmi_header* dm, BYTE s)
+{
+
+	char* bp = (char*)dm;
+	size_t i, len;
+
+	if (s == 0)
+		return "Not Specified";
+
+	bp += dm->length;
+	while (s > 1 && *bp)
+	{
+
+		bp += strlen(bp);
+		bp++;
+		s--;
+	}
+
+	if (!*bp)
+		return "BAD_INDEX";
+
+	/* ASCII filtering */
+	len = strlen(bp);
+	for (i = 0; i < len; i++)
+		if (bp[i] < 32 || bp[i] == 127)
+			bp[i] = '.';
+
+	return bp;
+}
+
 #endif // _MSC_VER end硬件资源监控相关系统功能 CPU、内存、硬盘、网络wifi
 
 #ifdef RVC_OS_LINUX
@@ -4292,8 +4344,61 @@ void ResourceWatcherFSM::CheckDiskFileSpace()
 ErrorCodeEnum ResourceWatcherFSM::CatchSystemBasicInfo(SystemBasicInfo& info)
 {
 #if defined(RVC_OS_WIN)
-    ///**TODO(Gifur@10/10/2023): 待实现 */
-    return Error_NotImpl;
+    //通过输入 ‘Get-CimInstance -ClassName Win32_ComputerSystemProduct’ 指令获取)
+	int ret = 0;
+	RawSMBIOSData* Smbios;
+	dmi_header* h = NULL;
+	int flag = 1;
+
+	ret = GetSystemFirmwareTable('RSMB', 0, 0, 0);
+	if (!ret)
+	{
+
+		DbgWithLink(LOG_LEVEL_WARN, LOG_TYPE_SYSTEM)("Function failed!");
+		return Error_Unexpect;
+	}
+
+	DWORD bufsize = ret;
+	char* buf = new char[bufsize];
+	memset(buf, 0, bufsize);
+
+	ret = GetSystemFirmwareTable('RSMB', 0, buf, bufsize);
+	if (!ret)
+	{
+
+        DbgWithLink(LOG_LEVEL_WARN, LOG_TYPE_SYSTEM)("Function failed!");
+		delete[]buf;
+		return Error_Unexpect;
+	}
+
+	Smbios = (RawSMBIOSData*)buf;
+
+	BYTE* p = Smbios->SMBIOSTableData;
+
+	if (Smbios->Length != bufsize - 8)
+	{
+
+        DbgWithLink(LOG_LEVEL_WARN, LOG_TYPE_SYSTEM)("Smbios length error");
+		delete[]buf;
+		return Error_Unexpect;
+	}
+
+	for (int i = 0; i < Smbios->Length; i++) {
+		h = (dmi_header*)p;
+
+		if (h->type == 1)
+		{
+            info.strManufacturer = dmi_string(h, p[0x4]);
+			info.strProductName = dmi_string(h, p[0x5]);
+			info.strSerialNumber = dmi_string(h, p[0x7]);
+			break;
+		}
+		p += h->length;
+		while ((*(WORD*)p) != 0) p++;
+		p += 2;
+	}
+	delete[]buf;
+    return Error_Succeed;
 #else
     CSimpleStringA runCfgPath;
     ErrorCodeEnum errCode = GetEntityBase()->GetFunction()->GetPath("RunCfg", runCfgPath);

+ 1 - 104
Module/mod_healthmanager/HealthManagerFSM.cpp

@@ -48,18 +48,6 @@ enum EntityOP
 	OP_CONTINUE_ENTITY,
 };
 
-bool StrEqualNoCase(const char *s1, const char *s2,int len)
-{
-	if (strlen(s1) != strlen(s2))
-		return false;
-	for (int i = 0; i < len; ++i)
-	{
-		if (toupper(s1[i]) != toupper(s2[i]))
-			return false;
-	}
-	return true;
-}
-
 ErrorCodeEnum CHealthManagerFSM::Initial()
 {
 #if defined(RVC_OS_WIN)
@@ -753,97 +741,6 @@ CSimpleStringA CHealthManagerFSM::GetOsVersion()
 #endif
 }
 
-#if defined(RVC_OS_WIN)
-const char* dmi_string(const dmi_header* dm, BYTE s)
-{
-
-	char* bp = (char*)dm;
-	size_t i, len;
-
-	if (s == 0)
-		return "Not Specified";
-
-	bp += dm->length;
-	while (s > 1 && *bp)
-	{
-
-		bp += strlen(bp);
-		bp++;
-		s--;
-	}
-
-	if (!*bp)
-		return "BAD_INDEX";
-
-	/* ASCII filtering */
-	len = strlen(bp);
-	for (i = 0; i < len; i++)
-		if (bp[i] < 32 || bp[i] == 127)
-			bp[i] = '.';
-
-	return bp;
-}
-
-void CHealthManagerFSM::QueryComputerInfo()
-{
-	int ret = 0;
-	RawSMBIOSData* Smbios;
-	dmi_header* h = NULL;
-	int flag = 1;
-
-	ret = GetSystemFirmwareTable('RSMB', 0, 0, 0);
-	if (!ret)
-	{
-
-		Dbg("Function failed!");
-		return;
-	}
-
-	DWORD bufsize = ret;
-	char* buf = new char[bufsize];
-	memset(buf, 0, bufsize);
-
-	ret = GetSystemFirmwareTable('RSMB', 0, buf, bufsize);
-	if (!ret)
-	{
-
-		Dbg("Function failed!");
-		delete[]buf;
-		return;
-	}
-
-	Smbios = (RawSMBIOSData*)buf;
-
-	BYTE* p = Smbios->SMBIOSTableData;
-
-	if (Smbios->Length != bufsize - 8)
-	{
-
-		Dbg("Smbios length error");
-		delete[]buf;
-		return;
-	}
-
-	for (int i = 0; i < Smbios->Length; i++) {
-		h = (dmi_header*)p;
-
-		if (h->type == 1)
-		{
-			m_computerInfo["Manufacturer"] = dmi_string(h, p[0x4]);
-			m_computerInfo["ComputerName"] = dmi_string(h, p[0x5]);
-			m_computerInfo["ComputerVersion"] = dmi_string(h, p[0x6]);
-			m_computerInfo["SerialNumber"] = dmi_string(h, p[0x7]);
-
-			break;
-		}
-		p += h->length;
-		while ((*(WORD*)p) != 0) p++;
-		p += 2;
-	}
-	delete[]buf;
-}
-#endif //RVC_OS_WIN
-
 DWORD GetDualTime(SYSTEMTIME& t1, SYSTEMTIME& t2)
 {
 	//assume t2 > t1...
@@ -1165,7 +1062,7 @@ void CHealthManagerFSM::QueryHardwareInfo(SpReqAnsContext<HealthManagerService_Q
 #if defined(RVC_OS_WIN)
 	//oiltmp 备注reserved3、reserved4这是什么情况下用的?看得莫名其妙,在一个常用调用接口里面每次都取,这是不怕亚信?
 	//reserved3, 获取windows系统版本
-	DWORD dwMajorVer, dwMinorVer, dwBuildNumber;
+	DWORD dwMajorVer(0), dwMinorVer(0), dwBuildNumber(0);
 	BOOL bRet = FALSE;
 	HMODULE hModNtdll = NULL;
 	if (hModNtdll = ::LoadLibraryW(L"ntdll.dll"))

+ 0 - 18
Module/mod_healthmanager/HealthManagerFSM.h

@@ -104,23 +104,6 @@ struct callback_entry : public IReleasable
 	ErrorCodeEnum ErrorResult;
 };
 
-typedef struct _dmi_header
-{
-	BYTE type;
-	BYTE length;
-	WORD handle;
-}dmi_header;
-
-typedef struct _RawSMBIOSData
-{
-
-	BYTE    Used20CallingMethod;
-	BYTE    SMBIOSMajorVersion;
-	BYTE    SMBIOSMinorVersion;
-	BYTE    DmiRevision;
-	DWORD   Length;
-	BYTE    SMBIOSTableData[];
-}RawSMBIOSData;
 extern unsigned long long GetTickCountRVC();
 
 class	CHealthManagerEntity;
@@ -235,7 +218,6 @@ private:
 	virtual void OnAnswer(CSmartPointer<IAsynWaitSp> pAsynWaitSp);
 	void SaveOsVersion();
 	CSimpleStringA GetOsVersion();
-	void QueryComputerInfo();
 	int sumday(int year,int month,int day);//¼ÆËãÌìÊý
 	bool CheckProcessExistByName(CSimpleStringA procName);
 	void QueryAndSaveDNS();