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.
 
 
 
 
 
 

139 lines
3.5 KiB

//+----------------------------------------------------------------------------
//
// 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;
}
}