Exemple #1
0
        private void StartScanner(ScannerBase parent)
        {
            if (!string.IsNullOrEmpty(parent.ProcessName))
            {
                if (parent.Skipped)
                {
                    return;
                }

                var ret = RunningMsg.DisplayRunningMsg(parent.Name, parent.ProcessName);

                if (ret.GetValueOrDefault() == false)
                {
                    // Skip plugin
                    if (Dispatcher.Thread != Thread.CurrentThread)
                    {
                        Dispatcher.BeginInvoke(new Action(() => ProgressBar.Value++));
                    }
                    else
                    {
                        ProgressBar.Value++;
                    }

                    parent.Skipped = true;

                    return;
                }
            }

            ScannerBase.CancellationToken = new CancellationTokenSource();

            var scanTask = new Task(parent.Scan, _cancellationTokenSource.Token);

            scanTask.RunSynchronously();

            ScannerBase.CancellationToken.Dispose();
            ScannerBase.CancellationToken = null;
        }
        /// <summary>
        ///     Parses the .xml file and performs the actions specified
        /// </summary>
        /// <param name="name">Scanner name</param>
        /// <param name="pluginFile">Path to .xml file</param>
        public void ScanPlugin(string name, string pluginFile)
        {
            if (!File.Exists(pluginFile))
            {
                return;
            }

            var pluginFunctions = new PluginFunctions();

            try
            {
                using (var xmlReader = XmlReader.Create(pluginFile))
                {
                    while (xmlReader.ReadToFollowing("IsRunning"))
                    {
                        if (CancellationToken.IsCancellationRequested)
                        {
                            return;
                        }

                        var procName = xmlReader.ReadElementContentAsString();

                        if (RunningMsg.DisplayRunningMsg(name, procName).GetValueOrDefault() == false)
                        {
                            return;
                        }
                    }
                }

                using (var xmlReader = XmlReader.Create(pluginFile))
                {
                    if (xmlReader.ReadToFollowing("Action"))
                    {
                        while (xmlReader.Read())
                        {
                            if (CancellationToken.IsCancellationRequested)
                            {
                                return;
                            }

                            if (xmlReader.NodeType != XmlNodeType.Element)
                            {
                                continue;
                            }

                            if (xmlReader.Name == "DeleteKey")
                            {
                                var regPath = xmlReader.ReadElementContentAsString();
                                var regKey  = Utils.RegOpenKey(regPath);
                                var recurse = xmlReader.GetAttribute("Recursive") == "Y";

                                pluginFunctions.DeleteKey(regKey, recurse);
                            }

                            if (xmlReader.Name == "DeleteValue")
                            {
                                var regPath        = xmlReader.GetAttribute("RegKey");
                                var valueNameRegEx = xmlReader.GetAttribute("ValueName");

                                var regKey = Utils.RegOpenKey(regPath, false);

                                pluginFunctions.DeleteValue(regKey, valueNameRegEx);
                            }

                            if (xmlReader.Name == "DeleteFile")
                            {
                                var filePath = MiscFunctions.ExpandVars(xmlReader.ReadElementContentAsString());

                                pluginFunctions.DeleteFile(filePath);
                            }

                            if (xmlReader.Name == "DeleteFolder")
                            {
                                var folderPath = MiscFunctions.ExpandVars(xmlReader.ReadElementContentAsString());
                                var recurse    = xmlReader.GetAttribute("Recursive") == "Y";

                                pluginFunctions.DeleteFolder(folderPath, recurse);
                            }

                            if (xmlReader.Name == "DeleteFileList")
                            {
                                var searchPath        = MiscFunctions.ExpandVars(xmlReader.GetAttribute("Path"));
                                var searchText        = xmlReader.GetAttribute("SearchText");
                                var includeSubFolders = xmlReader.GetAttribute("IncludeSubFolders") == "Y"
                                    ? SearchOption.AllDirectories
                                    : SearchOption.TopDirectoryOnly;

                                pluginFunctions.DeleteFileList(searchPath, searchText, includeSubFolders);
                            }

                            if (xmlReader.Name == "DeleteFolderList")
                            {
                                var searchPath        = MiscFunctions.ExpandVars(xmlReader.GetAttribute("Path"));
                                var searchText        = xmlReader.GetAttribute("SearchText");
                                var includeSubFolders = xmlReader.GetAttribute("IncludeSubFolders") == "Y"
                                    ? SearchOption.AllDirectories
                                    : SearchOption.TopDirectoryOnly;

                                pluginFunctions.DeleteFolderList(searchPath, searchText, includeSubFolders);
                            }

                            if (xmlReader.Name == "FindRegKey")
                            {
                                var regKey         = xmlReader.GetAttribute("RegKey");
                                var includeSubKeys = xmlReader.GetAttribute("IncludeSubKeys") == "Y";

                                var rk          = Utils.RegOpenKey(regKey, false);
                                var xmlChildren = xmlReader.ReadSubtree();

                                pluginFunctions.DeleteFoundRegKeys(rk, includeSubKeys, xmlChildren);
                            }

                            if (xmlReader.Name == "FindPath")
                            {
                                var searchPath        = MiscFunctions.ExpandVars(xmlReader.GetAttribute("Path"));
                                var searchText        = xmlReader.GetAttribute("SearchText");
                                var includeSubFolders = xmlReader.GetAttribute("IncludeSubFolders") == "Y"
                                    ? SearchOption.AllDirectories
                                    : SearchOption.TopDirectoryOnly;

                                var xmlChildren = xmlReader.ReadSubtree();

                                pluginFunctions.DeleteFoundPaths(searchPath, searchText, includeSubFolders, xmlChildren);
                            }

                            if (xmlReader.Name == "RemoveINIValue")
                            {
                                var filePath     = MiscFunctions.ExpandVars(xmlReader.GetAttribute("Path"));
                                var sectionRegEx = xmlReader.GetAttribute("Section");
                                var valueRegEx   = xmlReader.GetAttribute("Name");

                                pluginFunctions.DeleteIniValue(filePath, sectionRegEx, valueRegEx);
                            }

                            if (xmlReader.Name == "RemoveINISection")
                            {
                                var filePath     = MiscFunctions.ExpandVars(xmlReader.GetAttribute("Path"));
                                var sectionRegEx = xmlReader.GetAttribute("Section");

                                pluginFunctions.DeleteIniSection(filePath, sectionRegEx);
                            }

                            if (xmlReader.Name == "RemoveXML")
                            {
                                var filePath = MiscFunctions.ExpandVars(xmlReader.GetAttribute("Path"));
                                var xPath    = xmlReader.GetAttribute("XPath");

                                pluginFunctions.DeleteXml(filePath, xPath);
                            }
                        }
                    }
                }
            }
            catch (SecurityException ex)
            {
                Debug.WriteLine("The following error occurred: {0}\nUnable to load plugin file ({1})", ex.Message,
                                pluginFile);
            }
            catch (UriFormatException ex)
            {
                Debug.WriteLine("The following error occurred: {0}\nUnable to load plugin file ({1})", ex.Message,
                                pluginFile);
            }

            if (pluginFunctions.RegistrySubKeys.Count > 0)
            {
                Wizard.StoreBadRegKeySubKeys(name, pluginFunctions.RegistrySubKeys);
            }

            if (pluginFunctions.RegistryValueNames.Count > 0)
            {
                Wizard.StoreBadRegKeyValueNames(name, pluginFunctions.RegistryValueNames);
            }

            if (pluginFunctions.FilePaths.Count > 0)
            {
                Wizard.StoreBadFileList(name, pluginFunctions.FilePaths.ToArray());
            }

            if (pluginFunctions.Folders.Count > 0)
            {
                Wizard.StoreBadFolderList(name, pluginFunctions.Folders);
            }

            if (pluginFunctions.IniList.Count > 0)
            {
                Wizard.StoreIniKeys(name, pluginFunctions.IniList.ToArray());
            }

            if (pluginFunctions.XmlPaths.Count > 0)
            {
                Wizard.StoreXml(name, pluginFunctions.XmlPaths);
            }
        }