예제 #1
0
Result<ExitCode> SelfTest::Run(const Settings& settings) const
{	
	auto statisticResult = GetStatistic(settings);
	if (statisticResult.HasError())
	{
		return statisticResult.GetError();
	}

	auto statistic = statisticResult.GetResultValue();
	if (statistic.IsService())
	{	
		if (!statistic.HasAdministrativePrivileges())
		{
			return EXIT_CODE_NO_ADMIN;
		}

		if (!statistic.HasSeAssignPrimaryTokenPrivilege())
		{
			return EXIT_CODE_NO_ASSIGN_PRIMARY_TOKEN_PRIV;
		}

		if (!statistic.HasSeTcbPrivilegePrivilege())
		{
			return EXIT_CODE_NO_TCB_PRIV;
		}
	}
	
	return Is64OS() ? EXIT_CODE_READY_FOR_64 : EXIT_CODE_READY_FOR_32;
}
예제 #2
0
파일: OSVer.cpp 프로젝트: 510908220/dumper
///////////////////////////////////////////////////////////////////////////////
// GetWinVer
BOOL GetWinVer(LPTSTR pszVersion, int nCountVer,LPTSTR pszMajorMinorBuild, int nCountMajor, int *nVersion)
{
	if (!pszVersion || !nVersion || !pszMajorMinorBuild)
		return FALSE;
	lstrcpyn(pszVersion, WUNKNOWNSTR, nCountVer);
	*nVersion = WUNKNOWN;

	OSVERSIONINFO osinfo ={0};
	osinfo.dwOSVersionInfoSize = sizeof(OSVERSIONINFO);

	if (!GetVersionEx(&osinfo))
		return FALSE;

	OSVERSIONINFOEX osviex;

	ZeroMemory(&osviex, sizeof(OSVERSIONINFOEX));
	osviex.dwOSVersionInfoSize = sizeof(OSVERSIONINFOEX);

	if( !GetVersionEx ((OSVERSIONINFO *) &osviex)) 
      return FALSE;

	DWORD dwPlatformId   = osinfo.dwPlatformId;
	DWORD dwMinorVersion = osinfo.dwMinorVersion;
	DWORD dwMajorVersion = osinfo.dwMajorVersion;
	DWORD dwBuildNumber  = osinfo.dwBuildNumber & 0xFFFF;	// Win 95 needs this
	
	TCHAR szOSBit[MAX_PATH] = {0};
	_snwprintf(pszMajorMinorBuild,nCountMajor, _T("%u.%u.%u	%s"), dwMajorVersion, dwMinorVersion, dwBuildNumber
			  ,Is64OS(szOSBit, _countof(szOSBit)-1));

	if ((dwPlatformId == VER_PLATFORM_WIN32_WINDOWS) && (dwMajorVersion == 4))
	{
		if ((dwMinorVersion < 10) && (dwBuildNumber == 950))
		{
			lstrcpyn(pszVersion, W95STR,nCountVer);
			*nVersion = W95;
		}
		else if ((dwMinorVersion < 10) && 
				((dwBuildNumber > 950) && (dwBuildNumber <= 1080)))
		{
			lstrcpyn(pszVersion, W95SP1STR, nCountVer);
			*nVersion = W95SP1;
		}
		else if ((dwMinorVersion < 10) && (dwBuildNumber > 1080))
		{
			lstrcpyn(pszVersion, W95OSR2STR, nCountVer);
			*nVersion = W95OSR2;
		}
		else if ((dwMinorVersion == 10) && (dwBuildNumber == 1998))
		{
			lstrcpyn(pszVersion, W98STR, nCountVer);
			*nVersion = W98;
		}
		else if ((dwMinorVersion == 10) && 
				((dwBuildNumber > 1998) && (dwBuildNumber < 2183)))
		{
			lstrcpyn(pszVersion, W98SP1STR, nCountVer);
			*nVersion = W98SP1;
		}
		else if ((dwMinorVersion == 10) && (dwBuildNumber >= 2183))
		{
			lstrcpyn(pszVersion, W98SESTR, nCountVer);
			*nVersion = W98SE;
		}
		else if (dwMinorVersion == 90)
		{
			lstrcpyn(pszVersion, WMESTR, nCountVer);
			*nVersion = WME;
		}
	}
	else if (dwPlatformId == VER_PLATFORM_WIN32_NT)
	{
		if ((dwMajorVersion == 3) && (dwMinorVersion == 51))
		{
			lstrcpyn(pszVersion, WNT351STR, nCountVer);
			*nVersion = WNT351;
		}
		else if ((dwMajorVersion == 4) && (dwMinorVersion == 0))
		{
			lstrcpyn(pszVersion, WNT4STR, nCountVer);
			*nVersion = WNT4;
		}
		else if ((dwMajorVersion == 5) && (dwMinorVersion == 0))
		{
			lstrcpyn(pszVersion, W2KSTR, nCountVer);
			*nVersion = W2K;
		}
		else if ((dwMajorVersion == 5) && (dwMinorVersion == 1))
		{
			lstrcpyn(pszVersion, WXPSTR, nCountVer);
			*nVersion = WXP;
		}
		else if ((dwMajorVersion == 5) && (dwMinorVersion == 2) && GetSystemMetrics(SM_SERVERR2) != 0)
		{
			lstrcpyn(pszVersion, W2003SERVERSTR, nCountVer);
			*nVersion = W2003SERVER;
		}
		else if ((dwMajorVersion == 5) && (dwMinorVersion == 2) && GetSystemMetrics(SM_SERVERR2) == 0)
		{
			lstrcpyn(pszVersion, W2003SERVERST, nCountVer);
			*nVersion = W2003SERVE;
		}
		else if( (dwMajorVersion == 6) && (dwMinorVersion == 0) && (osviex.wProductType == VER_NT_WORKSTATION ) )
		{	
			lstrcpyn(pszVersion, WINVISTA, nCountVer);
			*nVersion = WVISTA;
		}
		else if( (dwMajorVersion == 6) && (dwMinorVersion == 0) && (osviex.wProductType != VER_NT_WORKSTATION ) )
		{	
			lstrcpyn(pszVersion, W2008SERVERST, nCountVer);
			*nVersion = W2008SERVE;
		}
		else if( (dwMajorVersion == 6) && (dwMinorVersion == 1) && (osviex.wProductType == VER_NT_WORKSTATION ) )
		{	
			lstrcpyn(pszVersion, WIN7, nCountVer);
			*nVersion = W7;
		}
		else if( (dwMajorVersion == 6) && (dwMinorVersion == 1) && (osviex.wProductType != VER_NT_WORKSTATION ) )
		{	
			lstrcpyn(pszVersion, W2008SERVERSTR, nCountVer);
			*nVersion = W2008SERVER;
		}
		else if( (dwMajorVersion == 6) && (dwMinorVersion == 2) && (osviex.wProductType == VER_NT_WORKSTATION ) )
		{	
			lstrcpyn(pszVersion, WIN8, nCountVer);
			*nVersion = W8;
		}
		else if ((dwMajorVersion == 6) && (dwMinorVersion == 3) && (osviex.wProductType == VER_NT_WORKSTATION))
		{
			lstrcpyn(pszVersion, WIN8_1, nCountVer);
			*nVersion = W8_1;
		}
		else if ((dwMajorVersion == 6) && (dwMinorVersion == 4) && (osviex.wProductType == VER_NT_WORKSTATION))
		{
			lstrcpyn(pszVersion, WIN10, nCountVer);
			*nVersion = W10;
		}
		else if ((dwMajorVersion == 10) && (dwMinorVersion == 0) && (osviex.wProductType == VER_NT_WORKSTATION))
		{
			lstrcpyn(pszVersion, WIN10, nCountVer);
			*nVersion = W10;
		}
	}


	else if (dwPlatformId == VER_PLATFORM_WIN32_CE)
	{
		lstrcpyn(pszVersion, WCESTR, nCountVer);
		*nVersion = WCE;
	}
	return TRUE;
}