Source code of Windows XP (NT5)
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

666 lines
14 KiB

//+----------------------------------------------------------------------------
//
// File: cmplat.cpp
//
// Module: CMSETUP.LIB
//
// Synopsis: Implementation of CPlatform class
// use it to query the system for all kinds of platform info
// OSVersion, machine architecture, etc....
//
// Copyright (c) 1998-1999 Microsoft Corporation
//
// Author: quintinb Created Header 08/19/99
//
//+----------------------------------------------------------------------------
#include "cmplat.h"
//
// Constants
//
const TCHAR* const c_pszSrvOrWksPath = TEXT("SYSTEM\\CurrentControlSet\\Control\\ProductOptions");
const TCHAR* const c_pszProductType = TEXT("ProductType");
const TCHAR* const c_pszSrvString = TEXT("ServerNT");
const TCHAR* const c_pszEntString = TEXT("LanManNT");
const TCHAR* const c_pszWksString = TEXT("WinNT");
//________________________________________________________________________________
//
// Function: CPlatform constructor
//
// Synopsis: .initializes the class, all the functions are ready to be used
//
// Arguments: None
//
// Returns: NONE
//
// History: a-anasj Created 2/04/1998
//
//________________________________________________________________________________
CPlatform::CPlatform()
{
ZeroMemory(&m_SysInfo, sizeof(m_SysInfo));
GetSystemInfo(&m_SysInfo); // Does not fail!
m_OSVer.dwOSVersionInfoSize = sizeof(m_OSVer);
if (!GetVersionEx(&m_OSVer))
{
m_ClassState = bad; //Something went wrong
}
else
{
m_ClassState = good;
}
}
//________________________________________________________________________________
//
// Function: IsOS
//
// Synopsis:
//
// Arguments: DWORD OS, DWORD buildNum
//
// Returns: BOOL - TRUE means running on OS specified
//
// History: Created Header 1/30/98
//
//________________________________________________________________________________
BOOL CPlatform::IsOS(DWORD OS, DWORD buildNum)
{
if (m_OSVer.dwPlatformId != OS)
{
return FALSE;
}
if ( (m_OSVer.dwBuildNumber & 0xffff) > buildNum) //Check for higher than developer release
{
return TRUE;
}
else
{
return FALSE;
}
}
//________________________________________________________________________________
//
// Function: IsOSExact
//
// Synopsis:
//
// Arguments: DWORD OS, DWORD buildNum
//
// Returns: BOOL - TRUE means running on OS specified
//
// History: Created Header 1/30/98
//
//________________________________________________________________________________
BOOL CPlatform::IsOSExact(DWORD OS, DWORD buildNum)
{
if (m_OSVer.dwPlatformId != OS)
{
return FALSE;
}
if ((m_OSVer.dwBuildNumber & 0xffff) == buildNum) //Check for exact match
{
return TRUE;
}
else
{
return FALSE;
}
}
//________________________________________________________________________________
//
// Function: IsX86
//
// Synopsis: Determines if the current platform IsX86.
//
// Arguments: None
//
// Returns: BOOL - TRUE if the current platform IsX86
//
// History: a-anasj Created 2/04/1998
//
//________________________________________________________________________________
BOOL
CPlatform::IsX86()
{
if (bad == m_ClassState)
{
return FALSE;
}
return (m_SysInfo.wProcessorArchitecture == PROCESSOR_ARCHITECTURE_INTEL);
}
//________________________________________________________________________________
//
// Function: IsAlpha
//
// Synopsis: Determines if the current platform IsAlpha.
//
// Arguments: None
//
// Returns: BOOL - TRUE if the current platform IsAlpha
//
// History: a-anasj Created 2/04/1998
//
//________________________________________________________________________________
BOOL
CPlatform::IsAlpha()
{
if (bad == m_ClassState)
{
return FALSE;
}
return (m_SysInfo.wProcessorArchitecture == PROCESSOR_ARCHITECTURE_ALPHA);
}
//________________________________________________________________________________
//
// Function: IsIA64
//
// Synopsis: Determines if the current platform is an IA64 machine.
//
// Arguments: None
//
// Returns: BOOL - TRUE if the current platform is an itanium.
//
// History: quintinb Created 07/20/2000
//
//________________________________________________________________________________
BOOL
CPlatform::IsIA64()
{
if (bad == m_ClassState)
{
return FALSE;
}
return (m_SysInfo.wProcessorArchitecture == PROCESSOR_ARCHITECTURE_IA64);
}
//________________________________________________________________________________
//
// Function: IsWin95Gold
//
// Synopsis: Determines if the current platform IsWin95.
//
// Arguments: None
//
// Returns: BOOL - TRUE if the current platform IsWin95
//
// History: quintinb Created 2/20/1998
//
//________________________________________________________________________________
BOOL
CPlatform::IsWin95Gold()
{
if (bad == m_ClassState)
{
return FALSE;
}
if (IsOSExact(VER_PLATFORM_WIN32_WINDOWS, 950))
{
return TRUE;
}
else
{
return FALSE;
}
}
//________________________________________________________________________________
//
// Function: IsWin95
//
// Synopsis: Determines if the current platform IsWin95Gold.
//
// Arguments: None
//
// Returns: BOOL - TRUE if the current platform IsWin95Gold
//
// History: a-anasj Created 2/04/1998
//
//________________________________________________________________________________
BOOL
CPlatform::IsWin95()
{
if (bad == m_ClassState)
{
return FALSE;
}
if ( (IsOS(VER_PLATFORM_WIN32_WINDOWS, 950)) && (!IsOS(VER_PLATFORM_WIN32_WINDOWS, 1352)) )
{
return TRUE;
}
else
{
return FALSE;
}
}
//________________________________________________________________________________
//
// Function: IsWin98
//
// Synopsis: Determines if the current platform IsWin98.
//
// Arguments: None
//
// Returns: BOOL - TRUE if the current platform IsWin98
//
// History: a-anasj Created 2/04/1998
//
//________________________________________________________________________________
BOOL
CPlatform::IsWin98()
{
if (bad == m_ClassState)
{
return FALSE;
}
return IsOS(VER_PLATFORM_WIN32_WINDOWS, 1353);
}
//________________________________________________________________________________
//
// Function: IsWin98Sr
//
// Synopsis: Determines if the current platform is a Service Release of Win98 (not
// win98 gold).
//
// Arguments: None
//
// Returns: BOOL - TRUE if the current platform is a Sr of win98
//
// History: quintinb created 1-8-99
//
//________________________________________________________________________________
BOOL
CPlatform::IsWin98Sr()
{
if (bad == m_ClassState)
{
return FALSE;
}
//
// Win98 gold had 1998 for the build number
//
return IsOS(VER_PLATFORM_WIN32_WINDOWS, 1998);
}
//________________________________________________________________________________
//
// Function: IsWin98Gold
//
// Synopsis: Determines if the current platform is Win98 Gold (build Num 1998)
//
// Arguments: None
//
// Returns: BOOL - TRUE if the current platform is Gold win98
//
// History: quintinb created 1-8-99
//
//________________________________________________________________________________
BOOL
CPlatform::IsWin98Gold()
{
if (bad == m_ClassState)
{
return FALSE;
}
if ((IsOS(VER_PLATFORM_WIN32_WINDOWS, 1353)) && (!IsOS(VER_PLATFORM_WIN32_WINDOWS, 1998)))
{
return TRUE;
}
else
{
return FALSE;
}
}
//________________________________________________________________________________
//
// Function: IsWin9x
//
// Synopsis: Determines if the current platform IsWin9x.
//
// Arguments: None
//
// Returns: BOOL - TRUE if the current platform IsWin9x
//
// History: a-anasj Created 2/04/1998
//
//________________________________________________________________________________
BOOL
CPlatform::IsWin9x()
{
if (bad == m_ClassState)
{
return FALSE;
}
return IsOS(VER_PLATFORM_WIN32_WINDOWS, 950-1);
}
//________________________________________________________________________________
//
// Function: IsNT31
//
// Synopsis: Determines if the current platform IsNT31.
//
// Arguments: None
//
// Returns: BOOL - TRUE if the current platform IsNT31
//
// History: a-anasj Created 2/04/1998
//
//________________________________________________________________________________
BOOL
CPlatform::IsNT31()
{
if (bad == m_ClassState)
{
return false;
}
if ( (IsOS(VER_PLATFORM_WIN32_NT , 0)) && (!IsOS(VER_PLATFORM_WIN32_NT , 1057)) )
{
return TRUE;
}
else
{
return FALSE;
}
}
//________________________________________________________________________________
//
// Function: IsNT351
//
// Synopsis: Determines if the current platform IsNT351.
//
// Arguments: None
//
// Returns: BOOL - TRUE if the current platform IsNT351
//
// History: a-anasj Created 2/04/1998
//
//________________________________________________________________________________
BOOL
CPlatform::IsNT351()
{
if (bad == m_ClassState)
{
return false;
}
if ( (IsOS(VER_PLATFORM_WIN32_NT , 1056)) && (!IsOS(VER_PLATFORM_WIN32_NT , 1382)) )
{
return TRUE;
}
else
{
return FALSE;
}
}
//________________________________________________________________________________
//
// Function: IsNT4
//
// Synopsis: Determines if the current platform IsNT4.
//
// Arguments: None
//
// Returns: BOOL - TRUE if the current platform IsNT4
//
// History: a-anasj Created 2/04/1998
//
//________________________________________________________________________________
BOOL
CPlatform::IsNT4()
{
if (bad == m_ClassState)
{
return FALSE;
}
if ( (IsOS(VER_PLATFORM_WIN32_NT , 1380)) && (!IsOS(VER_PLATFORM_WIN32_NT , 1500)) ) //1500 not sure
{
return TRUE;
}
else
{
return FALSE;
}
}
//________________________________________________________________________________
//
// Function: IsAtLeastNT5
//
// Synopsis: Determines if the current platform at least NT5.
//
// Arguments: None
//
// Returns: BOOL - TRUE if the current platform is NT5 or newer
//
// History: a-anasj Created 2/04/1998
//
//________________________________________________________________________________
BOOL
CPlatform::IsAtLeastNT5()
{
if (bad == m_ClassState)
{
return FALSE;
}
return IsOS(VER_PLATFORM_WIN32_NT, 1500);
}
//________________________________________________________________________________
//
// Function: IsAtLeastNT51
//
// Synopsis: Determines if the current platform at least NT51.
//
// Arguments: None
//
// Returns: BOOL - TRUE if the current platform is NT5 or newer
//
// History: quintinb Created 02/09/2001
//
//________________________________________________________________________________
BOOL
CPlatform::IsAtLeastNT51()
{
if (bad == m_ClassState)
{
return FALSE;
}
return IsOS(VER_PLATFORM_WIN32_NT, 2200);
}
//________________________________________________________________________________
//
// Function: IsNT5
//
// Synopsis: Determines if the current platform is NT5.
//
// Arguments: None
//
// Returns: BOOL - TRUE if the current platform is NT5
//
// History: a-anasj Created 2/04/1998
//
//________________________________________________________________________________
BOOL
CPlatform::IsNT5()
{
if (bad == m_ClassState)
{
return FALSE;
}
if ( (IsOS(VER_PLATFORM_WIN32_NT , 1500)) && (!IsOS(VER_PLATFORM_WIN32_NT , 2195)))
{
return TRUE;
}
else
{
return FALSE;
}
}
//________________________________________________________________________________
//
// Function: IsNT51
//
// Synopsis: Determines if the current platform at least NT51.
//
// Arguments: None
//
// Returns: BOOL - TRUE if the current platform is NT51
//
// History: quintinb Created 02/09/2001
//
//________________________________________________________________________________
BOOL
CPlatform::IsNT51()
{
if (bad == m_ClassState)
{
return FALSE;
}
if ((IsOS(VER_PLATFORM_WIN32_NT , 2195)) && (!IsOS(VER_PLATFORM_WIN32_NT , 2600))) // ISSUE quintinb 3/22/01: Update this if we need it.
{
return TRUE;
}
else
{
return FALSE;
}
}
//________________________________________________________________________________
//
// Function: IsNT
//
// Synopsis: Determines if the current platform IsNT.
//
// Arguments: None
//
// Returns: BOOL - TRUE if the current platform IsNT
//
// History: quintinb Created 9/22/1998
//
//________________________________________________________________________________
BOOL
CPlatform::IsNT()
{
if (bad == m_ClassState)
{
return FALSE;
}
return IsOS(VER_PLATFORM_WIN32_NT, 0);
}
//________________________________________________________________________________
//
// Function: IsNTSrv
//
// Synopsis: Determines if the current platform IsNT.
//
// Arguments: None
//
// Returns: BOOL - TRUE if the current platform IsNT
//
// History: quintinb Created 9/22/1998
//
//________________________________________________________________________________
BOOL CPlatform::IsNTSrv()
{
HKEY hKey;
TCHAR szTemp[MAX_PATH+1];
BOOL bReturn = FALSE;
if ((good == m_ClassState) && (IsOS(VER_PLATFORM_WIN32_NT, 0)))
{
if (ERROR_SUCCESS == RegOpenKey(HKEY_LOCAL_MACHINE, c_pszSrvOrWksPath, &hKey))
{
DWORD dwSize = MAX_PATH;
DWORD dwType = REG_SZ;
if (ERROR_SUCCESS == RegQueryValueEx(hKey, c_pszProductType, NULL, &dwType,
(LPBYTE)szTemp, &dwSize))
{
bReturn = ((0 == lstrcmpi(szTemp, c_pszSrvString)) ||
(0 == lstrcmpi(szTemp, c_pszEntString)));
}
RegCloseKey(hKey);
}
}
return bReturn;
}
BOOL CPlatform::IsNTWks()
{
HKEY hKey;
TCHAR szTemp[MAX_PATH+1];
BOOL bReturn = FALSE;
if ((good == m_ClassState) && (IsOS(VER_PLATFORM_WIN32_NT, 0)))
{
if (ERROR_SUCCESS == RegOpenKey(HKEY_LOCAL_MACHINE, c_pszSrvOrWksPath, &hKey))
{
DWORD dwSize = MAX_PATH;
DWORD dwType = REG_SZ;
if (ERROR_SUCCESS == RegQueryValueEx(hKey, c_pszProductType, NULL, &dwType,
(LPBYTE)szTemp, &dwSize))
{
bReturn = (0 == lstrcmpi(szTemp, c_pszWksString));
}
RegCloseKey(hKey);
}
}
return bReturn;
}