139 lines
3.5 KiB
C++
139 lines
3.5 KiB
C++
//+----------------------------------------------------------------------------
|
|
//
|
|
// File: needsmig.cpp
|
|
//
|
|
// Module: CMCFG32.DLL AND CMSTP.EXE
|
|
//
|
|
// Synopsis: Implementation of the ProfileNeedsMigration function.
|
|
//
|
|
// Copyright (c) 1999 Microsoft Corporation
|
|
//
|
|
// Author: quintinb Created Header 08/19/99
|
|
//
|
|
//+----------------------------------------------------------------------------
|
|
|
|
|
|
//+----------------------------------------------------------------------------
|
|
//
|
|
// Function: ProfileNeedsMigration
|
|
//
|
|
// Synopsis: This function determines if we need to migrate a profile or not.
|
|
// Profiles that have the current Profile version format or greater
|
|
// are not migrated. Profiles that have an older version format that
|
|
// have already been migrated (we look to see if the GUID is missing on
|
|
// NT5 or if the Delete Entry exists on Down Level) don't need to
|
|
// be migrated.
|
|
//
|
|
// Arguments: LPCTSTR pszPathToCmp - full path to the CMP file
|
|
//
|
|
// Returns: BOOL - TRUE if the profile should be migrated or not
|
|
//
|
|
// History: quintinb Created 11/20/98
|
|
//
|
|
//+----------------------------------------------------------------------------
|
|
BOOL ProfileNeedsMigration(LPCTSTR pszServiceName, LPCTSTR pszPathToCmp)
|
|
{
|
|
//
|
|
// Open the CMP and check the version number. If the profile format version
|
|
// is old then we need to migrate it.
|
|
//
|
|
|
|
if ((NULL == pszServiceName) || (NULL == pszPathToCmp) ||
|
|
(TEXT('\0') == pszServiceName[0]) || (TEXT('\0') == pszPathToCmp[0]))
|
|
{
|
|
return FALSE;
|
|
}
|
|
|
|
CPlatform plat;
|
|
CFileNameParts FileParts(pszPathToCmp);
|
|
|
|
int iCurrentCmpVersion = GetPrivateProfileInt(c_pszCmSectionProfileFormat, c_pszVersion,
|
|
0, pszPathToCmp);
|
|
|
|
if (PROFILEVERSION > iCurrentCmpVersion)
|
|
{
|
|
//
|
|
// Now construct the path to the INF file (1.0 and 1.1 profiles kept the infs in
|
|
// the system dir)
|
|
//
|
|
TCHAR szTemp[MAX_PATH+1];
|
|
TCHAR szInfFile[MAX_PATH+1];
|
|
TCHAR szGUID[MAX_PATH+1];
|
|
HKEY hKey;
|
|
|
|
MYVERIFY(0 != GetSystemDirectory(szTemp, MAX_PATH));
|
|
|
|
MYVERIFY(CELEMS(szInfFile) > (UINT)wsprintf(szInfFile, TEXT("%s\\%s%s"), szTemp,
|
|
FileParts.m_FileName, TEXT(".inf")));
|
|
|
|
if (!FileExists(szInfFile))
|
|
{
|
|
return FALSE;
|
|
}
|
|
|
|
//
|
|
// Get the GUID from the inf file.
|
|
//
|
|
ZeroMemory(szGUID, sizeof(szGUID));
|
|
MYVERIFY(0 != GetPrivateProfileString(c_pszInfSectionStrings, c_pszDesktopGuid, TEXT(""), szGUID,
|
|
MAX_PATH, szInfFile));
|
|
|
|
if (0 != szGUID[0])
|
|
{
|
|
MYVERIFY(CELEMS(szTemp) > (UINT)wsprintf(szTemp,
|
|
TEXT("CLSID\\%s"), szGUID));
|
|
|
|
if (ERROR_SUCCESS == RegOpenKeyEx(HKEY_CLASSES_ROOT, szTemp, 0,
|
|
KEY_READ, &hKey))
|
|
{
|
|
//
|
|
// If this is NT5, then we need to migrate. On Legacy we need to try to
|
|
// open the delete subkey.
|
|
//
|
|
RegCloseKey(hKey);
|
|
if (plat.IsAtLeastNT5())
|
|
{
|
|
return TRUE;
|
|
}
|
|
else
|
|
{
|
|
MYVERIFY(CELEMS(szTemp) > (UINT)wsprintf(szTemp,
|
|
TEXT("CLSID\\%s\\Shell\\Delete"), szGUID));
|
|
|
|
if (ERROR_SUCCESS == RegOpenKeyEx(HKEY_CLASSES_ROOT, szTemp, 0,
|
|
KEY_READ, &hKey))
|
|
{
|
|
//
|
|
// Already been migrated
|
|
//
|
|
RegCloseKey(hKey);
|
|
return FALSE;
|
|
}
|
|
else
|
|
{
|
|
//
|
|
// Must Migrate the profile.
|
|
//
|
|
return TRUE;
|
|
}
|
|
}
|
|
}
|
|
else
|
|
{
|
|
return FALSE;
|
|
}
|
|
}
|
|
else
|
|
{
|
|
//
|
|
// This affects MSN, as long as we have true here their 1.0 stuff will
|
|
// get migrated. If we don't want it to, change this.
|
|
//
|
|
return TRUE;
|
|
}
|
|
}
|
|
else
|
|
{
|
|
return FALSE;
|
|
}
|
|
} |