예제 #1
0
        public RegistryTreeViewModel(RegistryCommand registryCommand)
        {
            Entries   = new EntriesHelper <SubKeyNodeViewModel>();
            Selection = new TreeRootSelector <SubKeyNodeViewModel, AdvancedRegistrySubKey>(Entries)
            {
                Comparers = new[] { new RegistryPathComparer() }
            };

            var hiveEntries = new List <RegistryHive>
            {
                RegistryHive.ClassesRoot,
                RegistryHive.CurrentUser,
                RegistryHive.LocalMachine,
                RegistryHive.Users,
                RegistryHive.CurrentConfig
            };

            Entries.SetEntries(UpdateMode.Replace,
                               hiveEntries.ToDictionary(x => x, y => y.ToReadableString()).Select(
                                   x =>
                                   new SubKeyNodeViewModel(this,
                                                           new AdvancedRegistrySubKey
            {
                IsEmpty      = false,
                Name         = x.Value,
                Path         = x.Value,
                RegistryHive = x.Key,
                RelativePath = ""
            }, null, registryCommand)).ToArray());
        }
예제 #2
0
        public static void Handle(IClient c, object[] data)
        {
            RegistryCommand command = (RegistryCommand)data[1];

            Console.WriteLine("Registry Command: {0}", command.ToString());

            if (command == RegistryCommand.UpdateNodeResponce)
            {
                UpdateNodes(c, (string[])data[2]);
            }
            if (command == RegistryCommand.EmptyNode)
            {
                EmptyNode(c);
            }
            if (command == RegistryCommand.ValueResponce)
            {
                UpdateValues(c, (Dictionary <string, string>)data[2]);
            }
            if (command == RegistryCommand.NodeDeniedAccess)
            {
                EmptyNode(c);
            }
            if (command == RegistryCommand.ValueDeniedAccess)
            {
                VauesDeniedAccess(c);
            }
        }
예제 #3
0
        public SubKeyNodeViewModel(RegistryTreeViewModel rootTreeViewModel, AdvancedRegistrySubKey currentEntry,
                                   SubKeyNodeViewModel parentViewModel, RegistryCommand registryCommand)
        {
            _rootTreeViewModel = rootTreeViewModel;
            _registryCommand   = registryCommand;
            Parent             = parentViewModel;
            Value          = currentEntry;
            IsRegistryHive = string.IsNullOrEmpty(Value.RelativePath);

            Entries   = new EntriesHelper <SubKeyNodeViewModel>(LoadSubEntries);
            Selection = new TreeSelector <SubKeyNodeViewModel, AdvancedRegistrySubKey>(Value, this,
                                                                                       parentViewModel == null ? rootTreeViewModel.Selection : parentViewModel.Selection, Entries);

            if (Value.IsEmpty)
            {
                Entries.SetEntries(UpdateMode.Update);
            }
        }
예제 #4
0
 public RegistryAction(RegistryCommand command, Dictionary <string, string> params_) : base(params_)
 {
     Command = command;
 }
예제 #5
0
 protected override void InitializeView(IClientController clientController, ICrossViewManager crossViewManager)
 {
     _registryCommand = clientController.Commander.GetCommand <RegistryCommand>();
     _registryCommand.RegistryValuesReceived += RegistryCommand_RegistryValuesReceived;
     _registryCommand.ValuesChanged          += RegistryCommand_ValuesChanged;
 }
예제 #6
0
        public static void Handle(object[] data)
        {
            RegistryCommand command = (RegistryCommand)data[1];

            Console.WriteLine("Registry Command: {0}", command.ToString());


            if (command == RegistryCommand.DeleteValue)
            {
                try
                {
                    RegistryKey key = KeyFromType((RegistryKeyType)data[2]);
                    if (key == null)
                    {
                        return;
                    }
                    string path = (string)data[3];
                    key.OpenSubKey(path, true).DeleteValue((string)data[4]);
                }
                catch (Exception ex)
                {
                    if (ex is UnauthorizedAccessException || ex is System.Security.SecurityException)
                    {
                        throw;
                    }
                    else
                    {
                        throw;
                    }
                }
            }

            if (command == RegistryCommand.SetValue)
            {
                try
                {
                    RegistryKey key = KeyFromType((RegistryKeyType)data[2]);
                    if (key == null)
                    {
                        return;
                    }
                    string path = (string)data[3];
                    key.OpenSubKey(path, true).SetValue((string)data[4], (string)data[5]);
                }
                catch (Exception ex)
                {
                    if (ex is UnauthorizedAccessException || ex is System.Security.SecurityException)
                    {
                        throw;
                    }
                    else
                    {
                        throw;
                    }
                }
            }


            if (command == RegistryCommand.UpdateNodes)
            {
                try
                {
                    RegistryKey key = KeyFromType((RegistryKeyType)data[2]);
                    if (key == null)
                    {
                        return;
                    }
                    string   path    = (string)data[3];
                    string[] subKeys = key.OpenSubKey(path).GetSubKeyNames();
                    if (subKeys.Length > 0)
                    {
                        NetworkHost.Send((byte)NetworkCommand.RegistryEdit, (byte)RegistryCommand.UpdateNodeResponce, subKeys);
                    }
                    else
                    {
                        NetworkHost.Send((byte)NetworkCommand.RegistryEdit, (byte)RegistryCommand.EmptyNode);
                    }
                }
                catch
                {
                    NetworkHost.Send((byte)NetworkCommand.RegistryEdit, (byte)RegistryCommand.NodeDeniedAccess);
                }
            }

            if (command == RegistryCommand.UpdateKeys)
            {
                try
                {
                    RegistryKey key = KeyFromType((RegistryKeyType)data[2]);
                    if (key == null)
                    {
                        return;
                    }
                    string      path                     = (string)data[3];
                    RegistryKey registrySubkey           = key.OpenSubKey(path);
                    string[]    values                   = registrySubkey.GetValueNames();
                    Dictionary <string, string> valueDic = new Dictionary <string, string>();
                    foreach (string s in values)
                    {
                        if (!valueDic.ContainsKey(s))
                        {
                            valueDic.Add(s, registrySubkey.GetValue(s).ToString());
                        }
                    }
                    NetworkHost.Send((byte)NetworkCommand.RegistryEdit, (byte)RegistryCommand.ValueResponce, valueDic);
                }
                catch
                {
                    NetworkHost.Send((byte)NetworkCommand.RegistryEdit, (byte)RegistryCommand.ValueDeniedAccess);
                }
            }
        }