mirror of https://github.com/tongzx/nt5src
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
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));
|
|
}
|