Стать владельцем папки, когда приложение работает как локальная система
Я хочу, чтобы мое приложение могло владеть папкой, изменять разрешения NTFS, что-то делать, восстанавливать разрешения NTFS и владельца.
Мое приложение работает как локальная СИСТЕМА. Так как мое приложение не имеет разрешений NTFS, даже получение ACL не выполняется:
PS C: \ Users \ Администратор> Get-ACL D:\dir2\dir3 Get-ACL: доступ запрещен В строке:1 символ:1 + Get-ACL D:\dir2\dir3 + ~~~~~~~~~~~~~~~~~~~~ + CategoryInfo: PermissionDenied: (D:\dir2\dir3:String) [Get-Acl], UnauthorizedAccessException + FullyQualifiedErrorId: ItemExistsUnauthorizedAccessError,Microsoft.PowerShell.Commands.GetAclC
Следующий код C# приводит к несанкционированному исключению:
DirectorySecurity directorySecurity = directoryInfo.GetAccessControl();
IdentityReference currentOwner = directorySecurity.GetOwner(typeof(SecurityIdentifier));
IdentityReference systemUser = WindowsIdentity.GetCurrent().User;
haveToTakeOwnership = (currentOwner.Value != systemUser.Value);
if (haveToTakeOwnership) {
directorySecurity.SetOwner(WindowsIdentity.GetCurrent().User);
Directory.SetAccessControl(fileShare.Path, directorySecurity);
}
Я прочитал, как стать владельцем файла или папки, и стал владельцем файла C# и использовал Privilege
как это:
p = new Privilege(Privilege.TakeOwnership);
p.Enable();
Но оказывается, что это закрытый класс, и я не могу использовать его напрямую. Кроме того, я не могу использовать сторонние программы, такие как ProcessPrivileges, как показано в разделе "Получение права собственности на файл или папку".
Я побежал whoami /priv
и понял, что пользователь SYSTEM также не имеет SeTakeOwnershipPrivilege
не может это SeRestorePrivilege
,
На этом этапе я хочу понять, могу ли я дать повышенным привилегиям локальной системы, чтобы мой код работал?