【发布时间】:2019-04-09 12:16:00
【问题描述】:
我遇到了一个非常烦人的问题,我花了一段时间才解决它。由于 99% 的互联网都告诉我这是不可能的,而且我在 stackoverflow 上找不到答案,所以我决定在这里发布。
我试图在我的 Windows 机器中更改文件夹/文件的所有权。这不是什么大问题,因为 DirectorySecurtiy 有一个很好的函数:“SetOwner()”。我让它为我的当前帐户工作,但我无法让它为其他人工作。每次我尝试授予其他人所有权时,我都会收到此错误:“安全标识符不允许成为此对象的所有者”。
// Get folder or creates if not exists
DirectoryInfo dInfo = Directory.CreateDirectory(folderPath);
// Get user
IdentityReference user = new NTAccount(username);
// Set owner
DirectorySecurity dSecurity = dInfo.GetAccessControl();
dSecurity.SetOwner(user);
dInfo.SetAccessControl(dSecurity);
因此,如果我想授予自己所有权,但如果我想授予他人所有权,则此代码确实有效。怎么办?
【问题讨论】:
-
您的程序需要在具有足够权限的帐户下运行才能授予所有权。
-
确实如此,它以管理员身份运行
-
如果不显式启用 SeRestorePrivilege,我们只能将所有权分配给当前用户或用户为其所有者的任何用户组(即标记为
SE_GROUP_OWNER)。仅在用户令牌中包含 SeRestorePrivilege 是不够的。这不是系统自动为我们启用的权限之一。 -
这是不真实的,检查答案并使用 uncpath
标签: c# windows permissions