public static void Save(GameSave save) { //ClearSave(); var values = save.GetValues(); using (var re = new RegistryEditor("Software\\Delve Interactive\\CHANGE")) { foreach (var kvp in values) { var key = RegistryKeyMapper.GetKey(kvp.Key); re.SetValue(key, kvp.Value); } save.Unknown.ForEach(item => re.SetValue(item.Key, item.Value)); foreach (var kvp in save.Perks) { var key = RegistryKeyMapper.GetKey("perk_" + kvp.Key.ToString()); re.SetValue(key, kvp.Value ? 1 : 0); } foreach (var item in save.Inventory.Items) { var key = RegistryKeyMapper.GetKey("item_" + item.name); re.SetValue(key, item.amount); } } }
public static GameSave Load() { GameSave save = new GameSave(); save.Unknown = new Dictionary <string, object>(); save.Inventory = new Inventory(); save.Perks = new Dictionary <Perk, bool>(); try { using (RegistryKey rk = Registry.CurrentUser.OpenSubKey("Software\\Delve Interactive\\CHANGE")) { string[] keys = rk.GetValueNames(); foreach (string key in keys) { string keyName = key.Contains("_") ? key.Substring(0, key.LastIndexOf("_")) : key; keyName = keyName.ToLower(); if (keyName.StartsWith("item_")) { int amount = Convert.ToInt32(rk.GetValue(key)); string name = keyName.Substring(4, keyName.Length - 4); name = name[0].ToString().ToUpper() + name.Substring(1); save.Inventory.CreateItem(name, amount); } else if (keyName.StartsWith("perk_")) { int n = int.Parse(keyName.Substring(4)); if (n >= Enum.GetValues(typeof(Perk)).Length) { save.Unknown.Add(key, rk.GetValue(key)); } else { Perk perk = (Perk)n; bool val = Convert.ToBoolean(rk.GetValue(key)); save.Perks.Add(perk, val); } } else { var val = rk.GetValue(key); bool valueSet = save.SetValue(keyName, val); if (!valueSet) { save.Unknown.Add(key, val); } } RegistryKeyMapper.EnsureKey(key); } } } catch (Exception ex) { // TODO: Handle errors return(null); } return(save); }
public void WhenValidDataIsStored_SameDataReadOnLoad() { this.hkcu.DeleteSubKeyTree(TestKeyPath, false); var registryKey = hkcu.CreateSubKey(TestKeyPath); var original = new KeyWithData() { String = "test", Dword = 42, NullableDword = 45, Qword = 99999999999999999L, NullableQword = null, Bool = true, NullableBool = true }; new RegistryKeyMapper <KeyWithData>().MapObjectToKey(original, registryKey); var copy = new RegistryKeyMapper <KeyWithData>().MapKeyToObject(registryKey); Assert.AreEqual(original.String, copy.String); Assert.AreEqual(original.Dword, copy.Dword); Assert.AreEqual(original.NullableDword, copy.NullableDword); Assert.AreEqual(original.Qword, copy.Qword); Assert.AreEqual(original.NullableQword, copy.NullableQword); Assert.AreEqual(original.Bool, copy.Bool); Assert.AreEqual(original.NullableBool, copy.NullableBool); }
public void WhenSecureStringIsNull_RemainsNull() { this.hkcu.DeleteSubKeyTree(TestKeyPath, false); var registryKey = hkcu.CreateSubKey(TestKeyPath); var original = new KeyWithSecureString() { }; new RegistryKeyMapper <KeyWithSecureString>().MapObjectToKey(original, registryKey); var copy = new RegistryKeyMapper <KeyWithSecureString>().MapKeyToObject(registryKey); Assert.IsNull(copy.Secure); }
public void WhenSecureStringStored_StringCanBeDecrypted() { this.hkcu.DeleteSubKeyTree(TestKeyPath, false); var registryKey = hkcu.CreateSubKey(TestKeyPath); var original = new KeyWithSecureString() { Secure = SecureStringExtensions.FromClearText("secure!!!") }; new RegistryKeyMapper <KeyWithSecureString>().MapObjectToKey(original, registryKey); var copy = new RegistryKeyMapper <KeyWithSecureString>().MapKeyToObject(registryKey); Assert.AreEqual( "secure!!!", copy.Secure.AsClearText()); }
public void WhenNullDataIsStored_SameDataReadOnLoad() { hkcu.DeleteSubKeyTree(TestKeyPath, false); var registryKey = hkcu.CreateSubKey(TestKeyPath); var original = new KeyWithData() { String = null, NullableDword = null }; new RegistryKeyMapper <KeyWithData>().MapObjectToKey(original, registryKey); var copy = new RegistryKeyMapper <KeyWithData>().MapKeyToObject(registryKey); Assert.AreEqual(original.String, copy.String); Assert.AreEqual(original.Dword, copy.Dword); Assert.AreEqual(original.NullableDword, copy.NullableDword); }
public void WhenSecureStringIsDeleted_RemainsNull() { this.hkcu.DeleteSubKeyTree(TestKeyPath, false); var registryKey = hkcu.CreateSubKey(TestKeyPath); new RegistryKeyMapper <KeyWithSecureString>().MapObjectToKey( new KeyWithSecureString() { Secure = SecureStringExtensions.FromClearText("secure!!!") }, registryKey); new RegistryKeyMapper <KeyWithSecureString>().MapObjectToKey( new KeyWithSecureString() { Secure = null }, registryKey); var copy = new RegistryKeyMapper <KeyWithSecureString>().MapKeyToObject(registryKey); Assert.IsNull(copy.Secure); }