同步操作将从 精易科技/eapi 强制同步,此操作会覆盖自 Fork 仓库以来所做的任何修改,且无法恢复!!!
确定后同步将在后台操作,完成时将刷新页面,请耐心等待。
#include "..\include_eapi_header.h"#include<Winternl.h>#include<string>#pragma comment(lib,"Ntdll.lib")using namespace std;extern "C" {NTSTATUS WINAPI RtlGetVersion(_Out_ PRTL_OSVERSIONINFOW lpVersionInformation);void WINAPI RtlGetNtVersionNumbers(DWORD* dwMajor, DWORD* dwMinor, DWORD* dwBuildNumber);}static char* GetWin(){const char* vname = "Unknown Windows version";OSVERSIONINFOW WinVersion = {};WinVersion.dwOSVersionInfoSize = sizeof(OSVERSIONINFOW);PRTL_OSVERSIONINFOW lpOSVI = (PRTL_OSVERSIONINFOW)&WinVersion;RtlGetVersion(lpOSVI);if (WinVersion.dwBuildNumber >= 22000){vname = "Microsoft Windows 11";return CloneTextData(vname);}//先判断是否为win8.1或win10DWORD dwMajor, dwMinor, dwBuildNumber;RtlGetNtVersionNumbers(&dwMajor, &dwMinor, &dwBuildNumber);if (dwMajor == 6 && dwMinor == 3) //win 8.1{vname = "Microsoft Windows 8.1";return CloneTextData(vname);}if (dwMajor == 10 && dwMinor == 0) //win 10{vname = "Microsoft Windows 10";return CloneTextData(vname);}//判断win8.1以下的版本SYSTEM_INFO info; //用SYSTEM_INFO结构判断64位AMD处理器GetSystemInfo(&info); //调用GetSystemInfo函数填充结构OSVERSIONINFOEXW os;os.dwOSVersionInfoSize = sizeof(OSVERSIONINFOEXW);BOOL bOsVersionInfoEx;if (!(bOsVersionInfoEx = RtlGetVersion((OSVERSIONINFOW*)&os))){os.dwOSVersionInfoSize = sizeof(OSVERSIONINFOW);RtlGetVersion((OSVERSIONINFOW*)&os);}//下面根据版本信息判断操作系统名称switch (os.dwMajorVersion){ //判断主版本号case 4:switch (os.dwMinorVersion){ //判断次版本号case 0:if (os.dwPlatformId == VER_PLATFORM_WIN32_NT)vname = "Microsoft Windows NT 4.0"; //1996年7月发布else if (os.dwPlatformId == VER_PLATFORM_WIN32_WINDOWS)vname = "Microsoft Windows 95";break;case 10:vname = "Microsoft Windows 98";break;case 90:vname = "Microsoft Windows Me";break;}break;case 5:switch (os.dwMinorVersion){ //再比较dwMinorVersion的值case 0:vname = "Microsoft Windows 2000"; //1999年12月发布break;case 1:vname = "Microsoft Windows XP"; //2001年8月发布break;case 2:if (os.wProductType == VER_NT_WORKSTATION &&info.wProcessorArchitecture == PROCESSOR_ARCHITECTURE_AMD64)vname = "Microsoft Windows XP Professional x64 Edition";else if (GetSystemMetrics(SM_SERVERR2) == 0)vname = "Microsoft Windows Server 2003"; //2003年3月发布else if (GetSystemMetrics(SM_SERVERR2) != 0)vname = "Microsoft Windows Server 2003 R2";break;}break;case 6:switch (os.dwMinorVersion){case 0:if (os.wProductType == VER_NT_WORKSTATION)vname = "Microsoft Windows Vista";elsevname = "Microsoft Windows Server 2008"; //服务器版本break;case 1:if (os.wProductType == VER_NT_WORKSTATION)vname = "Microsoft Windows 7";elsevname = "Microsoft Windows Server 2008 R2";break;case 2:if (os.wProductType == VER_NT_WORKSTATION)vname = "Microsoft Windows 8";elsevname = "Microsoft Windows Server 2012";break;}break;default:vname = "未知操作系统";}return CloneTextData(vname);}typedef struct _ESYSINFO{char* m_WinSys;char* m_Vsion;int m_BuildVsion;char* m_LastPack;char* m_User;char* m_WinDir;char* m_SysDir;//语言代码int m_Code;char* m_LocalLanguage;//非标准国家代码,为电话代码int m_PhoneCode;//官方名称char* m_CountryName;char* m_Money;char* m_DataFormat;char* m_TimeFormat;char* m_TimeZone;char* m_Iso;bool m_IsSysx64;_ESYSINFO() {memset(this, 0, sizeof(*this));}}*PESYSINFO;inline void GetSysInfo(PESYSINFO pSysInfo) {//取系统版本pSysInfo->m_WinSys = GetWin();//系统用户名char currentUser[256]{ 0 };DWORD dwSize_currentUser = 256;GetUserNameA(currentUser, // 接收当前登录用户的用户名&dwSize_currentUser // 缓冲区大小);pSysInfo->m_User = CloneTextData(currentUser);//是否为64位SYSTEM_INFO INFO;GetNativeSystemInfo(&INFO);pSysInfo->m_IsSysx64 = INFO.wProcessorArchitecture == PROCESSOR_ARCHITECTURE_IA64 || INFO.wProcessorArchitecture == PROCESSOR_ARCHITECTURE_AMD64;OSVERSIONINFOEXW osvi;osvi.dwOSVersionInfoSize = sizeof(OSVERSIONINFOEXW);BOOL bOsVersionInfoEx;if (!(bOsVersionInfoEx = RtlGetVersion((OSVERSIONINFOW*)&osvi))){osvi.dwOSVersionInfoSize = sizeof(OSVERSIONINFOW);RtlGetVersion((OSVERSIONINFOW*)&osvi);}//系统版本pSysInfo->m_Vsion = CloneTextData(to_string(osvi.dwMajorVersion + osvi.dwMinorVersion * 0.1f).c_str());//最后服务包pSysInfo->m_LastPack = CloneTextData(to_string(osvi.wServicePackMajor + osvi.wServicePackMinor * 0.1).c_str());//构建版本pSysInfo->m_BuildVsion = osvi.dwBuildNumber;;//windows目录char* str = nullptr;UINT wsize = GetWindowsDirectoryA(NULL, 0);char* wpath = new char[wsize] {0};if (GetWindowsDirectoryA(wpath, wsize) != 0) //函数调用失败将返回0{str = CloneTextData(wpath);}delete[] wpath;pSysInfo->m_WinDir = str;//系统目录char* wstr = nullptr;UINT size = GetSystemDirectoryA(NULL, 0);char* path = new char[size] {0};if (GetSystemDirectoryA(path, size) != 0) //函数调用失败将返回0{wstr = CloneTextData(path);}delete[] path;pSysInfo->m_SysDir = wstr;/*下方全部为本地数据的获取*/LCID localeID = GetSystemDefaultLCID();//国家代码pSysInfo->m_Code = GetOEMCP();//本地语言CHAR Language[260]{ 0 };if (VerLanguageNameA(GetSystemDefaultLangID(), Language, 260) <= 260) {pSysInfo->m_LocalLanguage = CloneTextData(Language);}//ISOGEOID myGEO = GetUserGeoID(GEOCLASS_NATION);int sizeOfBuffer = GetGeoInfoW(myGEO, GEO_ISO2, NULL, 0, 0);WCHAR* buffer = new WCHAR[sizeOfBuffer + 1];memset(buffer, 0, (sizeOfBuffer + 1) * sizeof(wchar_t));int result = GetGeoInfoW(myGEO, GEO_ISO2, buffer, sizeOfBuffer, 0);pSysInfo->m_Iso = clone_text(buffer);delete[]buffer;//货币符号CHAR money[7]{ 0 };GetLocaleInfoA(localeID, LOCALE_SCURRENCY, money, 7);pSysInfo->m_Money = CloneTextData(money);//手机CHAR LCData[7]{ 0 };GetLocaleInfoA(localeID, LOCALE_IDIALINGCODE, LCData, 7);pSysInfo->m_PhoneCode = atoi(LCData);//国家CHAR contury[260]{ 0 };GetLocaleInfoA(localeID, LOCALE_SENGLISHCOUNTRYNAME, contury, 260);pSysInfo->m_CountryName = CloneTextData(contury);//时区TIME_ZONE_INFORMATION m_timezone;GetTimeZoneInformation(&m_timezone);pSysInfo->m_TimeZone = clone_text(m_timezone.StandardName);//日期格式CHAR DataFormat[100]{ 0 };GetLocaleInfoA(localeID, LOCALE_SLONGDATE, DataFormat, 100);pSysInfo->m_DataFormat = CloneTextData(DataFormat);//时间格式CHAR TimeFormat[100]{ 0 };GetLocaleInfoA(localeID, LOCALE_STIMEFORMAT, TimeFormat, 100);pSysInfo->m_TimeFormat = CloneTextData(TimeFormat);}// 调用格式: _SDT_NULL 取系统信息, 命令说明: "取系统信息。"// 参数<1>: &系统信息 MAKELONG(0x04, 0), 参数说明: "待取得的系统信息。"EAPI_EXTERN_C void eapi_GetSystemInfo_14_eapi(PMDATA_INF pRetData, INT nArgCount, PMDATA_INF pArgInf){PESYSINFO pHDInfo = *reinterpret_cast<PESYSINFO*>(pArgInf[0].m_pCompoundData);GetSysInfo(pHDInfo);}
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。