Beispiel #1
0
        public bool ApplyTweak(Tweak tweak, bool?byUser = null)
        {
            if (byUser != null)
            {
                tweak.State = byUser == true ? TweakList.Tweak.States.Sellected : TweakList.Tweak.States.SelGroupe;
            }
            tweak.Status = true;

            if (!tweak.IsAvailable())
            {
                return(false);
            }

            bool success;

            if (AdminFunc.IsAdministrator() || tweak.usrLevel)
            {
                success = TweakTools.ApplyTweak(tweak);
            }
            else
            {
                success = App.client.ApplyTweak(tweak);
            }

            TweakChanged?.Invoke(this, new TweakEventArgs()
            {
                tweak = tweak
            });
            return(success);
        }
Beispiel #2
0
        public bool UndoTweak(Tweak tweak)
        {
            tweak.State  = TweakList.Tweak.States.Unsellected;
            tweak.Status = false;

            if (!tweak.IsAvailable())
            {
                return(false);
            }

            bool success;

            if (AdminFunc.IsAdministrator() || tweak.usrLevel)
            {
                success = TweakTools.UndoTweak(tweak);
            }
            else
            {
                success = App.client.UndoTweak(tweak);
            }
            TweakChanged?.Invoke(this, new TweakEventArgs()
            {
                tweak = tweak
            });
            return(success);
        }
Beispiel #3
0
        public bool TestTweak(Tweak tweak, bool fixChanged = false)
        {
            if (!tweak.IsAvailable())
            {
                return(false);
            }

            bool status;

            if (AdminFunc.IsAdministrator() || tweak.usrLevel || !App.client.IsConnected())
            {
                status = TweakEngine.TestTweak(tweak);
            }
            else
            {
                status = App.client.TestTweak(tweak);
            }

            if (tweak.Status != status)
            {
                tweak.Status         = status;
                tweak.LastChangeTime = DateTime.Now;

                Dictionary <string, string> Params = new Dictionary <string, string>();
                Params.Add("Name", tweak.Name);
                Params.Add("Group", tweak.Group);
                Params.Add("Category", tweak.Category);

                if (tweak.Status == false && tweak.State != Tweak.States.Unsellected)
                {
                    if (fixChanged == true && tweak.FixFailed == false)
                    {
                        ApplyTweak(tweak);

                        if (TestTweak(tweak, false) != true)
                        {
                            tweak.FixFailed = true;
                            App.LogError(App.EventIDs.TweakError, Params, App.EventFlags.Notifications, Translate.fmt("msg_tweak_stuck", tweak.Name, tweak.Group));
                        }
                        else
                        {
                            tweak.FixedCount++;
                            App.LogInfo(App.EventIDs.TweakFixed, Params, App.EventFlags.Notifications, Translate.fmt("msg_tweak_fixed", tweak.Name, tweak.Group));
                        }
                    }
                    else
                    {
                        App.LogWarning(App.EventIDs.TweakChanged, Params, App.EventFlags.Notifications, Translate.fmt("msg_tweak_un_done", tweak.Name, tweak.Group));
                    }
                }
            }
            return(status);
        }
