Я изменяю разрешение реестра из службы 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);