取得文件或文件夹的所有权

Ste*_*son 8 c# windows permissions

在我拔掉剩下的头发之前,我想对此有所了解.
我正在尝试获取文件夹的所有权.我当然是以管理员身份运行程序,因为我可以更改资源管理器中的所有者,所以我有权获得所有权.

但是,如果管理员或我的帐户拥有它,我可以更改所有者,如果我已拥有所有权,我可以更改权限.
如果我试图给自己一个文件的所有权,让我说由SYSTEM拥有,那么我得到一个unauthorizedexception.

我用accesscontrol方法尝试了一些不同的东西,但没有任何效果,我认为这个最新的方法直接来自本书.

        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);
    }
Run Code Online (Sandbox Code Playgroud)

我正在尝试使用Windows 7顺便说一句.
我在这里错过了什么?

Mav*_*rik 10

我有同样的问题,只是在这里张贴给任何可能像我一样来这里搜索的人:

您需要在Luke上面提到的代码中明确启用SeTakeOwnershipPrivilege.我发现这个进程权限对于处理这类事情非常有帮助.

以下是修复我的代码的方法:

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);    
}
Run Code Online (Sandbox Code Playgroud)


小智 1

您是否首先通过 UAC 提升了流程?在 Windows 7 上,如果没有 UAC 升级,您的进程将使用较低特权的令牌运行。