void dectectOS() //TODO:Fix this as it doesn't know how to check version { char *osVersion; //if(IsWindows10OrGreater()) osVersion = "Windows 10"; if(IsWindows8Point1OrGreater()) osVersion = "Windows 8.1"; else if(IsWindows8OrGreater()) osVersion = "Windows 8"; else if(IsWindows7SP1OrGreater()) osVersion = "Windows 7 Service Pack 1"; else if(IsWindowsVistaSP2OrGreater()) osVersion = "Windows Vista Service Pack 2"; else if(IsWindowsVistaSP1OrGreater()) osVersion = "Windows Vista Service Pack 1"; else if(IsWindowsVistaOrGreater()) osVersion = "Windows Vista"; else if(IsWindowsXPSP3OrGreater()) osVersion = "Windows XP Service Pack 3"; else if(IsWindowsXPSP2OrGreater()) osVersion = "Windows XP Service Pack 2"; else if(IsWindowsXPSP1OrGreater()) osVersion = "Windows XP Service Pack 1"; else if(IsWindowsXPOrGreater()) osVersion = "Windows XP"; else if(IsWindowsServer()) osVersion = "Windows Server"; printf("\nOS Version : %s", osVersion); }
version get_version() { #if (_MSC_VER >= oVS2015_VER) bool is_server = IsWindowsServer(); //if (IsWindows10OrGreater()) return is_server ? windows::version::win10 : windows::version::win10; if (IsWindows8Point1OrGreater()) return is_server ? windows::version::server_2012_sp1 : windows::version::win8_1; if (IsWindows8OrGreater()) return is_server ? windows::version::server_2012 : windows::version::win8; if (IsWindows7SP1OrGreater()) return is_server ? windows::version::server_2008r2_sp1 : windows::version::win7_sp1; if (IsWindows7OrGreater()) return is_server ? windows::version::server_2008r2 : windows::version::win7; if (IsWindowsVistaSP2OrGreater()) return is_server ? windows::version::server_2008_sp2 : windows::version::vista_sp2; if (IsWindowsVistaSP1OrGreater()) return is_server ? windows::version::server_2008_sp1 : windows::version::vista_sp1; if (IsWindowsVistaOrGreater()) return is_server ? windows::version::server_2008 : windows::version::vista; if (IsWindowsXPSP3OrGreater()) return is_server ? windows::version::xp : windows::version::xp; if (IsWindowsXPSP2OrGreater()) return is_server ? windows::version::xp_sp1 : windows::version::xp_sp1; if (IsWindowsXPSP1OrGreater()) return is_server ? windows::version::xp_sp2 : windows::version::xp_sp2; if (IsWindowsXPOrGreater()) return is_server ? windows::version::xp_sp3 : windows::version::xp_sp3; if (IsWindowsVersionOrGreater(5, 2, 0)) return is_server ? windows::version::server_2003 : windows::version::xp_pro_64bit; if (IsWindowsVersionOrGreater(5, 0, 0)) return is_server ? windows::version::win2000 : windows::version::win2000; #else OSVERSIONINFOEX osvi; osvi.dwOSVersionInfoSize = sizeof(OSVERSIONINFOEX); if (GetVersionEx((OSVERSIONINFO*)&osvi)) { if (osvi.dwMajorVersion == 6) { if (osvi.dwMinorVersion == 2) { if (osvi.wServicePackMajor == 1) return osvi.wProductType == VER_NT_WORKSTATION ? version::win8_1 : version::server_2012_sp1; else if (osvi.wServicePackMajor == 0) return osvi.wProductType == VER_NT_WORKSTATION ? version::win8 : version::server_2012; } else if (osvi.dwMinorVersion == 1) { if (osvi.wServicePackMajor == 0) return osvi.wProductType == VER_NT_WORKSTATION ? version::win7 : version::server_2008r2; else if (osvi.wServicePackMajor == 1) return osvi.wProductType == VER_NT_WORKSTATION ? version::win7_sp1 : version::server_2008r2_sp1; } else if (osvi.dwMinorVersion == 0) { if (osvi.wServicePackMajor == 2) return osvi.wProductType == VER_NT_WORKSTATION ? version::vista_sp2 : version::server_2008_sp2; else if (osvi.wServicePackMajor == 1) return osvi.wProductType == VER_NT_WORKSTATION ? version::vista_sp1 : version::server_2008_sp1; else if (osvi.wServicePackMajor == 0) return osvi.wProductType == VER_NT_WORKSTATION ? version::vista : version::server_2008; } } else if (osvi.dwMajorVersion == 5) { if (osvi.dwMinorVersion == 2) { SYSTEM_INFO si; GetSystemInfo(&si); if ((osvi.wProductType == VER_NT_WORKSTATION) && (si.wProcessorArchitecture==PROCESSOR_ARCHITECTURE_AMD64)) return version::xp_pro_64bit; else if (osvi.wSuiteMask & 0x00008000 /*VER_SUITE_WH_SERVER*/) return version::home_server; else return GetSystemMetrics(SM_SERVERR2) ? version::server_2003r2 : version::server_2003; } else if (osvi.dwMinorVersion == 1) return version::xp; else if (osvi.dwMinorVersion == 0) return version::win2000; } } #endif return version::unknown; }
bool SFSystemInfo::InitializeOSInfo() { // 2014.07.02 최흥배 GetVersionEx를 MS에서 비추천 API로 지정되어서 새 API로 OS의 간단한 정보만 얻었습니다. // MSDN의 OS 버전 번호 http://msdn.microsoft.com/en-us/library/ms724832(v=vs.85).aspx if (IsWindowsServer()) { m_OSInfo.isServer = true; } if (IsWindows8Point1OrGreater()) { if (m_OSInfo.isServer) m_OSInfo.szOperatingSystem = "Windows Server 2012 R2 or Grater"; else m_OSInfo.szOperatingSystem = "Windows 8.1 or Grater"; m_OSInfo.majorVer = 6; m_OSInfo.minorVer = 3; } else if (IsWindows8OrGreater()) { if (m_OSInfo.isServer) m_OSInfo.szOperatingSystem = "Windows Server 2012"; else m_OSInfo.szOperatingSystem = "Windows 8"; m_OSInfo.majorVer = 6; m_OSInfo.minorVer = 2; } else if (IsWindows7OrGreater()) { if (m_OSInfo.isServer) m_OSInfo.szOperatingSystem = "Windows Server 2008 R2"; else m_OSInfo.szOperatingSystem = "Windows 7"; m_OSInfo.majorVer = 6; m_OSInfo.minorVer = 1; } else if (IsWindowsVistaOrGreater()) { if (m_OSInfo.isServer) m_OSInfo.szOperatingSystem = "Windows Server 2008"; else m_OSInfo.szOperatingSystem = "Windows Vista"; m_OSInfo.majorVer = 6; m_OSInfo.minorVer = 0; } else if (IsWindowsXPOrGreater()) { if (m_OSInfo.isServer) m_OSInfo.szOperatingSystem = "Windows Server 2003"; else m_OSInfo.szOperatingSystem = "Windows XP"; m_OSInfo.majorVer = 5; m_OSInfo.minorVer = 1; } return true; }
int _tmain(int argc, _TCHAR* argv[]) { int result = -1; HANDLE lsa = 0; //wchar_t unlock[MAX_GROUPNAME] = L""; TRACE(L"-------------------------\n"); //EnablePrivilege(L"SeTcbPrivilege"); if(!RegisterLogonProcess(LOGON_PROCESS_NAME, &lsa)) TRACEMSG(GetLastError()); if(IsWindowsServer()) { TRACE(L"Windows Server\n"); } else { TRACE(L"Windows pas Server\n"); } /* if(GetGroupName(gUnlockGroupName, unlock, sizeof unlock / sizeof *unlock) == S_OK) { wchar_t caption[512]; wchar_t text[2048]; OutputDebugString(L"Group name "); OutputDebugString(unlock); OutputDebugString(L"\n"); if((GetNoticeText(L"Caption", caption, sizeof caption / sizeof *caption) == S_OK) && (GetNoticeText(L"Text", text, sizeof text / sizeof *text) == S_OK)) { wchar_t message[MAX_USERNAME + sizeof text / sizeof *text]; wchar_t *read = text; wchar_t *write = text; while(*read) { if((*read == '\\') && (*(read+1) == 'n')) { *write++ = '\n'; read += 2; } else { *write++ = *read++; } } *write = 0; wsprintf(message, text, unlock); //Will insert group name if there is a %s in the message MessageBox(0, message, caption, MB_YESNOCANCEL|MB_ICONEXCLAMATION); } } */ if(argc > 1) for(int i=1; i<argc; ++i) { // wchar_t user[MAX_USERNAME]; // wchar_t domain[MAX_DOMAIN]; wchar_t passwd[MAX_PASSWORD]; wchar_t username[512]; wchar_t domain[512]; HANDLE current_user = 0; OpenProcessToken(GetCurrentProcess(), TOKEN_READ, ¤t_user); GetUsernameAndDomainFromToken(current_user, username, sizeof username / sizeof *username, domain, sizeof domain / sizeof *domain); if(ShouldHookUnlockPasswordDialog(current_user)) { TRACE(L"Should hook.\n"); } if (_getws_s(passwd, MAX_PASSWORD) == passwd) { result = ShouldUnlockForUser(lsa, current_user, L".", argv[i], passwd); switch(result) { case eLetMSGINAHandleIt: TRACE(L"TEST result is eLetMSGINAHandleIt\n"); wprintf(L"Actual result : eLetMSGINAHandleIt\n"); break; case eUnlock: TRACE(L"TEST result is eUnlock\n"); wprintf(L"Actual result : eUnlock\n"); break; case eForceLogoff: TRACE(L"TEST result is eForceLogoff\n"); wprintf(L"Actual result : eForceLogoff\n"); break; } } else { TRACE(L"Unable to read password\n"); break; } CloseHandle(current_user); } LsaDeregisterLogonProcess(lsa); //DisablePrivilege(L"SeTcbPrivilege"); return result; }