Приобретение права собственности на файл или папку

Прежде чем вырвать остальную часть моих волос, я хотел бы получить некоторую информацию об этом.
Я пытаюсь стать владельцем папки. Конечно, я запускаю программу от имени администратора и у меня есть права на владение, поскольку я могу сменить владельца в проводнике.

Однако я могу сменить владельца, если он принадлежит администратору или моей учетной записи, и я могу изменить разрешения, если у меня уже есть владелец.
Если я попытаюсь присвоить себе файл, скажем, принадлежащий SYSTEM, то получу исключение от несанкционированного доступа.

Я пробовал разные вещи с методами 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);
    }

Я пытаюсь это на Windows 7, кстати.
Что мне здесь не хватает?

2 ответа

У меня была такая же проблема, и я просто писал здесь для всех, кто может прийти сюда в поисках, как я:

Вам нужно явно включить 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);    
}

Вы подняли свой процесс через UAC в первую очередь? В Windows 7 без эскалации UAC ваш процесс выполняется с маркером с более низким уровнем привилегий.

Другие вопросы по тегам