/// <summary> /// Save a single session to the stream /// </summary> /// <param name="s">The session to save</param> /// <param name="sw"></param> /// <returns>true if sucessful, false otherwise</returns> private bool saveSession(Session s, StreamWriter sw) { RegistryKey rk = Registry.CurrentUser.OpenSubKey(PUTTY_SESSIONS_REG_KEY + "\\" + s.SessionKey); if (rk != null) { sw.WriteLine("[" + Registry.CurrentUser.Name + "\\" + PUTTY_SESSIONS_REG_KEY + "\\" + s.SessionKey + "]"); } else { return(false); } foreach (string valueName in rk.GetValueNames()) { RegistryValueKind valueKind = rk.GetValueKind(valueName); if (valueKind.Equals(RegistryValueKind.String)) { sw.WriteLine("\"" + valueName + "\"=\"" + rk.GetValue(valueName).ToString().Replace("\\", "\\\\") + "\""); } else if (valueKind.Equals(RegistryValueKind.DWord)) { Object o = rk.GetValue(valueName); string hex = ((int)o).ToString("x8"); sw.WriteLine("\"" + valueName + "\"=dword:" + hex); } } sw.WriteLine(); rk.Close(); return(true); }
/// <summary> /// Get registry value, which is expected to be a string /// </summary> /// <param name="keyName">Registry Key Name</param> /// <param name="valName">Registry Value Name</param> /// <returns>Registry value</returns> /// <exception cref="ArgumentNullException">If <paramref name="valName"/> is null</exception> /// <exception cref="InvalidDataException">If some problem with the registry value</exception> internal static string GetRegistryStringValue(string keyName, string valName) { const string MethodName = "GetRegistryStringValue"; // argument check if (keyName == null) { keyName = string.Empty; } if (valName == null) { throw new ArgumentNullException("valName"); } RegistryKey regKey = Registry.LocalMachine.OpenSubKey(keyName, false); try { if (regKey != null) { object val = regKey.GetValue(valName); if (val != null) { RegistryValueKind regType = regKey.GetValueKind(valName); if (!regType.Equals(RegistryValueKind.String)) { throw new InvalidDataException(String.Format( CultureInfo.CurrentCulture, "Invalid Registry data type, key name: {0} value name: {1} should be String", keyName, valName)); } return(Convert.ToString(val, CultureInfo.CurrentCulture)); } else { throw new InvalidDataException(String.Format( CultureInfo.CurrentCulture, "Missing value for key name: {0} value name: {1}", keyName, valName)); } } else { throw new InvalidDataException(String.Format( CultureInfo.CurrentCulture, "Unable to open registry for key: {0}", keyName)); } } finally { if (regKey != null) { regKey.Close(); } } }
//Write Registry Value public bool RegistryWriter(string subKey, string keyName, string keyValue, RegistryValueKind valueType) { try { RegistryPermission regeditPermission = new RegistryPermission(RegistryPermissionAccess.AllAccess, System.IO.Path.Combine(Registry.CurrentUser.ToString(), System.IO.Path.Combine(ProcestaVariables.Variables.REGISTRY_PATH, subKey))); regeditPermission.Demand(); RegistryKey regeditWrite = Registry.CurrentUser; //regeditWrite.SetAccessControl(regeditUserRuls); regeditWrite = regeditWrite.OpenSubKey(System.IO.Path.Combine(ProcestaVariables.Variables.REGISTRY_PATH, subKey), true); if (regeditWrite != null) { if (valueType.Equals(RegistryValueKind.Binary)) { regeditWrite.SetValue(keyName, RegeditNecessaryFunction.ToByteArray(keyValue), RegistryValueKind.Binary); regeditWrite.Close(); return(true); } else if (valueType.Equals(RegistryValueKind.DWord)) { regeditWrite.SetValue(keyName, Convert.ToInt32(keyValue), RegistryValueKind.DWord); regeditWrite.Close(); return(true); } else if (valueType.Equals(RegistryValueKind.ExpandString)) { regeditWrite.SetValue(keyName, keyValue, RegistryValueKind.ExpandString); regeditWrite.Close(); return(true); } else if (valueType.Equals(RegistryValueKind.MultiString)) { regeditWrite.SetValue(keyName, RegeditNecessaryFunction.ToStringArray(keyValue), RegistryValueKind.MultiString); regeditWrite.Close(); return(true); } else if (valueType.Equals(RegistryValueKind.QWord)) { regeditWrite.SetValue(keyName, Convert.ToInt32(keyValue), RegistryValueKind.QWord); regeditWrite.Close(); return(true); } else { regeditWrite.SetValue(keyName, keyValue, RegistryValueKind.String); regeditWrite.Close(); return(true); } } else { RegistryKey regKeyCrator = Registry.CurrentUser; regKeyCrator = regKeyCrator.CreateSubKey(System.IO.Path.Combine(ProcestaVariables.Variables.REGISTRY_PATH, subKey), RegistryKeyPermissionCheck.Default); regKeyCrator.Close(); RegistryWriter(subKey, keyName, keyValue, valueType); return(true); } } catch (Exception e) { MessageBox.Show(ProcestaVariables.Variables.ERROR_MESSAGES[0, 3] + Environment.NewLine + e, ProcestaVariables.Variables.ERROR_MESSAGES[0, 0], MessageBoxButtons.OK, MessageBoxIcon.Stop); return(false); } }
private PolicyItemCheckItem TestItem(RegistryKey passedRoot, string passedKey, string passedValue, PolicyItem item) { PolicyItemCheckItem returnValue = new PolicyItemCheckItem(); try { RegistryKey rk = passedRoot.OpenSubKey(passedKey); object Value = rk.GetValue(passedValue); if (Value != null) { RegistryValueKind rvk = rk.GetValueKind(item.Value); if (ConvertRegKindToString(rvk).ToString().Equals(item.StringType)) { if (rvk.Equals(RegistryValueKind.Binary)) { byte[] bytes = (byte[])Value; string vs = ""; for (int i = 0; i < bytes.Length; i++) { vs += String.Format("{0:X2}", bytes[i]); } returnValue.LocalValue = vs; if (vs.Equals(item.Data)) { returnValue.Exists = PolicyItem.ITEM_EXISTS_SAME; returnValue.ExistsInfo = "Values Match"; } else { returnValue.Exists = PolicyItem.ITEM_EXISTS_VALUE_DIFFERS; returnValue.ExistsInfo = "Local value " + vs; } } else if (rvk.Equals(RegistryValueKind.ExpandString)) { returnValue.LocalValue = Value.ToString(); if (Value.ToString().Equals(item.Data)) { returnValue.Exists = PolicyItem.ITEM_EXISTS_SAME; returnValue.ExistsInfo = "Values Match"; } else { if (Environment.ExpandEnvironmentVariables(item.Data).Equals(Value.ToString())) { returnValue.Exists = PolicyItem.ITEM_EXISTS_SAME; returnValue.ExistsInfo = "Values Match"; } else { returnValue.Exists = PolicyItem.ITEM_EXISTS_VALUE_DIFFERS; returnValue.ExistsInfo = "Local value " + Value; } } } else if (rvk.Equals(RegistryValueKind.MultiString)) { string[] regItems = item.Data.Split('\0').Where(t => t.Length > 0).ToArray(); if (Value is string[] && regItems.SequenceEqual((string[])(Value))) { returnValue.LocalValue = Value.ToString(); returnValue.Exists = PolicyItem.ITEM_EXISTS_SAME; returnValue.ExistsInfo = "Values Match"; } else { returnValue.Exists = PolicyItem.ITEM_EXISTS_VALUE_DIFFERS; returnValue.ExistsInfo = "Local value " + Value; returnValue.LocalValue = Value.ToString(); } } else if (Value.ToString().Equals(item.Data)) { returnValue.LocalValue = Value.ToString(); returnValue.Exists = PolicyItem.ITEM_EXISTS_SAME; returnValue.ExistsInfo = "Values Match"; } else { returnValue.Exists = PolicyItem.ITEM_EXISTS_VALUE_DIFFERS; returnValue.ExistsInfo = "Local value " + Value; returnValue.LocalValue = Value.ToString(); } } else { returnValue.Exists = PolicyItem.ITEM_EXISTS_TYPE_DIFFERS; returnValue.ExistsInfo = "Local type " + ConvertRegKindToString(rvk).ToString(); returnValue.LocalValue = item.Data.ToString(); } } else if (item.Value.StartsWith("**del.") || item.StringType.Equals("REG_NONE")) { returnValue.Exists = PolicyItem.ITEM_EXISTS_SAME; returnValue.ExistsInfo = "Deleted locally too"; returnValue.LocalValue = ""; } else { returnValue.Exists = PolicyItem.ITEM_MISSING; returnValue.ExistsInfo = "Not set locally"; returnValue.LocalValue = ""; } } catch { returnValue.Exists = PolicyItem.ITEM_MISSING; returnValue.ExistsInfo = "Not set locally"; returnValue.LocalValue = ""; } return(returnValue); }
//Write Registry Value public bool RegistryWriter(string subKey, string keyName,string keyValue, RegistryValueKind valueType) { try { RegistryPermission regeditPermission = new RegistryPermission(RegistryPermissionAccess.AllAccess,System.IO.Path.Combine(Registry.CurrentUser.ToString(),System.IO.Path.Combine(ProcestaVariables.Variables.REGISTRY_PATH,subKey))); regeditPermission.Demand(); RegistryKey regeditWrite=Registry.CurrentUser; //regeditWrite.SetAccessControl(regeditUserRuls); regeditWrite = regeditWrite.OpenSubKey(System.IO.Path.Combine(ProcestaVariables.Variables.REGISTRY_PATH, subKey), true); if(regeditWrite!=null) { if(valueType.Equals(RegistryValueKind.Binary)) { regeditWrite.SetValue(keyName,RegeditNecessaryFunction.ToByteArray(keyValue),RegistryValueKind.Binary); regeditWrite.Close(); return true; } else if(valueType.Equals(RegistryValueKind.DWord)) { regeditWrite.SetValue(keyName,Convert.ToInt32(keyValue),RegistryValueKind.DWord); regeditWrite.Close(); return true; } else if( valueType.Equals(RegistryValueKind.ExpandString)) { regeditWrite.SetValue(keyName,keyValue,RegistryValueKind.ExpandString); regeditWrite.Close(); return true; } else if(valueType.Equals(RegistryValueKind.MultiString)) { regeditWrite.SetValue(keyName,RegeditNecessaryFunction.ToStringArray(keyValue),RegistryValueKind.MultiString); regeditWrite.Close(); return true; } else if(valueType.Equals(RegistryValueKind.QWord)) { regeditWrite.SetValue(keyName,Convert.ToInt32(keyValue),RegistryValueKind.QWord); regeditWrite.Close(); return true; } else { regeditWrite.SetValue(keyName,keyValue,RegistryValueKind.String); regeditWrite.Close(); return true; } } else { RegistryKey regKeyCrator=Registry.CurrentUser; regKeyCrator = regKeyCrator.CreateSubKey(System.IO.Path.Combine(ProcestaVariables.Variables.REGISTRY_PATH, subKey), RegistryKeyPermissionCheck.Default); regKeyCrator.Close(); RegistryWriter(subKey,keyName,keyValue,valueType); return true; } } catch (Exception e) { MessageBox.Show(ProcestaVariables.Variables.ERROR_MESSAGES[0,3] + Environment.NewLine + e, ProcestaVariables.Variables.ERROR_MESSAGES[0,0], MessageBoxButtons.OK, MessageBoxIcon.Stop); return false; } }