Ключи, которые меня интересуют,
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Setup\PnpLockdownFiles
Эти ключи предоставляют полный доступ к системному пользователю и только читают доступ к администратору. Я зарегистрирован в учетной записи администратора. Я использую 2012 R2.
Я могу изменить владельца через regedit
right click -> Advanced -> Change onwer -> type "Administrator" -> OK -> Apply
Вот API в С#, который я попробовал. Оба отказались, поскольку доступ запрещен
key = Registry.LocalMachine.OpenSubKey(test, RegistryKeyPermissionCheck.ReadSubTree, RegistryRights.TakeOwnership);
RegistrySecurity rs = new RegistrySecurity();
rs.SetOwner(new NTAccount("Administrator"));// Set the securitys owner to be Administrator
key.SetAccessControl(rs);
Также были проверены API-интерфейсы win32:
SetSecurityInfo(getRegistryKeyHandle(key), SE_OBJECT_TYPE.SE_REGISTRY_KEY, SECURITY_INFORMATION.OWNER_SECURITY_INFORMATION, ownerSid, groupSid, dacl, sacl);
Благодаря @HarryJohnston. Ваш метод работает.
Я сначала включаю SeTakeOwnershipPrivilege, тогда я могу взять владельца с моим кодом.