2014-09-19 41 views
1

我感兴趣是在无法更改所有者“管理员”从“系统”注册表项

HKEY_LOCAL_MACHINE \ SOFTWARE \微软\ Windows中的键\ CURRENTVERSION \ SETUP \ PnpLockdownFiles

这些密钥给予系统用户完全访问权限,并且只能读取管理员权限。我登录了管理员帐户。我正在使用2012 R2。

我可以

right click -> Advanced -> Change onwer -> type "Administrator" -> OK -> Apply 

通过注册表编辑器更改所有者下面是我曾尝试在C#中的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); 

也试过的Win32 API:

SetSecurityInfo(getRegistryKeyHandle(key), SE_OBJECT_TYPE.SE_REGISTRY_KEY, SECURITY_INFORMATION.OWNER_SECURITY_INFORMATION, ownerSid, groupSid, dacl, sacl); 
+2

如果您启用了UAC,则需要以管理员身份明确运行该应用程序。看到这个问题,并回答如何要求应用程序与提升的权限运行:http://stackoverflow.com/questions/14800089/forcing-an-application-to-admin-from-config-file – itsme86 2014-09-19 01:32:42

+0

您必须启用SeTakeOwnershipPrivilege为了分配一个对象的所有权。请注意,这只允许您将所有权设置为您自己的帐户或您所属的组。或者,如果启用SeBackupPrivilege和SeRestorePrivilege,则可以将所有权分配给任何人。 (如果您有对该对象的WRITE_OWNER访问权限,您也可以自行指定对象的所有权而无需权限。) – 2014-09-19 03:39:16

+0

在这种情况下,由于您试图将所有权分配给管理员帐户,因此您需要以管理员帐户(不只是任何旧的管理帐户,但该特定帐户)或启用备份和恢复权限。请注意,通常将所有权分配给管理员而不是管理员。 – 2014-09-19 03:43:51

回答

0

感谢@HarryJohnston。你的方法有效。

我第一次启用SeTakeOwnershipPrivilege,然后我可以带着我的代码的所有者。

相关问题