如何在C#中更改System32内的文件夹的权限?

问题描述:

我需要以编程方式删除“创建文件”和“创建目录”权限在System32目录内的组"NT AUTHORITY\\INTERACTIVE"如何在C#中更改System32内的文件夹的权限?

要做到这一点,我写了下面的代码:

 string windir = Environment.GetEnvironmentVariable("systemroot"); 
     string redirectionFolder = (windir + "\\System32\\Tasks2"); 
     MessageBox.Show(redirectionFolder); 
     FileSystemAccessRule Tasks = new FileSystemAccessRule("NT AUTHORITY\\INTERACTIVE", FileSystemRights.CreateDirectories | FileSystemRights.CreateFiles, AccessControlType.Deny); 
     DirectorySecurity dirSecurity = new DirectorySecurity(redirectionFolder, AccessControlSections.Group); 
     dirSecurity.AddAccessRule(Tasks); 
     Directory.SetAccessControl(redirectionFolder, dirSecurity); 

当我运行一个文件夹C:\Tasks2在这个代码,它的工作原理。

但是,当我运行它在C:\Windows\System32\Tasks2,我得到System.IO.DirectoryNotFoundException例外。以管理员身份运行该应用程序无济于事。

我能做些什么来改变C#中System32目录内目录的权限?

假设C:\Windows\System32\Tasks2确实存在,最可能的解释是您正在被file system redirector发现。您有32位进程,文件系统重定向器将system32转换为SysWOW64。所以,虽然你认为你正在寻找C:\Windows\System32\Tasks2,但你实际上正在寻找C:\Windows\SysWOW64\Tasks2

将程序编译为64位。或使用C:\WINDOWS\SysNative

+0

+1,或者如果为64位编译太困难,请使用'C:\ WINDOWS \ SysNative'。 – vcsjones

+0

是的,@ vcsjones这是一个选项,但我必须说,我从来没有运气与'C:\ WINDOWS \ SysNative'。 –

+0

唯一让我感到困惑的是,如果文件系统重新导入器正在踢入,它才会存在。如果它始终存在(总是指向System32而不管位数),那将会很好。说到这一点,另一种选择是[暂时禁用文件系统重定向](http://msdn.microsoft.com/en-us/library/windows/desktop/aa365743(v = vs.85).aspx)操作。 – vcsjones