private string MapRoot(string path, bool is64bit, char hive)
{
// Check for impossible mapping.
if (!this.Is64Bit && is64bit)
{
return null;
}
// HKEY_CLASSES_ROOT
if ('0' == hive)
{
return this.Is64Bit == is64bit ? HKCR : HKCR_WOW64;
}
// HKEY_CURRENT_USER
if ('1' == hive)
{
return this.Is64Bit == is64bit ? HKCU : HKCU_WOW64;
}
// HKEY_LOCAL_MACHINE
if ('2' == hive)
{
return this.Is64Bit == is64bit ? HKLM : HKLM_WOW64;
}
// HKEY_USERS
if ('3' == hive && !string.IsNullOrEmpty(path))
{
if (this.Is64Bit == is64bit)
{
return HKU;
}
else
{
// Extract the user SID with leading backslash.
var userSid = path.Substring(0, path.IndexOf(Path.DirectorySeparatorChar, 1));
return HKU + userSid + SOFTWARE_WOW64;
}
}
return null;
}