如何在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
。
+1,或者如果为64位编译太困难,请使用'C:\ WINDOWS \ SysNative'。 – vcsjones
是的,@ vcsjones这是一个选项,但我必须说,我从来没有运气与'C:\ WINDOWS \ SysNative'。 –
唯一让我感到困惑的是,如果文件系统重新导入器正在踢入,它才会存在。如果它始终存在(总是指向System32而不管位数),那将会很好。说到这一点,另一种选择是[暂时禁用文件系统重定向](http://msdn.microsoft.com/en-us/library/windows/desktop/aa365743(v = vs.85).aspx)操作。 – vcsjones