//获取系统版本号
//10.0.19041.1788
#define SystemVersionUrb "SOFTWARE\\Microsoft\\Windows NT\\CurrentVersion"
typedef ULONG(__stdcall* fRtlGetVersion)(PRTL_OSVERSIONINFOW lpVersionInfo);
VOID SetSystemVersionInfo(char* SystemVersionInfo)
{
char tmp[0x10] = { 0 };
ULONG ret = 0;
ULONG UrbType = 0;
ULONG UrbData = 0;
LONG UrbDataSize = sizeof(REG_DWORD);
HKEY hSubKey;
fRtlGetVersion pRtlGetVersion = NULL;
HMODULE hNtdll;
RTL_OSVERSIONINFOW VersionInfo = { 0 };
hNtdll = GetModuleHandleA("ntdll.dll");
if (hNtdll)
{
pRtlGetVersion = (fRtlGetVersion)GetProcAddress(hNtdll, "RtlGetVersion");
if (pRtlGetVersion)
{
VersionInfo.dwOSVersionInfoSize = sizeof(RTL_OSVERSIONINFOW);
if (0 == pRtlGetVersion(&VersionInfo))
{
ret = RegOpenKeyA(HKEY_LOCAL_MACHINE,
SystemVersionUrb,
&hSubKey);
if (hSubKey)
{
//RegQueryValueA 在64位系统上,失效
ret = RegQueryValueExA(hSubKey,
"UBR",
NULL,
&UrbType,
(LPBYTE)&UrbData,
(LPDWORD)&UrbDataSize);
if (ret != ERROR_SUCCESS)
{
LogInfo("RegQueryValueA falis,error:%d\n", GetLastError());
}
#ifdef _DEBUG_
//
itoa(VersionInfo.dwMajorVersion, tmp, 10);
strcpy_s(SystemVersionInfo, MAX_PATH, tmp);
strcat_s(SystemVersionInfo, MAX_PATH, ".");
//
memset(tmp, 0, 0x10);
itoa(VersionInfo.dwMinorVersion, tmp, 10);
strcat_s(SystemVersionInfo, MAX_PATH, tmp);
strcat_s(SystemVersionInfo, MAX_PATH, ".");
//
memset(tmp, 0, 0x10);
itoa(VersionInfo.dwBuildNumber, tmp, 10);
strcat_s(SystemVersionInfo, MAX_PATH, tmp);
strcat_s(SystemVersionInfo, MAX_PATH, ".");
//
memset(tmp, 0, 0x10);
itoa(UrbData, tmp, 10);
strcat_s(SystemVersionInfo, MAX_PATH, tmp);
#endif
}
}
}
}
}
//获取本机ip
VOID SetLocalIp(char* LocalIp)
{
WSADATA WSAData;
PHOSTENT host;
char* tmp = NULL;
char hostname[MAX_PATH] = { 0 };
if (!WSAStartup(MAKEWORD(2, 0), &WSAData))
{
if (!gethostname(hostname, sizeof(hostname)))
{
host = (PHOSTENT)gethostbyname(hostname);
if (host)
{
tmp = inet_ntoa(*(struct in_addr*)*host->h_addr_list);
if (tmp)
{
strcpy(LocalIp, tmp);
}
}
}
}
}
//获取系统当前时间
VOID SetSystemCurrentTime(char* SystemCurrentTime)
{
int num1 = 1000;
int num2 = 1900;
time_t nowTime;
time(&nowTime);
struct tm* timeInfo;
timeInfo = localtime(&nowTime);
sprintf(SystemCurrentTime, "%d/%d/%d %02d:%02d:%02d", timeInfo->tm_year + num2,
timeInfo->tm_mon + 1, timeInfo->tm_mday, timeInfo->tm_hour,
timeInfo->tm_min, timeInfo->tm_sec);
}
//获取系统启动时间
VOID SetSystemStartTime(char* SystemStartTime)
{
ULONGLONG iRunTime = GetTickCount64();
int num1 = 1000;
int num2 = 1900;
time_t nowTime;
time(&nowTime);
time_t SystemUpTime = nowTime - (iRunTime / num1);
struct tm* timeInfo;
timeInfo = localtime(&SystemUpTime);
sprintf(SystemStartTime, "%d/%d/%d %02d:%02d:%02d", timeInfo->tm_year + num2,
timeInfo->tm_mon + 1, timeInfo->tm_mday, timeInfo->tm_hour,
timeInfo->tm_min, timeInfo->tm_sec);
}
//获取本机mac
VOID SetLocalMac(char* LocalMac)
{
PIP_ADAPTER_INFO ipAdapterInfo = NULL;
DWORD dwRetval = 0;
ULONG ulOutBuffer = sizeof(IP_ADAPTER_INFO);
ipAdapterInfo = (PIP_ADAPTER_INFO)malloc(sizeof(IP_ADAPTER_INFO));
dwRetval = GetAdaptersInfo(ipAdapterInfo, &ulOutBuffer);
if (dwRetval == ERROR_BUFFER_OVERFLOW)
{
free(ipAdapterInfo);
ipAdapterInfo = (PIP_ADAPTER_INFO)malloc(ulOutBuffer);
dwRetval = GetAdaptersInfo(ipAdapterInfo, &ulOutBuffer);
}
if (dwRetval == NO_ERROR)
{
sprintf(LocalMac, "%02X-%02X-%02X-%02X-%02X-%02X",
ipAdapterInfo->Address[0],
ipAdapterInfo->Address[1],
ipAdapterInfo->Address[2],
ipAdapterInfo->Address[3],
ipAdapterInfo->Address[4],
ipAdapterInfo->Address[5]);
}
if (ipAdapterInfo)
{
free(ipAdapterInfo);
}
}
//通过ip获取对应的mac
VOID GetMacByIp(char* ip, char* mac)
{
{
ULONG uSize = 0;
PMIB_IPNETTABLE pIpNetTable = nullptr;
DWORD dwRet = GetIpNetTable(pIpNetTable, &uSize, false);
if (dwRet == ERROR_INSUFFICIENT_BUFFER)
{
pIpNetTable = (PMIB_IPNETTABLE)malloc(uSize);
if (NO_ERROR == GetIpNetTable(pIpNetTable, &uSize, false))
{
PMIB_IPNETROW pIpNetRow = pIpNetTable->table;
in_addr inaddr;
for (int k = 0; k < pIpNetTable->dwNumEntries; ++k)
{
char szIp[32] = "", szMac[64] = "";
//IP地址
inaddr.S_un.S_addr = pIpNetRow[k].dwAddr;
strcpy(szIp, inet_ntoa(inaddr));
if (0 == strcmp(szIp, ip))
{
//过滤Mac为空的
if (pIpNetRow[k].dwPhysAddrLen <= 0) continue;
UCHAR bPhysAddr[MAXLEN_PHYSADDR] = { 0 };
if (0 == memcmp(pIpNetRow[k].bPhysAddr, bPhysAddr, pIpNetRow[k].dwPhysAddrLen)) continue;
//MAC地址
for (int j = 0; j < pIpNetRow[k].dwPhysAddrLen; j++)
{
if (lstrcmpA(szMac, "") == 0)
sprintf(szMac, "%02x", pIpNetRow[k].bPhysAddr[j]);
else
sprintf(szMac, "%s-%02x", szMac, pIpNetRow[k].bPhysAddr[j]);
}
sprintf(mac, "%s", szMac);
break;
}
}
}
}
}
}
//获取网关mac
VOID SetGatewayMac(char* GatewayMac)
{
PIP_ADAPTER_INFO ipAdapterInfo = NULL;
DWORD dwRetval = 0;
ULONG ulOutBuffer = sizeof(IP_ADAPTER_INFO);
ipAdapterInfo = (PIP_ADAPTER_INFO)malloc(sizeof(IP_ADAPTER_INFO));
dwRetval = GetAdaptersInfo(ipAdapterInfo, &ulOutBuffer);
if (dwRetval == ERROR_BUFFER_OVERFLOW)
{
free(ipAdapterInfo);
ipAdapterInfo = (PIP_ADAPTER_INFO)malloc(ulOutBuffer);
dwRetval = GetAdaptersInfo(ipAdapterInfo, &ulOutBuffer);
}
if (dwRetval == NO_ERROR)
{
//gateway ip
GetMacByIp(ipAdapterInfo->GatewayList.IpAddress.String, GatewayMac);
}
if (ipAdapterInfo)
{
free(ipAdapterInfo);
}
}
获取系统完整版本号/本机ip/系统开机时间/当前时间/本机mac/网关mac
最新推荐文章于 2023-07-04 17:30:32 发布