private static IDictionary GetEnvironmentVariablesCore(EnvironmentVariableTarget target)
{
if (target == EnvironmentVariableTarget.Process)
{
return GetEnvironmentVariablesCore();
}
else
{
RegistryKey baseKey;
string keyName;
if (target == EnvironmentVariableTarget.Machine)
{
baseKey = Registry.LocalMachine;
keyName = @"System\CurrentControlSet\Control\Session Manager\Environment";
}
else
{
Debug.Assert(target == EnvironmentVariableTarget.User);
baseKey = Registry.CurrentUser;
keyName = @"Environment";
}
using (RegistryKey environmentKey = baseKey.OpenSubKey(keyName, writable: false))
{
var table = new LowLevelDictionary<string, string>();
if (environmentKey != null)
{
foreach (string name in environmentKey.GetValueNames())
{
table.Add(name, environmentKey.GetValue(name, "").ToString());
}
}
return table;
}
}
}