Beispiel #4
0
        public TweakControl(Tweak tweak)
        {
            myTweak = tweak;
            myTweak.StatusChanged += OnStatusChanged;

            InitializeComponent();

            OnStatusChanged(null, null);

            string infoStr = "";

            switch (tweak.Type)
            {
            case TweakType.SetRegistry:
            case TweakType.SetGPO:
                infoStr += tweak.Path + "\r\n";
                infoStr += tweak.Name + " = " + tweak.Value + "\r\n";
                break;

            case TweakType.DisableTask:
                infoStr += "Disable Scheduled Task: " + tweak.Path + "\\" + tweak.Name + "\r\n";
                break;

            case TweakType.DisableService:
                infoStr += "Disable Service: " + tweak.Name + "\r\n";
                break;

            case TweakType.BlockFile:
                infoStr += "Dissable Access to: " + tweak.Path + "\r\n";
                break;

            case TweakType.UseFirewall:
                infoStr += "Set Firewal roule" + "\r\n";
                break;

            default:
                infoStr = "Unknown Tweak Type";
                break;
            }

            info.Text = infoStr;

            toggle.Click += new RoutedEventHandler(toggle_Click);

            toggle.Click          += new RoutedEventHandler(rect_Click);
            rect.MouseDown        += new MouseButtonEventHandler(rect_Click);
            label.MouseDown       += new MouseButtonEventHandler(rect_Click);
            info.PreviewMouseDown += new MouseButtonEventHandler(rect_Click);
        }
        static public bool UndoTweak(Tweak tweak)
        {
            switch (tweak.Type)
            {
            case TweakType.SetRegistry:     return(SetRegistryTweak(tweak.Path, tweak.Name, null, tweak.usrLevel));

            case TweakType.SetGPO:          return(SetGPOTweak(tweak.Path, tweak.Name, null, tweak.usrLevel));

            case TweakType.DisableService:  return(DisableService(tweak.Name, true));

            case TweakType.DisableTask:     return(DisableTask(tweak.Path, tweak.Name, true));

            case TweakType.BlockFile:       return(BlockFile(tweak.Path, true));
                //case TweakType.UseFirewall:   return ...
            }
            return(false);
        }
        static public bool TestTweak(Tweak tweak)
        {
            switch (tweak.Type)
            {
            case TweakType.SetRegistry:     return(TestRegistryTweak(tweak.Path, tweak.Name, tweak.Value, tweak.usrLevel));

            case TweakType.SetGPO:          return(TestGPOTweak(tweak.Path, tweak.Name, tweak.Value, tweak.usrLevel));

            case TweakType.DisableService:  return(IsServiceEnabled(tweak.Name) == false);

            case TweakType.DisableTask:     return(IsTaskEnabled(tweak.Path, tweak.Name) == false);

            case TweakType.BlockFile:       return(IsFileBlocked(tweak.Path));
                //case TweakType.UseFirewall:   return ...
            }
            return(false);
        }
Beispiel #7
0
        public bool UndoTweak(Tweak tweak)
        {
            if (!tweak.IsAvailable())
            {
                return(false);
            }

            bool success;

            if (AdminFunc.IsAdministrator() || tweak.usrLevel)
            {
                success = TweakEngine.UndoTweak(tweak);
            }
            else
            {
                success = App.client.UndoTweak(tweak);
            }
            //StatusChanged?.Invoke(this, new EventArgs());
            return(success);
        }
Beispiel #8
0
        public bool TestTweak(Tweak tweak, bool fixChanged = false)
        {
            if (!tweak.IsAvailable())
            {
                return(false);
            }

            bool status;

            if (AdminFunc.IsAdministrator() || tweak.usrLevel || !App.client.IsConnected())
            {
                status = TweakTools.TestTweak(tweak);
            }
            else
            {
                status = App.client.TestTweak(tweak);
            }

            if (tweak.Status != status)
            {
                tweak.Status         = status;
                tweak.LastChangeTime = DateTime.Now;

                if (tweak.Status == false && tweak.State != Tweak.States.Unsellected)
                {
                    Dictionary <string, string> Params = new Dictionary <string, string>();
                    Params.Add("Name", tweak.Name);
                    Params.Add("Group", tweak.Group);
                    Params.Add("Category", tweak.Category);

                    TweakEventArgs.State state = TweakEventArgs.State.eChanged;

                    if (fixChanged == true && tweak.FixFailed == false)
                    {
                        ApplyTweak(tweak);

                        if (TestTweak(tweak, false) != true)
                        {
                            tweak.FixFailed = true;
                            Priv10Logger.LogError(Priv10Logger.EventIDs.TweakError, Params, Priv10Logger.EventFlags.Notifications, Translate.fmt("msg_tweak_stuck", tweak.Name, tweak.Group));
                        }
                        else
                        {
                            state = TweakEventArgs.State.eRestored;
                            tweak.FixedCount++;
                            Priv10Logger.LogInfo(Priv10Logger.EventIDs.TweakFixed, Params, Priv10Logger.EventFlags.Notifications, Translate.fmt("msg_tweak_fixed", tweak.Name, tweak.Group));
                        }
                    }
                    else
                    {
                        Priv10Logger.LogWarning(Priv10Logger.EventIDs.TweakChanged, Params, Priv10Logger.EventFlags.AppLogEntries, Translate.fmt("msg_tweak_un_done", tweak.Name, tweak.Group));
                    }

                    if (state == TweakEventArgs.State.eChanged)
                    {
                        TweakChanged?.Invoke(this, new TweakEventArgs()
                        {
                            tweak = tweak, state = state
                        });
                    }
                }
            }
            return(status);
        }
