2014-01-15 74 views
0

我需要以編程方式刪除「創建文件」和「創建目錄」權限在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目錄內目錄的權限?

回答

4

假設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