Back

// PSLOSVersion.cpp : Implementation of CPSLOSVersion

#include "stdafx.h"
#include "PSLOSVersion.h"

CPSLOSVersion::CPSLOSVersion()
{
   m_OSVersion = osvUnknown;

   m_Version.dwOSVersionInfoSize = sizeof(OSVERSIONINFOEX);
   if(!::GetVersionEx((OSVERSIONINFO*)&m_Version))
      return;

   switch(m_Version.dwMajorVersion)
   {
   case 5: // 2000/XP/2003;
      {
         if(m_Version.dwMinorVersion == 1)
            m_OSVersion = osvWindowsXP;
         else
            if(m_Version.dwMinorVersion == 2)
               m_OSVersion = osvWindows2003;
            else
               m_OSVersion = osvWindows2000; // info.dwMinorVersion is 0;
         break;
      }
   case 6: // Vista/2008;
      {
         if(m_Version.wProductType == VER_NT_SERVER)
            m_OSVersion = osvWindows2008;
         else
            m_OSVersion = osvWindowsVista;   // info.wProductType is either
                                    // VER_NT_WORKSTATION or VER_NT_DOMAIN_CONTROLLER;
         break;
      }
   case 7: // Windows7;
      {
         m_OSVersion = osvWindows7;
         break;
      }
   default:
      break;
   }
}

HRESULT CPSLOSVersion::FinalConstruct()
{
   return S_OK;
}

void CPSLOSVersion::FinalRelease()
{
}

////////////////////////////////////////////////////////////////////////
// Interface Implementation;
////////////////////////////////////////////////////////////////////////

STDMETHODIMP CPSLOSVersion::get_OSVersion(PSLOSMainVersion * pValue)
{
   PSL_BEGIN

   *pValue = m_OSVersion;

   PSL_END
}

STDMETHODIMP CPSLOSVersion::get_OSMajor(long * pValue)
{
   PSL_BEGIN

   *pValue = m_Version.dwMajorVersion;

   PSL_END
}

STDMETHODIMP CPSLOSVersion::get_OSMinor(long * pValue)
{
   PSL_BEGIN

   *pValue = m_Version.dwMinorVersion;

   PSL_END
}

STDMETHODIMP CPSLOSVersion::get_OSBuild(long * pValue)
{
   PSL_BEGIN

   *pValue = m_Version.dwBuildNumber;

   PSL_END
}

STDMETHODIMP CPSLOSVersion::get_IsHomeEdition(VARIANT_BOOL * pValue)
{
   PSL_BEGIN

   if(m_Version.wSuiteMask & (smPersonal + smHomeServer))
      *pValue = VARIANT_TRUE;
   else
      *pValue = VARIANT_FALSE;

   PSL_END
}

STDMETHODIMP CPSLOSVersion::get_SuitMask(PSLOSSuitMask * pValue)
{
   PSL_BEGIN

   *pValue = (PSLOSSuitMask)m_Version.wSuiteMask;

   PSL_END
}

STDMETHODIMP CPSLOSVersion::get_SPMajor(long * pValue)
{
   PSL_BEGIN

   *pValue = m_Version.wServicePackMajor;

   PSL_END
}

STDMETHODIMP CPSLOSVersion::get_SPMinor(long * pValue)
{
   PSL_BEGIN

   *pValue = m_Version.wServicePackMinor;

   PSL_END
}

STDMETHODIMP CPSLOSVersion::get_SPName(BSTR * pValue)
{
   PSL_BEGIN

   *pValue = ::SysAllocString(m_Version.szCSDVersion);

   PSL_END
}

Top