Terraria v1.4.4.9
Terraria source code documentation
Loading...
Searching...
No Matches
FileSystemAclExtensions.cs
Go to the documentation of this file.
4
5namespace System.IO;
6
7public static class FileSystemAclExtensions
8{
9 public static DirectorySecurity GetAccessControl(this DirectoryInfo directoryInfo)
10 {
11 if (directoryInfo == null)
12 {
13 throw new ArgumentNullException("directoryInfo");
14 }
15 return new DirectorySecurity(directoryInfo.FullName, AccessControlSections.Access | AccessControlSections.Owner | AccessControlSections.Group);
16 }
17
18 public static DirectorySecurity GetAccessControl(this DirectoryInfo directoryInfo, AccessControlSections includeSections)
19 {
20 if (directoryInfo == null)
21 {
22 throw new ArgumentNullException("directoryInfo");
23 }
24 return new DirectorySecurity(directoryInfo.FullName, includeSections);
25 }
26
27 public static void SetAccessControl(this DirectoryInfo directoryInfo, DirectorySecurity directorySecurity)
28 {
29 if (directorySecurity == null)
30 {
31 throw new ArgumentNullException("directorySecurity");
32 }
33 string fullPath = Path.GetFullPath(directoryInfo.FullName);
34 directorySecurity.Persist(fullPath);
35 }
36
37 public static FileSecurity GetAccessControl(this FileInfo fileInfo)
38 {
39 if (fileInfo == null)
40 {
41 throw new ArgumentNullException("fileInfo");
42 }
43 return fileInfo.GetAccessControl(AccessControlSections.Access | AccessControlSections.Owner | AccessControlSections.Group);
44 }
45
46 public static FileSecurity GetAccessControl(this FileInfo fileInfo, AccessControlSections includeSections)
47 {
48 if (fileInfo == null)
49 {
50 throw new ArgumentNullException("fileInfo");
51 }
52 return new FileSecurity(fileInfo.FullName, includeSections);
53 }
54
55 public static void SetAccessControl(this FileInfo fileInfo, FileSecurity fileSecurity)
56 {
57 if (fileInfo == null)
58 {
59 throw new ArgumentNullException("fileInfo");
60 }
61 if (fileSecurity == null)
62 {
63 throw new ArgumentNullException("fileSecurity");
64 }
65 string fullPath = Path.GetFullPath(fileInfo.FullName);
66 fileSecurity.Persist(fullPath);
67 }
68
69 public static FileSecurity GetAccessControl(this FileStream fileStream)
70 {
71 if (fileStream == null)
72 {
73 throw new ArgumentNullException("fileStream");
74 }
75 SafeFileHandle safeFileHandle = fileStream.SafeFileHandle;
76 if (safeFileHandle.IsClosed)
77 {
79 }
80 return new FileSecurity(safeFileHandle, AccessControlSections.Access | AccessControlSections.Owner | AccessControlSections.Group);
81 }
82
83 public static void SetAccessControl(this FileStream fileStream, FileSecurity fileSecurity)
84 {
85 if (fileStream == null)
86 {
87 throw new ArgumentNullException("fileStream");
88 }
89 if (fileSecurity == null)
90 {
91 throw new ArgumentNullException("fileSecurity");
92 }
93 SafeFileHandle safeFileHandle = fileStream.SafeFileHandle;
94 if (safeFileHandle.IsClosed)
95 {
97 }
98 fileSecurity.Persist(safeFileHandle, fileStream.Name);
99 }
100
101 public static void Create(this DirectoryInfo directoryInfo, DirectorySecurity directorySecurity)
102 {
103 if (directoryInfo == null)
104 {
105 throw new ArgumentNullException("directoryInfo");
106 }
107 if (directorySecurity == null)
108 {
109 throw new ArgumentNullException("directorySecurity");
110 }
112 }
113
114 public static FileStream Create(this FileInfo fileInfo, FileMode mode, FileSystemRights rights, FileShare share, int bufferSize, FileOptions options, FileSecurity fileSecurity)
115 {
116 if (fileInfo == null)
117 {
118 throw new ArgumentNullException("fileInfo");
119 }
120 if (fileSecurity == null)
121 {
122 throw new ArgumentNullException("fileSecurity");
123 }
124 FileShare fileShare = share & ~FileShare.Inheritable;
125 if (mode < FileMode.CreateNew || mode > FileMode.Append)
126 {
128 }
129 if ((fileShare < FileShare.None) || fileShare > (FileShare.ReadWrite | FileShare.Delete))
130 {
132 }
133 if (bufferSize <= 0)
134 {
136 }
137 if ((rights & FileSystemRights.Write) == 0 && (mode == FileMode.Truncate || mode == FileMode.CreateNew || mode == FileMode.Create || mode == FileMode.Append))
138 {
140 }
141 SafeFileHandle safeFileHandle = CreateFileHandle(fileInfo.FullName, mode, rights, share, options, fileSecurity);
142 try
143 {
144 return new FileStream(safeFileHandle, GetFileStreamFileAccess(rights), bufferSize, (options & FileOptions.Asynchronous) != 0);
145 }
146 catch
147 {
148 safeFileHandle.Dispose();
149 throw;
150 }
151 }
152
153 public static DirectoryInfo CreateDirectory(this DirectorySecurity directorySecurity, string path)
154 {
155 if (directorySecurity == null)
156 {
157 throw new ArgumentNullException("directorySecurity");
158 }
159 if (path == null)
160 {
161 throw new ArgumentNullException("path");
162 }
163 if (path.Length == 0)
164 {
166 }
167 DirectoryInfo directoryInfo = new DirectoryInfo(path);
168 directoryInfo.Create(directorySecurity);
169 return directoryInfo;
170 }
171
173 {
174 FileAccess fileAccess = (FileAccess)0;
175 if ((rights & FileSystemRights.ReadData) != 0 || ((uint)rights & 0x80000000u) != 0)
176 {
177 fileAccess = FileAccess.Read;
178 }
179 if ((rights & FileSystemRights.WriteData) != 0 || (rights & (FileSystemRights)1073741824) != 0)
180 {
181 fileAccess = ((fileAccess == FileAccess.Read) ? FileAccess.ReadWrite : FileAccess.Write);
182 }
183 return fileAccess;
184 }
185
186 private unsafe static SafeFileHandle CreateFileHandle(string fullPath, FileMode mode, FileSystemRights rights, FileShare share, FileOptions options, FileSecurity security)
187 {
188 if (mode == FileMode.Append)
189 {
190 mode = FileMode.OpenOrCreate;
191 }
192 int dwFlagsAndAttributes = (int)(options | (FileOptions)1048576 | FileOptions.None);
193 SafeFileHandle safeFileHandle;
194 fixed (byte* ptr = security.GetSecurityDescriptorBinaryForm())
195 {
196 global::Interop.Kernel32.SECURITY_ATTRIBUTES sECURITY_ATTRIBUTES = default(global::Interop.Kernel32.SECURITY_ATTRIBUTES);
197 sECURITY_ATTRIBUTES.nLength = (uint)sizeof(global::Interop.Kernel32.SECURITY_ATTRIBUTES);
198 sECURITY_ATTRIBUTES.bInheritHandle = (((share & FileShare.Inheritable) != 0) ? global::Interop.BOOL.TRUE : global::Interop.BOOL.FALSE);
199 sECURITY_ATTRIBUTES.lpSecurityDescriptor = (IntPtr)ptr;
200 global::Interop.Kernel32.SECURITY_ATTRIBUTES sECURITY_ATTRIBUTES2 = sECURITY_ATTRIBUTES;
202 {
203 safeFileHandle = global::Interop.Kernel32.CreateFile(fullPath, (int)rights, share, &sECURITY_ATTRIBUTES2, mode, dwFlagsAndAttributes, IntPtr.Zero);
204 ValidateFileHandle(safeFileHandle, fullPath);
205 }
206 }
207 return safeFileHandle;
208 }
209
210 private static void ValidateFileHandle(SafeFileHandle handle, string fullPath)
211 {
212 if (handle.IsInvalid)
213 {
214 int num = Marshal.GetLastWin32Error();
215 if (num == 3 && fullPath.Length == Path.GetPathRoot(fullPath).Length)
216 {
217 num = 5;
218 }
219 throw System.IO.Win32Marshal.GetExceptionForWin32Error(num, fullPath);
220 }
221 }
222}
static unsafe SafeFileHandle CreateFile(string fullPath, FileMode mode, FileAccess access, FileShare share, FileOptions options)
virtual SafeFileHandle SafeFileHandle
Definition FileStream.cs:21
virtual string Name
Definition FileStream.cs:23
static FileStream Create(this FileInfo fileInfo, FileMode mode, FileSystemRights rights, FileShare share, int bufferSize, FileOptions options, FileSecurity fileSecurity)
static FileSecurity GetAccessControl(this FileInfo fileInfo)
static DirectorySecurity GetAccessControl(this DirectoryInfo directoryInfo)
static void Create(this DirectoryInfo directoryInfo, DirectorySecurity directorySecurity)
static DirectorySecurity GetAccessControl(this DirectoryInfo directoryInfo, AccessControlSections includeSections)
static DirectoryInfo CreateDirectory(this DirectorySecurity directorySecurity, string path)
static void SetAccessControl(this DirectoryInfo directoryInfo, DirectorySecurity directorySecurity)
static unsafe SafeFileHandle CreateFileHandle(string fullPath, FileMode mode, FileSystemRights rights, FileShare share, FileOptions options, FileSecurity security)
static FileSecurity GetAccessControl(this FileStream fileStream)
static FileSecurity GetAccessControl(this FileInfo fileInfo, AccessControlSections includeSections)
static FileAccess GetFileStreamFileAccess(FileSystemRights rights)
static void ValidateFileHandle(SafeFileHandle handle, string fullPath)
static void SetAccessControl(this FileInfo fileInfo, FileSecurity fileSecurity)
static void SetAccessControl(this FileStream fileStream, FileSecurity fileSecurity)
static unsafe void CreateDirectory(string fullPath, byte[] securityDescriptor=null)
Definition FileSystem.cs:91
static string GetFullPath(string path)
Definition Path.cs:881
static ? string GetPathRoot(string? path)
Definition Path.cs:1008
static Exception GetExceptionForWin32Error(int errorCode, string path="")
static string Argument_InvalidFileModeAndFileSystemRightsCombo
Definition SR.cs:58
static string ArgumentOutOfRange_NeedPosNum
Definition SR.cs:20
static string ArgumentOutOfRange_Enum
Definition SR.cs:18
static string Format(string resourceFormat, object p1)
Definition SR.cs:118
static string Arg_PathEmpty
Definition SR.cs:54
static string ObjectDisposed_FileClosed
Definition SR.cs:28
Definition SR.cs:7
static System.IO.DisableMediaInsertionPrompt Create()
static readonly IntPtr Zero
Definition IntPtr.cs:18