c# - 获得文件或文件夹的所有权

标签 c# windows permissions

在我拔掉剩下的头发之前,我想听听一些关于这方面的意见。
我正在尝试取得一个文件夹的所有权。我当然以管理员身份运行该程序,并且我确实有权获得所有权,因为我可以在资源管理器中更改所有者。

但是,如果管理员或我的帐户拥有它,我可以更改所有者,如果我已经拥有所有权,我可以更改权限。
如果我试图给自己一个文件的所有权,比如说属于 SYSTEM,那么我会得到一个未经授权的异常。

我已经用访问控制方法尝试了一些不同的东西,但没有任何效果,我认为这个最新的方法直接来自书本。

        private static void makePerm(string file, NTAccount account)
    {
        FileInfo finfo = new FileInfo(file);
        FileSecurity fsecurity = finfo.GetAccessControl();
        //also tried it like this //fsecurity.ResetAccessRule(new FileSystemAccessRule(string.Format(@"{0}\{1}", Environment.UserDomainName.ToString(), Environment.UserDomainName.ToString()), FileSystemRights.FullControl, AccessControlType.Allow));
        fsecurity.SetOwner(account);
        finfo.SetAccessControl(fsecurity);
    }

顺便说一下,我正在 Windows 7 上尝试这个。
我在这里缺少什么?

最佳答案

我遇到了同样的问题,只是在这里发布给可能像我一样来这里搜索的其他人:

您需要在代码中显式启用 SeTakeOwnershipPrivilege,正如 Luke 上面提到的那样。我找到了这个 Process Privileges对处理这类事情很有帮助。

这是它修复我的代码的方法:

using System;
using System.Diagnostics;

// ...
using (new ProcessPrivileges.PrivilegeEnabler(Process.GetCurrentProcess(), Privilege.TakeOwnership))
{
    directoryInfo = new DirectoryInfo(path);
    directorySecurity = directoryInfo.GetAccessControl();

    directorySecurity.SetOwner(WindowsIdentity.GetCurrent().User);
    Directory.SetAccessControl(path, directorySecurity);    
}

关于c# - 获得文件或文件夹的所有权,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5368825/

相关文章:

c# - 单元测试中模拟是否需要接口(interface)?

C++ 模板化生产者-消费者 BlockingQueue,无界缓冲区 : How do I end elegantly?

windows - 为什么进程不能在 32 位系统中寻址 4GB 内存?

python - 如何以编程方式在脚本中实现 super 用户权限?

c# - 使用正则表达式删除属性。只是属性值包含特殊字符 "<"

c# - 在 Windows Phone silvelight 应用程序中使用 BigInteger 需要什么 namespace ?

c# - 从 C# 调用 C++/CLI 代码

windows - 如何使用 Delphi 检查字符串是否是有效的 Windows 文件夹名称?

permissions - 在 Windows 中写入错误日志的最佳位置在哪里?

python - Django 组和权限