Я пытаюсь изменить разрешения для 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, порядок выполняется правильно.