Beispiel #9
0
        public bool Load(Dictionary <string, TweakStore.Category> Categorys)
        {
            if (!File.Exists(App.dataPath + @"\Tweaks.xml"))
            {
                return(false);
            }

            try
            {
                XmlDocument xDoc = new XmlDocument();
                xDoc.Load(App.dataPath + @"\Tweaks.xml");

                double fileVersion = 0.0;
                double.TryParse(xDoc.DocumentElement.GetAttribute("Version"), out fileVersion);
                if (fileVersion != xmlVersion)
                {
                    if (fileVersion != 0 && fileVersion < xmlVersion)
                    {
                        FileOps.MoveFile(App.dataPath + @"\Tweaks.xml", App.dataPath + @"\Tweaks_old.xml", true);
                        App.LogWarning(App.EventIDs.AppWarning, null, App.EventFlags.Notifications, Translate.fmt("msg_tweaks_updated", App.dataPath + @"\Tweaks_old.xml"));
                    }
                    else
                    {
                        App.LogError("Failed to load tweaklist, unknown file version {0}, expected {1}", fileVersion, xmlVersion);
                    }
                    return(false);
                }

                int TotalCount = 0;
                int ErrorCount = 0;

                foreach (XmlNode node in xDoc.DocumentElement.ChildNodes)
                {
                    TotalCount++;
                    Tweak tweak = new Tweak();
                    if (!tweak.Load(node))
                    {
                        ErrorCount++;
                        continue;
                    }

                    TweakStore.Category tweak_cat;
                    if (!Categorys.TryGetValue(tweak.Category, out tweak_cat))
                    {
                        tweak_cat = new TweakStore.Category(tweak.Category);
                        Categorys.Add(tweak.Category, tweak_cat);
                    }

                    tweak_cat.Add(tweak);
                }

                if (ErrorCount != 0)
                {
                    App.LogError("Failed to load {0} tweak entries out of {1}", ErrorCount, TotalCount);
                }
                App.LogInfo("TweakManager loaded {0} entries", TotalCount - ErrorCount);
            }
            catch (Exception err)
            {
                AppLog.Exception(err);
                return(false);
            }
            return(true);
        }
 public void Add(Tweak tweak)
 {
     tweak.StatusChanged += OnStatusChanged;
     Tweaks.Add(tweak);
 }
