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.
 
 
 
 
 
 

167 lines
3.7 KiB

//+----------------------------------------------------------------------------
//
// File: cversion.cpp
//
// Module: CMSETUP.LIB
//
// Synopsis: Implementation of the CVersion class, a utility class that
// wraps up the functionality for detecting the version of a
// given module filename.
//
// Copyright (c) 1998-1999 Microsoft Corporation
//
// Author: quintinb Created Header 08/19/99
//
//+----------------------------------------------------------------------------
#include "cmsetup.h"
#include "getmodulever.cpp"
CVersion::CVersion(LPTSTR szFile)
{
m_bIsPresent = FALSE;
m_szPath[0] = TEXT('\0');
DWORD dwVersion = 0;
DWORD dwBuild = 0;
if ((NULL != szFile) && (TEXT('\0') != szFile[0]))
{
lstrcpy(m_szPath, szFile);
Init();
}
}
CVersion::CVersion()
{
m_bIsPresent = FALSE;
m_szPath[0] = TEXT('\0');
DWORD dwVersion = 0;
DWORD dwBuild = 0;
}
CVersion::~CVersion()
{
// nothing to do really
}
void CVersion::Init()
{
MYDBGASSERT(TEXT('\0') != m_szPath[0]);
//
// Check to see if we have version information
//
HRESULT hr = GetModuleVersionAndLCID(m_szPath, &m_dwVersion, &m_dwBuild, &m_dwLCID);
if (SUCCEEDED(hr))
{
m_bIsPresent = TRUE;
CMTRACE3(TEXT("%s has Version = %u.%u"), m_szPath, (DWORD)HIWORD(m_dwVersion), (DWORD)LOWORD(m_dwVersion));
CMTRACE3(TEXT("%s has Build Number = %u.%u"), m_szPath, (DWORD)HIWORD(m_dwBuild), (DWORD)LOWORD(m_dwBuild));
CMTRACE2(TEXT("%s has LCID = %u"), m_szPath, m_dwLCID);
}
}
BOOL CVersion::IsPresent()
{
return m_bIsPresent;
}
BOOL CVersion::GetVersionString(LPTSTR szStr)
{
if ((NULL != szStr) && (0 != m_dwVersion))
{
MYVERIFY(0 != (UINT)wsprintf(szStr, TEXT("%u.%u"), (DWORD)HIWORD(m_dwVersion),
(DWORD)LOWORD(m_dwVersion)));
return TRUE;
}
return FALSE;
}
BOOL CVersion::GetBuildNumberString(LPTSTR szStr)
{
if ((NULL != szStr) && (0 != m_dwBuild))
{
MYVERIFY(0 != (UINT)wsprintf(szStr, TEXT("%u.%u"), (DWORD)HIWORD(m_dwBuild),
(DWORD)LOWORD(m_dwBuild)));
return TRUE;
}
return FALSE;
}
BOOL CVersion::GetFilePath(LPTSTR szStr)
{
if ((m_bIsPresent) && (TEXT('\0') != m_szPath[0]) && (NULL != szStr))
{
lstrcpy(szStr, m_szPath);
}
return m_bIsPresent;
}
DWORD CVersion::GetVersionNumber()
{
return m_dwVersion;
}
DWORD CVersion::GetBuildAndQfeNumber()
{
return m_dwBuild;
}
DWORD CVersion::GetMajorVersionNumber()
{
return (DWORD)HIWORD(m_dwVersion);
}
DWORD CVersion::GetMinorVersionNumber()
{
return (DWORD)LOWORD(m_dwVersion);
}
DWORD CVersion::GetBuildNumber()
{
return (DWORD)HIWORD(m_dwBuild);
}
DWORD CVersion::GetQfeNumber()
{
return (DWORD)LOWORD(m_dwBuild);
}
DWORD CVersion::GetLCID()
{
return m_dwLCID;
}
// Note the following is a non-class function:
//+----------------------------------------------------------------------------
//
// Function: ArePrimaryLangIDsEqual
//
// Synopsis: Helper routine to compare the Primary Language IDs of two given
// LCIDs.
//
// Arguments: DWORD dwLCID1 - first LCID
// DWORD dwLCID2 - second LCID
//
// Returns: BOOL - TRUE if the LCIDs have the same Primary Language ID
//
// History: quintinb Created 7/8/99
//
//+----------------------------------------------------------------------------
BOOL ArePrimaryLangIDsEqual(DWORD dwLCID1, DWORD dwLCID2)
{
WORD wLangId1 = LANGIDFROMLCID(dwLCID1);
WORD wLangId2 = LANGIDFROMLCID(dwLCID2);
//
// Now Convert the LANG IDs into their respective Primary Lang IDs and compare
//
return (PRIMARYLANGID(wLangId1) == PRIMARYLANGID(wLangId2));
}