Изменение разрешений реестра для Windows с помощью C # .NET - PullRequest
0 голосов
/ 25 апреля 2019

Я изменяю разрешение реестра из службы Windows, в основном я пытаюсь сделать это

  • Предоставить доступ на чтение для аутентифицированных пользователей.
  • Запретить запись каждому.
  • Разрешить полный доступ к системной учетной записи и администраторам.

Это мой код. Пожалуйста, просмотрите и дайте мне знать, если мне нужно что-то изменить, я написал пример приложения и вручную проверил разрешение реестра. Затем в следующий раз, когда я запускаю свое приложение, у него нет доступа к разделу реестра, даже к праву чтения, которое я дал аутентифицированным пользователям.

            RegistryKey regKey = Registry.LocalMachine.OpenSubKey(@"SOFTWARE\MyCompany\Somekey",RegistryKeyPermissionCheck.ReadWriteSubTree);

                    RegistryAccessRule rule1 = new RegistryAccessRule(
                                            new SecurityIdentifier(WellKnownSidType.AuthenticatedUserSid, null),
                                            RegistryRights.ReadKey,
                                            InheritanceFlags.ContainerInherit | InheritanceFlags.ObjectInherit,
                                            PropagationFlags.None,
                                            AccessControlType.Allow);

                    RegistryAccessRule rule2 = new RegistryAccessRule(
                                               new SecurityIdentifier(WellKnownSidType.WorldSid, null),
                                               RegistryRights.WriteKey,
                                               InheritanceFlags.ContainerInherit | InheritanceFlags.ObjectInherit,
                                               PropagationFlags.None,
                                               AccessControlType.Deny);

                    RegistryAccessRule rule3 = new RegistryAccessRule(
                                               new SecurityIdentifier(WellKnownSidType.BuiltinAdministratorsSid, null),
                                               RegistryRights.FullControl,
                                               InheritanceFlags.ContainerInherit | InheritanceFlags.ObjectInherit,
                                               PropagationFlags.None,
                                               AccessControlType.Allow);


                    RegistryAccessRule rule4 = new RegistryAccessRule(
                                               new SecurityIdentifier(WellKnownSidType.LocalSystemSid, null),
                                               RegistryRights.FullControl,
                                               InheritanceFlags.ContainerInherit | InheritanceFlags.ObjectInherit,
                                               PropagationFlags.None,
                                               AccessControlType.Allow);


                    RegistrySecurity registrySecurity = regKey.GetAccessControl();

                    registrySecurity.AddAccessRule(rule1);
                    registrySecurity.AddAccessRule(rule2);
                    registrySecurity.AddAccessRule(rule3);
                    registrySecurity.AddAccessRule(rule4);
                    regKey.SetAccessControl(registrySecurity);
...