Beispiel #11
0
        public TweakGroup(Group group)
        {
            myGroup = group;

            InitializeComponent();

            Dictionary <TweakType, TweakStat> tweaks = new Dictionary <TweakType, TweakStat>();

            foreach (Tweak tweak in group.Tweaks)
            {
                if (!tweak.IsAvailable())
                {
                    continue;
                }

                tweak.StatusChanged += OnStatusChanged;

                TweakStat stat = null;
                if (!tweaks.TryGetValue(tweak.Type, out stat))
                {
                    stat = new TweakStat();
                    tweaks.Add(tweak.Type, stat);
                }

                stat.total++;
                if (tweak.Test())
                {
                    stat.enabled++;
                }
            }

            toggle.Click += new RoutedEventHandler(toggle_Checked);

            int height = 32;

            int i = 0;

            foreach (TweakType type in tweaks.Keys)
            {
                TweakStat stat = tweaks[type];

                ContentControl item;

                /*if (tweaks.Count > 1)
                 * {
                 *  CheckBox check = new CheckBox();
                 *  check.Click += new RoutedEventHandler(rect_Click);
                 *  check.Click += new RoutedEventHandler(check_Checked);
                 *  check.Tag = type;
                 *  item = check;
                 * }
                 * else*/
                {
                    item            = new Label();
                    item.Padding    = new Thickness(17, 0, 0, 0);
                    item.MouseDown += new MouseButtonEventHandler(rect_Click);
                }
                boxes.Add(type, item);

                item.Content = string.Format("{0}", Tweak.GetTypeStr(type));

                item.Height              = 16;
                item.VerticalAlignment   = VerticalAlignment.Top;
                item.HorizontalAlignment = HorizontalAlignment.Left;

                //check.IsEnabled

                checks.Children.Add(item);
                RowDefinition row = new RowDefinition();
                row.Height = new GridLength(item.Height);
                checks.RowDefinitions.Add(row);
                Grid.SetRow(item, i++);
                //Grid.SetColumn(item, 1);

                height += (int)item.Height;
            }

            this.Height = height;

            OnStatusChanged(null, null);

            toggle.Click    += new RoutedEventHandler(rect_Click);
            rect.MouseDown  += new MouseButtonEventHandler(rect_Click);
            label.MouseDown += new MouseButtonEventHandler(rect_Click);
        }
Beispiel #12
0
        /*private void check_Checked(object sender, RoutedEventArgs e)
         * {
         *  TweakType type = (TweakType)(sender as CheckBox).Tag;
         *  bool state = (bool)(sender as CheckBox).IsChecked;
         *
         *  foreach (Tweak tweak in myGroup.Tweaks)
         *  {
         *      if (!tweak.IsAvailable())
         *          continue;
         *
         *      if (tweak.Type != type)
         *          continue;
         *
         *      if (state && (tweak.Sellected == null ? !tweak.Optional : (bool)tweak.Sellected))
         *          tweak.Apply();
         *      else if(!state)
         *          tweak.Undo();
         *  }
         * }*/

        void OnStatusChanged(object sender, EventArgs arg)
        {
            Dictionary <TweakType, TweakStat> stats = new Dictionary <TweakType, TweakStat>();

            int active   = 0;
            int selected = 0;

            foreach (Tweak tweak in myGroup.Tweaks)
            {
                if (!tweak.IsAvailable())
                {
                    continue;
                }

                if (tweak.Test())
                {
                    active++;
                }

                if (tweak.Sellected == null ? !tweak.Optional : (bool)tweak.Sellected)
                {
                    selected++;
                }

                TweakStat stat = null;
                if (!stats.TryGetValue(tweak.Type, out stat))
                {
                    stat = new TweakStat();
                    stats.Add(tweak.Type, stat);
                }

                stat.total++;
                if (tweak.Test())
                {
                    stat.enabled++;
                }
            }
            if (active == 0)
            {
                toggle.IsChecked = false;
            }
            else if (active >= selected)
            {
                toggle.IsChecked = true;
            }
            else
            {
                toggle.IsChecked = null;
            }


            foreach (TweakType type in stats.Keys)
            {
                TweakStat stat = stats[type];

                boxes[type].Content = string.Format("{0} {1}/{2}", Tweak.GetTypeStr(type), stat.enabled, stat.total);

                /*if (stat.enabled == 0)
                 *  boxes[type].IsChecked = false;
                 * else if (stat.enabled == stat.total)
                 *  boxes[type].IsChecked = true;
                 * else
                 *  boxes[type].IsChecked = null;*/
            }
        }