我希望我的应用程序能够拥有文件夹的所有权,更改NTFS权限,执行某些操作,还原NTFS权限和所有者。
我的应用程序作为本地SYSTEM运行。由于我的应用程序没有NTFS权限,因此即使获取ACL也会失败:
PS C:\ Users \ Administrator> Get-ACL D:\ dir2 \ dir3 Get-ACL:访问被拒绝 在第1行:char:1 + Get-ACL D:\ dir2 \ dir3 + ~~~~~~~~~~~~~~~~~~~~ + CategoryInfo:PermissionDenied:(D:\ dir2 \ dir3:String)[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);
}
我读了Taking ownership of a file or folder和take ownership of a file c#,并像这样使用Privilege
:
p = new Privilege(Privilege.TakeOwnership);
p.Enable();
但是事实证明这是一个私有类,我不能直接使用它。 另外,我不能像Taking ownership of a file or folder所示使用第三方软件,例如ProcessPrivileges。
我运行了whoami /priv
,发现SYSTEM用户既没有SeTakeOwnershipPrivilege
也没有SeRestorePrivilege
。
在这一点上,我想了解是否可以赋予本地系统更高的特权,以便我的代码可以工作?