Установка разрешений HKLM Regkey с помощью c # на Win 10 1803 - PullRequest
0 голосов
/ 25 ноября 2018

Я пытаюсь изменить разрешения для regkey в HKLM \ SOFTWARE, используя c #.Я хочу сохранить разрешения, которые уже присутствуют на ключе.Вот код, с которым я тестирую (я знаю, что для этого требуются повышенные права):

using Microsoft.Win32;
using System.Security.AccessControl;
using System.Security.Principal;

namespace RegKeyPermissions
{
  class Program
  {
    static void Main(string[] args)
    {
      SecurityIdentifier sident = new SecurityIdentifier(WellKnownSidType.BuiltinUsersSid, null);
      string groupname = sident.Translate(typeof(NTAccount)).Value;

      using (var hklm64 = RegistryKey.OpenBaseKey(RegistryHive.LocalMachine, RegistryView.Registry64))
      {
          using (var testkey = hklm64.CreateSubKey(@"SOFTWARE\Test1\Test2", true))
          {
              var regsec = testkey.GetAccessControl(AccessControlSections.All);
              var sddl1 = regsec.GetSecurityDescriptorSddlForm(AccessControlSections.All);
              var regsecrule = new RegistryAccessRule(sident,
                                                        RegistryRights.FullControl,
                                                        InheritanceFlags.ContainerInherit | InheritanceFlags.ObjectInherit,
                                                        PropagationFlags.None,
                                                        AccessControlType.Allow);
              regsec.AddAccessRule(regsecrule);
              var sddl2 = regsec.GetSecurityDescriptorSddlForm(AccessControlSections.All);
              testkey.SetAccessControl(regsec);
              regsec = testkey.GetAccessControl(AccessControlSections.All);
              var sddl3 = regsec.GetSecurityDescriptorSddlForm(AccessControlSections.All);
          }
      }
    }
  }
}

Проблема в том, что когда я открываю regedit для проверки разрешений, он говорит мне, что правила доступав неправильном порядке.Я попытался посмотреть на sddl, и проблема, кажется, в SetAccessControl.Я не нашел никакой полезной информации в MSDN, что я делаю что-то здесь не так.SetAccessControl должен добавить его в правильном порядке.

Может быть, кто-то здесь обнаружит ошибку?

Поскольку sidenote делает это с помощью некоторого PowerShell, порядок выполняется правильно.

...