public void Backup(string path, List <DirPath> directorys) { SHA1 sha1 = new SHA1CryptoServiceProvider(); byte[] hashBytes = sha1.ComputeHash(Encoding.UTF8.GetBytes(path)); string hash = BitConverter.ToString(hashBytes).Replace("-", string.Empty).ToLower(); uint index = 0; foreach (DirPath directory in directorys) { if (hash.Equals(directory.hash)) { index++; } } DirPath dirPath = new DirPath(); dirPath.path = path; dirPath.hash = hash; dirPath.index = index; directorys.Add(dirPath); CopyDirectory(path, AppDir + "data" + Path.DirectorySeparatorChar + hash + Path.DirectorySeparatorChar + index); }
public DirProt(bool backup) { log4net.Config.XmlConfigurator.ConfigureAndWatch(new System.IO.FileInfo(AppDir + "log.config")); Logger.Info("Loading config"); Config config = ConfigManager.LoadConfig(AppDir + "config.json"); List <string> users = new List <string>(); foreach (string user in config.ProtectedTaskbar) { try { NTAccount account = new NTAccount(user); SecurityIdentifier securityIdentifier = (SecurityIdentifier)account.Translate(typeof(SecurityIdentifier)); string sid = securityIdentifier.ToString(); string homeDir = Registry.LocalMachine.OpenSubKey( @"SOFTWARE\Microsoft\Windows NT\CurrentVersion\ProfileList\" + sid).GetValue("ProfileImagePath").ToString(); config.ProtectedDir.Add(homeDir + @"\AppData\Roaming\Microsoft\Internet Explorer\Quick Launch\User Pinned\TaskBar"); users.Add(sid); } catch (Exception e) { Console.Error.WriteLine(e); } } DirTable dirTable = ConfigManager.LoadDirTable(AppDir + "data" + Path.DirectorySeparatorChar + "dirtable.json"); List <DirPath> directorys = dirTable.Directorys; if (config.Enabled || backup) { foreach (string iPath in config.ProtectedDir) { Logger.Info("Checking \"" + iPath + "\" backup..."); string path = iPath.ToLower(); bool isBackuped = false; DirPath backupDir = null; foreach (DirPath directory in directorys) { if (path.Equals(directory.path)) { isBackuped = true; backupDir = directory; break; } } if (isBackuped) { Logger.Info("Start restore backup"); DirectoryInfo directoryInfo = new DirectoryInfo(path); if (directoryInfo.Exists) { foreach (FileSystemInfo childInfo in directoryInfo.GetFileSystemInfos()) { try { DeleteReadOnly(childInfo); } catch (Exception e) { Console.WriteLine(e); } } } CopyDirectory(AppDir + Path.DirectorySeparatorChar + "data" + Path.DirectorySeparatorChar + backupDir.hash + Path.DirectorySeparatorChar + backupDir.index, path); Logger.Info("Successfully restore"); } else { Logger.Info("Start backup"); Backup(path, directorys); Logger.Info("Successfully backup"); } } foreach (string user in users) { Logger.Info("Checking " + user + " taskbar backup..."); bool isBackuped = false; RegistryDir reg = null; foreach (RegistryDir registryDir in dirTable.Registries) { if (registryDir.path.Equals(user + @"\Software\Microsoft\Windows\CurrentVersion\Explorer\Taskband")) { isBackuped = true; reg = registryDir; break; } } if (isBackuped) { Logger.Info("Start restore taskbar registry..."); RegistryKey taskband = Registry.Users.OpenSubKey(reg.path, true); while (taskband == null) { Thread.Sleep(5000); taskband = Registry.Users.OpenSubKey(reg.path, true); } foreach (string valueName in taskband.GetValueNames()) { taskband.DeleteValue(valueName); } foreach (RegistryData registryData in reg.RegistryData) { if (registryData.type.Equals(RegistryValueKind.Binary)) { registryData.value = Convert.FromBase64String((string)registryData.value); } taskband.SetValue(registryData.name, registryData.value, registryData.type); } Logger.Info("Successfully restore taskbar"); } else { Logger.Info("Start backup taskbar registry..."); reg = new RegistryDir(); reg.path = user + @"\Software\Microsoft\Windows\CurrentVersion\Explorer\Taskband"; RegistryKey taskband = Registry.Users.OpenSubKey(reg.path); while (taskband == null) { Thread.Sleep(5000); taskband = Registry.Users.OpenSubKey(reg.path); } foreach (string valueName in taskband.GetValueNames()) { RegistryData regData = new RegistryData(); regData.name = valueName; regData.type = taskband.GetValueKind(valueName); regData.value = taskband.GetValue(valueName); reg.RegistryData.Add(regData); } dirTable.Registries.Add(reg); Logger.Info("Successfully backup taskbar"); } } ConfigManager.SaveDirTable(dirTable, AppDir + Path.DirectorySeparatorChar + "data" + Path.DirectorySeparatorChar + "dirtable.json"); if (backup) { MessageBox.Show("Successfully backuped.", "DirProt", MessageBoxButtons.OK, MessageBoxIcon.Information); } } else { Logger.Info("DirProt is disabled."); } Environment.Exit(0); }