Пример #1
0
        private void RunAnalysisButton_Click(object sender, RoutedEventArgs e)
        {
            SetUIMode(false);
            LogScrollViewer.Visibility = Visibility.Hidden;
            SetOutputButtonEnabledStatus(false);
            LogOnlyMatches = Convert.ToBoolean(CheckboxLogOnlyMatches.IsChecked);

            MainApp.Analyzer             = new RegistryAnalyzer(this);
            MainApp.Analyzer.SearchTerms = new List <string>()
            {
                SearchTerm1TextBox.Text, SearchTerm2TextBox.Text, SearchTerm3TextBox.Text
            };
            EntryLogger.main_window = this;

            AnalysisRunLogger.LogNewRun();
            AnalysisRunLogger.UpdateCurrentRunID();

            Console.WriteLine("Collecting registry data");

            List <RegistryKey> keys_to_search = new List <RegistryKey>();

            if (Convert.ToBoolean(CheckboxCurrentUser.IsChecked))
            {
                RegistryKey opened_key = Registry.CurrentUser.OpenSubKey("SOFTWARE", false);
                if (opened_key != null)
                {
                    keys_to_search.Add(opened_key);
                }
            }
            if (Convert.ToBoolean(CheckboxLocalMachine.IsChecked))
            {
                RegistryKey opened_key = Registry.LocalMachine.OpenSubKey("SOFTWARE", false);
                if (opened_key != null)
                {
                    keys_to_search.Add(opened_key);
                }
            }
            if (Convert.ToBoolean(CheckboxRecentApps.IsChecked))
            {
                RegistryKey opened_key = Registry.CurrentUser.OpenSubKey(@"SOFTWARE\Microsoft\Windows\CurrentVersion\Search\RecentApps");
                if (opened_key != null)
                {
                    keys_to_search.Add(opened_key);
                }
                else
                {
                    Console.WriteLine("Recent apps is null.");
                }
            }
            if (Convert.ToBoolean(CheckboxRecentAppsDocs.IsChecked))
            {
                RegistryKey opened_key = Registry.CurrentUser.OpenSubKey(@"SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\ComDlg32");
                if (opened_key != null)
                {
                    keys_to_search.Add(opened_key);
                }
                else
                {
                    Console.WriteLine("Recent apps docs is null.");
                }
            }
            if (Convert.ToBoolean(CheckboxRecentTorrents.IsChecked))
            {
                RegistryKey opened_key = Registry.CurrentUser.OpenSubKey(@"SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\RecentDocs");
                if (opened_key != null)
                {
                    keys_to_search.Add(opened_key);
                }
                else
                {
                    Console.WriteLine("Recent Torrents is null.");
                }
            }

            Thread collection_thread = new Thread(new ThreadStart(() =>
            {
                RegistryDataCollector[] collected_datas = MainApp.Analyzer.CollectRegistryData(keys_to_search);
                MainApp.Analyzer.EntryCollectors        = new List <RegistryDataCollector>(collected_datas);

                List <RegistryEntry> recorded_entries = new List <RegistryEntry>();
                foreach (RegistryDataCollector collector in collected_datas)
                {
                    foreach (RegistryEntry entry in collector.RegistryEntries)
                    {
                        recorded_entries.Add(entry);
                    }
                }

                new Thread(new ThreadStart(() =>
                {
                    if (!LogOnlyMatches)
                    {
                        SetUIMode(false);
                        EntryLogger.LogEntries(recorded_entries);
                        SetUIMode(true);
                        SetOutputButtonEnabledStatus(false);
                    }
                })).Start();


                OnDataCollectionIsFinished();
            }));

            collection_thread.Start();
        }