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