Do not assume HKEY_CURRENT_USER/Environment exists ==> config file was

migrated. Instead test for every key to migrate under
HKEY_CURRENT_USER/Environment.
This commit is contained in:
Alex Villacís Lasso 2004-08-25 00:48:47 +00:00 committed by Alexandre Julliard
parent 20b8b56d5f
commit c93d7d1e6d
1 changed files with 62 additions and 37 deletions

View File

@ -1861,6 +1861,7 @@ static void convert_environment( HKEY hkey_current_user )
static const WCHAR windowsW[] = {'w','i','n','d','o','w','s',0}; static const WCHAR windowsW[] = {'w','i','n','d','o','w','s',0};
static const WCHAR systemW[] = {'s','y','s','t','e','m',0}; static const WCHAR systemW[] = {'s','y','s','t','e','m',0};
static const WCHAR windirW[] = {'w','i','n','d','i','r',0}; static const WCHAR windirW[] = {'w','i','n','d','i','r',0};
static const WCHAR systemrootW[] = {'S','y','s','t','e','m','r','o','o','t',0};
static const WCHAR winsysdirW[] = {'w','i','n','s','y','s','d','i','r',0}; static const WCHAR winsysdirW[] = {'w','i','n','s','y','s','d','i','r',0};
static const WCHAR envW[] = {'E','n','v','i','r','o','n','m','e','n','t',0}; static const WCHAR envW[] = {'E','n','v','i','r','o','n','m','e','n','t',0};
static const WCHAR tempW[] = {'T','E','M','P',0}; static const WCHAR tempW[] = {'T','E','M','P',0};
@ -1894,59 +1895,83 @@ static void convert_environment( HKEY hkey_current_user )
NtClose( hkey_old ); NtClose( hkey_old );
return; return;
} }
if (disp != REG_CREATED_NEW_KEY) goto done;
/* convert TEMP */ /* Test for existence of TEMP */
RtlInitUnicodeString( &nameW, tempW ); RtlInitUnicodeString( &nameW, tempW );
if (!NtQueryValueKey( hkey_old, &nameW, KeyValuePartialInformation, buffer, sizeof(buffer), &dummy )) if (NtQueryValueKey(hkey_env, &nameW, KeyValuePartialInformation, buffer, sizeof(buffer), &dummy ))
{ {
NtSetValueKey( hkey_env, &nameW, 0, info->Type, info->Data, info->DataLength ); /* convert TEMP */
RtlInitUnicodeString( &nameW, tmpW ); RtlInitUnicodeString( &nameW, tempW );
NtSetValueKey( hkey_env, &nameW, 0, info->Type, info->Data, info->DataLength ); if (!NtQueryValueKey( hkey_old, &nameW, KeyValuePartialInformation, buffer, sizeof(buffer), &dummy ))
MESSAGE( "Converted temp dir to new entry HKCU\\Environment \"TEMP\" = %s\n", {
debugstr_w( (WCHAR*)info->Data ) ); NtSetValueKey( hkey_env, &nameW, 0, info->Type, info->Data, info->DataLength );
RtlInitUnicodeString( &nameW, tmpW );
NtSetValueKey( hkey_env, &nameW, 0, info->Type, info->Data, info->DataLength );
MESSAGE( "Converted temp dir to new entry HKCU\\Environment \"TEMP\" = %s\n",
debugstr_w( (WCHAR*)info->Data ) );
}
} }
/* convert PATH */ /* Test for existence of PATH */
RtlInitUnicodeString( &nameW, pathW ); RtlInitUnicodeString( &nameW, pathW );
if (!NtQueryValueKey( hkey_old, &nameW, KeyValuePartialInformation, buffer, sizeof(buffer), &dummy )) if (NtQueryValueKey(hkey_env, &nameW, KeyValuePartialInformation, buffer, sizeof(buffer), &dummy ))
{ {
NtSetValueKey( hkey_env, &nameW, 0, info->Type, info->Data, info->DataLength ); /* convert PATH */
MESSAGE( "Converted path dir to new entry HKCU\\Environment \"PATH\" = %s\n", RtlInitUnicodeString( &nameW, pathW );
debugstr_w( (WCHAR*)info->Data ) ); if (!NtQueryValueKey( hkey_old, &nameW, KeyValuePartialInformation, buffer, sizeof(buffer), &dummy ))
{
NtSetValueKey( hkey_env, &nameW, 0, info->Type, info->Data, info->DataLength );
MESSAGE( "Converted path dir to new entry HKCU\\Environment \"PATH\" = %s\n",
debugstr_w( (WCHAR*)info->Data ) );
}
} }
/* convert USERPROFILE */ /* Test for existence of USERPROFILE */
RtlInitUnicodeString( &nameW, profileW ); RtlInitUnicodeString( &nameW, userprofileW );
if (!NtQueryValueKey( hkey_old, &nameW, KeyValuePartialInformation, buffer, sizeof(buffer), &dummy )) if (NtQueryValueKey(hkey_env, &nameW, KeyValuePartialInformation, buffer, sizeof(buffer), &dummy ))
{ {
RtlInitUnicodeString( &nameW, userprofileW ); /* convert USERPROFILE */
NtSetValueKey( hkey_env, &nameW, 0, info->Type, info->Data, info->DataLength ); RtlInitUnicodeString( &nameW, profileW );
MESSAGE( "Converted profile dir to new entry HKCU\\Environment \"USERPROFILE\" = %s\n", if (!NtQueryValueKey( hkey_old, &nameW, KeyValuePartialInformation, buffer, sizeof(buffer), &dummy ))
debugstr_w( (WCHAR*)info->Data ) ); {
RtlInitUnicodeString( &nameW, userprofileW );
NtSetValueKey( hkey_env, &nameW, 0, info->Type, info->Data, info->DataLength );
MESSAGE( "Converted profile dir to new entry HKCU\\Environment \"USERPROFILE\" = %s\n",
debugstr_w( (WCHAR*)info->Data ) );
}
} }
/* convert windir */ /* Test for existence of windir */
RtlInitUnicodeString( &nameW, windowsW ); RtlInitUnicodeString( &nameW, windirW );
if (!NtQueryValueKey( hkey_old, &nameW, KeyValuePartialInformation, buffer, sizeof(buffer), &dummy )) if (NtQueryValueKey(hkey_env, &nameW, KeyValuePartialInformation, buffer, sizeof(buffer), &dummy ))
{ {
RtlInitUnicodeString( &nameW, windirW ); /* convert windir */
NtSetValueKey( hkey_env, &nameW, 0, info->Type, info->Data, info->DataLength ); RtlInitUnicodeString( &nameW, windowsW );
MESSAGE( "Converted windows dir to new entry HKCU\\Environment \"windir\" = %s\n", if (!NtQueryValueKey( hkey_old, &nameW, KeyValuePartialInformation, buffer, sizeof(buffer), &dummy ))
debugstr_w( (WCHAR*)info->Data ) ); {
RtlInitUnicodeString( &nameW, windirW );
NtSetValueKey( hkey_env, &nameW, 0, info->Type, info->Data, info->DataLength );
RtlInitUnicodeString( &nameW, systemrootW );
NtSetValueKey( hkey_env, &nameW, 0, info->Type, info->Data, info->DataLength );
MESSAGE( "Converted windows dir to new entry HKCU\\Environment \"windir\" = %s\n",
debugstr_w( (WCHAR*)info->Data ) );
}
} }
/* convert winsysdir */ /* Test for existence of winsysdir */
RtlInitUnicodeString( &nameW, systemW ); RtlInitUnicodeString( &nameW, winsysdirW );
if (!NtQueryValueKey( hkey_old, &nameW, KeyValuePartialInformation, buffer, sizeof(buffer), &dummy )) if (NtQueryValueKey(hkey_env, &nameW, KeyValuePartialInformation, buffer, sizeof(buffer), &dummy ))
{ {
RtlInitUnicodeString( &nameW, winsysdirW ); /* convert winsysdir */
NtSetValueKey( hkey_env, &nameW, 0, info->Type, info->Data, info->DataLength ); RtlInitUnicodeString( &nameW, systemW );
MESSAGE( "Converted system dir to new entry HKCU\\Environment \"winsysdir\" = %s\n", if (!NtQueryValueKey( hkey_old, &nameW, KeyValuePartialInformation, buffer, sizeof(buffer), &dummy ))
debugstr_w( (WCHAR*)info->Data ) ); {
RtlInitUnicodeString( &nameW, winsysdirW );
NtSetValueKey( hkey_env, &nameW, 0, info->Type, info->Data, info->DataLength );
MESSAGE( "Converted system dir to new entry HKCU\\Environment \"winsysdir\" = %s\n",
debugstr_w( (WCHAR*)info->Data ) );
}
} }
done:
NtClose( hkey_old ); NtClose( hkey_old );
NtClose( hkey_env ); NtClose( hkey_env );
} }