public static List <CredProv> LoadCredProvsAndFilterSettings()
{
Dictionary <Guid, CredProv> result = new Dictionary <Guid, CredProv>();
using (RegistryKey key = Registry.LocalMachine.OpenSubKey(CRED_PROV_KEY))
{
if (key != null)
{
string[] subKeys = key.GetSubKeyNames();
foreach (string sub in subKeys)
{
using (RegistryKey cpKey = key.OpenSubKey(sub))
{
if (cpKey != null)
{
CredProv credProv = new CredProv
{
Uuid = new Guid(sub)
};
object name = cpKey.GetValue("");
if (name != null)
{
credProv.Name = name.ToString();
}
else
{
credProv.Name = credProv.Uuid.ToString();
}
if (!result.ContainsKey(credProv.Uuid))
{
result.Add(credProv.Uuid, credProv);
}
}
}
}
}
}
// Load filter settings from registry
string[] filterSettings = pGina.Core.Settings.Get.CredentialProviderFilters;
List <CredProv> filterSettingsList = new List <CredProv>();
foreach (string s in filterSettings)
{
filterSettingsList.Add(CredProv.FromRegString(s));
}
// Merge registry settings into the dictionary
foreach (CredProv cp in filterSettingsList)
{
if (result.ContainsKey(cp.Uuid))
{
cp.Name = result[cp.Uuid].Name;
result[cp.Uuid] = cp;
}
}
return(result.Values.ToList());
}