1

我正在尝试获取所有权并更改 C# 中文件的 ACL,但即使作为管理员,我也遇到了异常:

System.UnauthorizedAccessException: Attempted to perform an unauthorized operation.

运行程序的用户可以通过 Windows 界面获取所有权和更改权限。

我的代码:

string fileName = @"C:\temp\mount\Windows\System32\Boot\en-US\winload.exe.mui";
FileSecurity fileSec = File.GetAccessControl(fileName);

fileSec.SetOwner(WindowsIdentity.GetCurrent().User); 
File.SetAccessControl(fileName, fileSec); //exception thrown here

我什至添加了一项检查以确保当前用户是管理员组的成员:

WindowsIdentity wi = WindowsIdentity.GetCurrent();
WindowsPrincipal wp = new WindowsPrincipal(wi);

bool isAdmin = wp.IsInRole(WindowsBuiltInRole.Administrator); //returns true

背景信息:我正在创建一个 WinPE 映像,需要替换 winload.exe.mui 文件。

此外,此文件的当前权限仅授予对“受信任的安装程序”的完全访问权限。

我在 Windows 7 上运行

4

2 回答 2

1

我通过takeown使用System.Diagnostics.Process. 然后我能够正确设置访问控制。

奇怪的是,takeown但等效的 .NET 库却没有。

于 2013-08-07T20:29:56.137 回答
0

您仍然可以File.SetAccessControl()在新方法中使用FileStream.SetAccessControl(). 我愿意打赌它也有效。MSDN 实际上推荐这种做法:

“虽然 FileStream 类和 SetAccessControl 可用于现有文件,但请考虑使用 File.SetAccessControl 方法,因为它更易于使用。”

http://msdn.microsoft.com/en-us/library/system.io.filestream.setaccesscontrol.aspx[^]

于 2014-02-02T14:17:48.033 回答