Я хочу, чтобы мое приложение могло владеть папкой, изменять разрешения 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:Строка) [Get-Acl], UnauthorizedAccessException + FullyQualifiedErrorId: ItemExistsUnauthorizedAccessError, Microsoft.PowerShell.Commands.GetAclCommand
Следующий код 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
.
На этом этапе я хочу понять, могу ли я дать повышенным привилегиям локальной системы, чтобы мой код работал?