代码拉取完成,页面将自动刷新
#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或win10
DWORD 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";
else
vname = "Microsoft Windows Server 2008"; //服务器版本
break;
case 1:
if (os.wProductType == VER_NT_WORKSTATION)
vname = "Microsoft Windows 7";
else
vname = "Microsoft Windows Server 2008 R2";
break;
case 2:
if (os.wProductType == VER_NT_WORKSTATION)
vname = "Microsoft Windows 8";
else
vname = "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);
}
//ISO
GEOID 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);
}
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。