设置NTFS文件访问权限
生活随笔
收集整理的這篇文章主要介紹了
设置NTFS文件访问权限
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
給你一個我自己收集整理的類:
例:
| 1 2 3 4 5 6 7 8 9 10 11 12 13 | using?System.Security.AccessControl; ?? ?? string?strPath?=?"d:\temp"; if?(!Directory.Exists(strPath)) { ????Directory.CreateDirectory(strPath); } //?重新設置目錄訪問權限 NTFSHelper.RemoveDirectoryAccountSecurityAll(strPath); NTFSHelper.AddDirectorySecurity(strPath,?"SYSTEM",?FileSystemRights.FullControl); NTFSHelper.AddDirectorySecurity(strPath,?"Administrators",?FileSystemRights.FullControl); |
NTFSHelper.cs
| 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 | using?System; using?System.IO; using?System.Text; using?System.Collections.Generic; using?System.Security.AccessControl; ?? namespace?NTFS { ????public?sealed?class?NTFSHelper ????{ ????????#region?目錄權限 ?? ????????#region?添加權限 ????????///?<summary> ????????///?添加?指定目錄?指定用戶?指定的?權限 ????????///?</summary> ????????///?<param?name="FileName">指定目錄</param> ????????///?<param?name="Account">用戶帳戶</param> ????????///?<param?name="UserRights">權限【RCFW】</param> ????????public?static?void?AddDirectorySecurity(string?FileName,?string?Account,?string?UserRights) ????????{ ????????????FileSystemRights?Rights?=?new?FileSystemRights(); ?? ????????????if?(UserRights.IndexOf("R")?>=?0) ????????????{ ????????????????Rights?=?Rights?|?FileSystemRights.Read; ????????????} ????????????if?(UserRights.IndexOf("C")?>=?0) ????????????{ ????????????????Rights?=?Rights?|?FileSystemRights.ChangePermissions; ????????????} ????????????if?(UserRights.IndexOf("F")?>=?0) ????????????{ ????????????????Rights?=?Rights?|?FileSystemRights.FullControl; ????????????} ????????????if?(UserRights.IndexOf("W")?>=?0) ????????????{ ????????????????Rights?=?Rights?|?FileSystemRights.Write; ????????????} ?? ????????????bool?ok; ????????????DirectoryInfo?dInfo?=?new?DirectoryInfo(FileName); ????????????DirectorySecurity?dSecurity?=?dInfo.GetAccessControl(); ????????????InheritanceFlags?iFlags?=?new?InheritanceFlags(); ????????????iFlags?=?InheritanceFlags.ContainerInherit?|?InheritanceFlags.ObjectInherit; ????????????FileSystemAccessRule?AccessRule2?=?new?FileSystemAccessRule(Account,?Rights,?iFlags,?PropagationFlags.None,?AccessControlType.Allow); ????????????dSecurity.ModifyAccessRule(AccessControlModification.Add,?AccessRule2,?out?ok); ????????????dInfo.SetAccessControl(dSecurity); ????????} ????????///?<summary> ????????///?添加?指定目錄?指定用戶?指定的?權限 ????????///?</summary> ????????///?<param?name="FileName">指定目錄</param> ????????///?<param?name="Account">用戶帳戶</param> ????????///?<param?name="Rights">Windows目錄權限</param> ????????public?static?void?AddDirectorySecurity(string?FileName,?string?Account,?FileSystemRights?Rights) ????????{ ????????????bool?ok; ????????????DirectoryInfo?dInfo?=?new?DirectoryInfo(FileName); ????????????DirectorySecurity?dSecurity?=?dInfo.GetAccessControl(); ????????????InheritanceFlags?iFlags?=?new?InheritanceFlags(); ????????????iFlags?=?InheritanceFlags.ContainerInherit?|?InheritanceFlags.ObjectInherit; ????????????FileSystemAccessRule?AccessRule2?=?new?FileSystemAccessRule(Account,?Rights,?iFlags,?PropagationFlags.None,?AccessControlType.Allow); ????????????dSecurity.ModifyAccessRule(AccessControlModification.Add,?AccessRule2,?out?ok); ????????????dInfo.SetAccessControl(dSecurity); ????????} ????????#endregion ?? ????????#region?獲取目錄權限 ????????///?<summary> ????????///?獲取?指定目錄?除Administrators和SYSTEM之外的?權限列表 ????????///?</summary> ????????///?<param?name="DirName"></param> ????????///?<returns></returns> ????????public?static?List<string>?GetDirectoryAccountSecurity(string?DirName) ????????{ ????????????List<string>?dAccount?=?new?List<string>(); ????????????DirectoryInfo?dInfo?=?new?DirectoryInfo(DirName); ????????????if?(dInfo.Exists) ????????????{ ????????????????DirectorySecurity?sec?=?Directory.GetAccessControl(DirName,?AccessControlSections.All); ????????????????foreach?(FileSystemAccessRule?rule?in?sec.GetAccessRules(true,?true,?typeof(System.Security.Principal.NTAccount))) ????????????????{ ????????????????????if?(rule.IdentityReference.Value?!=?@"NT?AUTHORITY\SYSTEM"?&&?rule.IdentityReference.Value?!=?@"BUILTIN\Administrators") ????????????????????????dAccount.Add(rule.IdentityReference.Value); ????????????????} ????????????} ????????????return?dAccount; ????????} ????????///?<summary> ????????///?獲取?指定目錄?所有權限列表 ????????///?</summary> ????????///?<param?name="DirName"></param> ????????///?<returns></returns> ????????public?static?List<string>?GetDirectoryAccountSecurityAll(string?DirName) ????????{ ????????????List<string>?dAccount?=?new?List<string>(); ????????????DirectoryInfo?dInfo?=?new?DirectoryInfo(DirName); ????????????if?(dInfo.Exists) ????????????{ ????????????????DirectorySecurity?sec?=?Directory.GetAccessControl(DirName,?AccessControlSections.All); ????????????????foreach?(FileSystemAccessRule?rule?in?sec.GetAccessRules(true,?true,?typeof(System.Security.Principal.NTAccount))) ????????????????{ ????????????????????dAccount.Add(rule.IdentityReference.Value); ????????????????} ????????????} ????????????return?dAccount; ????????} ?? ?? ????????#endregion ?? ????????#region?移除目錄權限 ????????///?<summary> ????????///?移除?指定目錄?指定用戶的?權限 ????????///?</summary> ????????///?<param?name="DirName"></param> ????????///?<param?name="Account"></param> ????????public?static?void?RemoveDirectoryAccountSecurity(string?DirName,?string?Account) ????????{ ????????????DirectoryInfo?dInfo?=?new?DirectoryInfo(DirName); ????????????if?(dInfo.Exists) ????????????{ ????????????????System.Security.Principal.NTAccount?myAccount?=?new?System.Security.Principal.NTAccount(System.Environment.MachineName,?Account); ?? ????????????????DirectorySecurity?dSecurity?=?dInfo.GetAccessControl(); ?? ????????????????FileSystemAccessRule?AccessRule?=?new?FileSystemAccessRule(Account,?FileSystemRights.FullControl,?AccessControlType.Allow); ????????????????FileSystemAccessRule?AccessRule2?=?new?FileSystemAccessRule(Account,?FileSystemRights.FullControl,?AccessControlType.Deny); ?? ????????????????InheritanceFlags?iFlags?=?InheritanceFlags.ContainerInherit?|?InheritanceFlags.ObjectInherit; ????????????????PropagationFlags?pFlags?=?PropagationFlags.InheritOnly?|?PropagationFlags.NoPropagateInherit; ?? ????????????????dSecurity.AccessRuleFactory(myAccount,?983551,?false,?iFlags,?pFlags,?AccessControlType.Allow); ?? ????????????????dSecurity.RemoveAccessRuleAll(AccessRule); ????????????????dSecurity.RemoveAccessRuleAll(AccessRule2); ?? ?? ?? ????????????????dInfo.SetAccessControl(dSecurity); ????????????} ????????} ?? ????????///?<summary> ????????///?移除?指定目錄?所有權限 ????????///?</summary> ????????///?<param?name="DirName"></param> ????????public?static?void?RemoveDirectoryAccountSecurityAll(string?DirName) ????????{ ????????????RemoveDirectoryAccountSecurityProtection(DirName); ????????????List<string>?dAccount?=?GetDirectoryAccountSecurityAll(DirName); ????????????foreach?(string?account?in?dAccount) ????????????{ ????????????????RemoveDirectoryAccountSecurity(DirName,?account); ????????????} ????????} ?? ????????///?<summary> ????????///?移除?指定目錄?所有繼承的權限 ????????///?</summary> ????????///?<param?name="DirName"></param> ????????public?static?void?RemoveDirectoryAccountSecurityProtection(string?DirName) ????????{ ????????????DirectoryInfo?dInfo?=?new?DirectoryInfo(DirName); ????????????if?(dInfo.Exists) ????????????{ ????????????????DirectorySecurity?dSecurity?=?dInfo.GetAccessControl(); ????????????????dSecurity.SetAccessRuleProtection(true,?false); ????????????????dSecurity.SetAuditRuleProtection(true,?false); ?? ????????????????dInfo.SetAccessControl(dSecurity); ????????????} ????????} ?? ????????#endregion ?? ????????#endregion ?? ????????#region?文件權限 ????????///?<summary> ????????///?獲取?指定文件?除Administrators和SYSTEM之外的?權限列表 ????????///?</summary> ????????///?<param?name="fileName"></param> ????????///?<returns></returns> ????????public?static?List<string>?GetFileAccountSecurity(string?fileName) ????????{ ????????????List<string>?fAccount?=?new?List<string>(); ????????????FileInfo?fInfo?=?new?FileInfo(fileName); ????????????if?(fInfo.Exists) ????????????{ ????????????????FileSecurity?fec?=?File.GetAccessControl(fileName,?AccessControlSections.All); ????????????????foreach?(FileSystemAccessRule?rule?in?fec.GetAccessRules(true,?true,?typeof(System.Security.Principal.NTAccount))) ????????????????{ ????????????????????if?(rule.IdentityReference.Value?!=?@"NT?AUTHORITY\SYSTEM"?&&?rule.IdentityReference.Value?!=?@"BUILTIN\Administrators") ????????????????????????fAccount.Add(rule.IdentityReference.Value); ????????????????} ????????????} ????????????return?fAccount; ????????} ?? ????????///?<summary> ????????///?移除?指定文件?指定用戶的?權限 ????????///?</summary> ????????///?<param?name="fileName"></param> ????????///?<param?name="Account"></param> ????????public?static?void?RemoveFileAccountSecurity(string?fileName,?string?Account) ????????{ ?? ????????????FileInfo?fInfo?=?new?FileInfo(fileName); ????????????if?(fInfo.Exists) ????????????{ ????????????????FileSecurity?fSecurity?=?fInfo.GetAccessControl(); ????????????????FileSystemAccessRule?AccessRule?=?new?FileSystemAccessRule(Account,?FileSystemRights.FullControl,?AccessControlType.Allow); ????????????????FileSystemAccessRule?AccessRule2?=?new?FileSystemAccessRule(Account,?FileSystemRights.FullControl,?AccessControlType.Deny); ????????????????fSecurity.RemoveAccessRuleAll(AccessRule); ????????????????fSecurity.RemoveAccessRuleAll(AccessRule2); ????????????????fInfo.SetAccessControl(fSecurity); ????????????} ????????} ?? ????????#endregion ????} } |
轉載于:https://www.cnblogs.com/cyes/archive/2013/05/23/3095611.html
總結
以上是生活随笔為你收集整理的设置NTFS文件访问权限的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 图片压缩质量并保存指定尺寸
- 下一篇: 围住浮动元素(消除浮动)的三种方法