public NtStatus GetFileSecurityProxy(string rawFileName, ref SECURITY_INFORMATION rawRequestedInformation, IntPtr rawSecurityDescriptor, uint rawSecurityDescriptorLength, ref uint rawSecurityDescriptorLengthNeeded, DokanFileInfo rawFileInfo) { FileSystemSecurity sec; var sect = AccessControlSections.None; if (rawRequestedInformation.HasFlag(SECURITY_INFORMATION.OWNER_SECURITY_INFORMATION)) { sect |= AccessControlSections.Owner; } if (rawRequestedInformation.HasFlag(SECURITY_INFORMATION.GROUP_SECURITY_INFORMATION)) { sect |= AccessControlSections.Group; } if (rawRequestedInformation.HasFlag(SECURITY_INFORMATION.DACL_SECURITY_INFORMATION) || rawRequestedInformation.HasFlag(SECURITY_INFORMATION.PROTECTED_DACL_SECURITY_INFORMATION) || rawRequestedInformation.HasFlag(SECURITY_INFORMATION.UNPROTECTED_DACL_SECURITY_INFORMATION)) { sect |= AccessControlSections.Access; } if (rawRequestedInformation.HasFlag(SECURITY_INFORMATION.SACL_SECURITY_INFORMATION) || rawRequestedInformation.HasFlag(SECURITY_INFORMATION.PROTECTED_SACL_SECURITY_INFORMATION) || rawRequestedInformation.HasFlag(SECURITY_INFORMATION.UNPROTECTED_SACL_SECURITY_INFORMATION)) { sect |= AccessControlSections.Audit; } try { this.logger.Debug("GetFileSecurityProxy : {0}", rawFileName); this.logger.Debug("\tFileSystemSecurity\t{0}", sect); this.logger.Debug("\tContext\t{0}", this.ToTrace(rawFileInfo)); NtStatus result = operations.GetFileSecurity(rawFileName, out sec, sect, rawFileInfo); if (result == DokanResult.Success /*&& sec != null*/) { Debug.Assert(sec != null); this.logger.Debug("\tFileSystemSecurity Result : {0}", sec); var buffer = sec.GetSecurityDescriptorBinaryForm(); rawSecurityDescriptorLengthNeeded = (uint)buffer.Length; if (buffer.Length > rawSecurityDescriptorLength) { return(DokanResult.BufferOverflow); } Marshal.Copy(buffer, 0, rawSecurityDescriptor, buffer.Length); } this.logger.Debug("GetFileSecurityProxy : {0} Return : {1}", rawFileName, result); return(result); } catch (Exception ex) { this.logger.Error("GetFileSecurityProxy : {0} Throw : {1}", rawFileName, ex.Message); return(DokanResult.InvalidParameter); } }
public int GetFileSecurityProxy(string rawFileName, ref SECURITY_INFORMATION rawRequestedInformation, IntPtr rawSecurityDescriptor, uint rawSecurityDescriptorLength, ref uint rawSecurityDescriptorLengthNeeded, DokanFileInfo rawFileInfo) { FileSystemSecurity sec; var sect = AccessControlSections.None; if (rawRequestedInformation.HasFlag(SECURITY_INFORMATION.OWNER_SECURITY_INFORMATION)) { sect |= AccessControlSections.Owner; } if (rawRequestedInformation.HasFlag(SECURITY_INFORMATION.GROUP_SECURITY_INFORMATION)) { sect |= AccessControlSections.Group; } if (rawRequestedInformation.HasFlag(SECURITY_INFORMATION.DACL_SECURITY_INFORMATION) || rawRequestedInformation.HasFlag(SECURITY_INFORMATION.PROTECTED_DACL_SECURITY_INFORMATION) || rawRequestedInformation.HasFlag(SECURITY_INFORMATION.UNPROTECTED_DACL_SECURITY_INFORMATION)) { sect |= AccessControlSections.Access; } if (rawRequestedInformation.HasFlag(SECURITY_INFORMATION.SACL_SECURITY_INFORMATION) || rawRequestedInformation.HasFlag(SECURITY_INFORMATION.PROTECTED_SACL_SECURITY_INFORMATION) || rawRequestedInformation.HasFlag(SECURITY_INFORMATION.UNPROTECTED_SACL_SECURITY_INFORMATION)) { sect |= AccessControlSections.Audit; } try { int ret = (int)_operations.GetFileSecurity(rawFileName, out sec, sect, rawFileInfo); if (ret == ERROR_SUCCESS /*&& sec != null*/) { Debug.Assert(sec != null); var buffer = sec.GetSecurityDescriptorBinaryForm(); rawSecurityDescriptorLengthNeeded = (uint)buffer.Length; if (buffer.Length > rawSecurityDescriptorLength) { return(ERROR_INSUFFICIENT_BUFFER); } Marshal.Copy(buffer, 0, rawSecurityDescriptor, buffer.Length); } return(ret); } catch { #if DEBUGDOKAN Log("UnmountProxy: {0}\n", rawFileName); //throw; #endif return(ERROR_INVALID_FUNCTION); } }
public NtStatus SetFileSecurityProxy(string rawFileName, ref SECURITY_INFORMATION rawSecurityInformation, IntPtr rawSecurityDescriptor, uint rawSecurityDescriptorLength, DokanFileInfo rawFileInfo) { var sect = AccessControlSections.None; if (rawSecurityInformation.HasFlag(SECURITY_INFORMATION.OWNER_SECURITY_INFORMATION)) { sect |= AccessControlSections.Owner; } if (rawSecurityInformation.HasFlag(SECURITY_INFORMATION.GROUP_SECURITY_INFORMATION)) { sect |= AccessControlSections.Group; } if (rawSecurityInformation.HasFlag(SECURITY_INFORMATION.DACL_SECURITY_INFORMATION) || rawSecurityInformation.HasFlag(SECURITY_INFORMATION.PROTECTED_DACL_SECURITY_INFORMATION) || rawSecurityInformation.HasFlag(SECURITY_INFORMATION.UNPROTECTED_DACL_SECURITY_INFORMATION)) { sect |= AccessControlSections.Access; } if (rawSecurityInformation.HasFlag(SECURITY_INFORMATION.SACL_SECURITY_INFORMATION) || rawSecurityInformation.HasFlag(SECURITY_INFORMATION.PROTECTED_SACL_SECURITY_INFORMATION) || rawSecurityInformation.HasFlag(SECURITY_INFORMATION.UNPROTECTED_SACL_SECURITY_INFORMATION)) { sect |= AccessControlSections.Audit; } var buffer = new byte[rawSecurityDescriptorLength]; try { Marshal.Copy(rawSecurityDescriptor, buffer, 0, (int)rawSecurityDescriptorLength); var sec = rawFileInfo.IsDirectory ? (FileSystemSecurity) new DirectorySecurity() : new FileSecurity(); sec.SetSecurityDescriptorBinaryForm(buffer); Trace("\nSetFileSecurityProxy : " + rawFileName); Trace("\tAccessControlSections\t" + sect); Trace("\tFileSystemSecurity\t" + sec); Trace("\tContext\t" + ToTrace(rawFileInfo)); NtStatus result = operations.SetFileSecurity(rawFileName, sec, sect, rawFileInfo); Trace("SetFileSecurityProxy : " + rawFileName + " Return : " + result); return(result); } #pragma warning disable 0168 catch (Exception ex) #pragma warning restore 0168 { Trace("SetFileSecurityProxy : " + rawFileName + " Throw : " + ex.Message); return(DokanResult.InvalidParameter); } }
public NtStatus SetFileSecurityProxy(string rawFileName, ref SECURITY_INFORMATION rawSecurityInformation, IntPtr rawSecurityDescriptor, uint rawSecurityDescriptorLength, DokanFileInfo rawFileInfo) { var sect = AccessControlSections.None; if (rawSecurityInformation.HasFlag(SECURITY_INFORMATION.OWNER_SECURITY_INFORMATION)) { sect |= AccessControlSections.Owner; } if (rawSecurityInformation.HasFlag(SECURITY_INFORMATION.GROUP_SECURITY_INFORMATION)) { sect |= AccessControlSections.Group; } if (rawSecurityInformation.HasFlag(SECURITY_INFORMATION.DACL_SECURITY_INFORMATION) || rawSecurityInformation.HasFlag(SECURITY_INFORMATION.PROTECTED_DACL_SECURITY_INFORMATION) || rawSecurityInformation.HasFlag(SECURITY_INFORMATION.UNPROTECTED_DACL_SECURITY_INFORMATION)) { sect |= AccessControlSections.Access; } if (rawSecurityInformation.HasFlag(SECURITY_INFORMATION.SACL_SECURITY_INFORMATION) || rawSecurityInformation.HasFlag(SECURITY_INFORMATION.PROTECTED_SACL_SECURITY_INFORMATION) || rawSecurityInformation.HasFlag(SECURITY_INFORMATION.UNPROTECTED_SACL_SECURITY_INFORMATION)) { sect |= AccessControlSections.Audit; } var buffer = new byte[rawSecurityDescriptorLength]; try { Marshal.Copy(rawSecurityDescriptor, buffer, 0, (int)rawSecurityDescriptorLength); var sec = rawFileInfo.IsDirectory ? (FileSystemSecurity) new DirectorySecurity() : new FileSecurity(); sec.SetSecurityDescriptorBinaryForm(buffer); logger.Debug("SetFileSecurityProxy : {0}", rawFileName); logger.Debug("\tAccessControlSections\t{0}", sect); logger.Debug("\tFileSystemSecurity\t{0}", sec); logger.Debug("\tContext\t{0}", rawFileInfo); var result = operations.SetFileSecurity(rawFileName, sec, sect, rawFileInfo); logger.Debug("SetFileSecurityProxy : {0} Return : {1}", rawFileName, result); return(result); } catch (Exception ex) { logger.Error("SetFileSecurityProxy : {0} Throw : {1}", rawFileName, ex.Message); return(DokanResult.InvalidParameter); } }
//// internal NtStatus GetFileSecurityProxy(string rawFileName, ref SECURITY_INFORMATION rawRequestedInformation, IntPtr rawSecurityDescriptor, uint rawSecurityDescriptorLength, ref uint rawSecurityDescriptorLengthNeeded, DokanFileInfo rawFileInfo) { FileSystemSecurity sec; var sect = AccessControlSections.None; if (rawRequestedInformation.HasFlag(SECURITY_INFORMATION.OWNER_SECURITY_INFORMATION)) { sect |= AccessControlSections.Owner; } if (rawRequestedInformation.HasFlag(SECURITY_INFORMATION.GROUP_SECURITY_INFORMATION)) { sect |= AccessControlSections.Group; } if (rawRequestedInformation.HasFlag(SECURITY_INFORMATION.DACL_SECURITY_INFORMATION) || rawRequestedInformation.HasFlag(SECURITY_INFORMATION.PROTECTED_DACL_SECURITY_INFORMATION) || rawRequestedInformation.HasFlag(SECURITY_INFORMATION.UNPROTECTED_DACL_SECURITY_INFORMATION)) { sect |= AccessControlSections.Access; } if (rawRequestedInformation.HasFlag(SECURITY_INFORMATION.SACL_SECURITY_INFORMATION) || rawRequestedInformation.HasFlag(SECURITY_INFORMATION.PROTECTED_SACL_SECURITY_INFORMATION) || rawRequestedInformation.HasFlag(SECURITY_INFORMATION.UNPROTECTED_SACL_SECURITY_INFORMATION)) { sect |= AccessControlSections.Audit; } try { NtStatus result = _operations.GetFileSecurity(rawFileName, out sec, sect, rawFileInfo); if (result == DokanResult.Success && sec != null) { var buffer = sec.GetSecurityDescriptorBinaryForm(); rawSecurityDescriptorLengthNeeded = (uint)buffer.Length; if (buffer.Length > rawSecurityDescriptorLength) { return(DokanResult.BufferOverflow); } Marshal.Copy(buffer, 0, rawSecurityDescriptor, buffer.Length); } return(result); } catch (Exception ex) { ServiceRegistration.Get <ILogger>().Warn("Dokan exception: ", ex); return(DokanResult.InvalidParameter); } }
public int SetFileSecurityProxy( string rawFileName, ref SECURITY_INFORMATION rawSecurityInformation, IntPtr rawSecurityDescriptor, uint rawSecurityDescriptorLength, DokanFileInfo rawFileInfo) { var sect = AccessControlSections.None; if (rawSecurityInformation.HasFlag(SECURITY_INFORMATION.OWNER_SECURITY_INFORMATION)) { sect |= AccessControlSections.Owner; } if (rawSecurityInformation.HasFlag(SECURITY_INFORMATION.GROUP_SECURITY_INFORMATION)) { sect |= AccessControlSections.Group; } if (rawSecurityInformation.HasFlag(SECURITY_INFORMATION.DACL_SECURITY_INFORMATION) || rawSecurityInformation.HasFlag(SECURITY_INFORMATION.PROTECTED_DACL_SECURITY_INFORMATION) || rawSecurityInformation.HasFlag(SECURITY_INFORMATION.UNPROTECTED_DACL_SECURITY_INFORMATION)) { sect |= AccessControlSections.Access; } if (rawSecurityInformation.HasFlag(SECURITY_INFORMATION.SACL_SECURITY_INFORMATION) || rawSecurityInformation.HasFlag(SECURITY_INFORMATION.PROTECTED_SACL_SECURITY_INFORMATION) || rawSecurityInformation.HasFlag(SECURITY_INFORMATION.UNPROTECTED_SACL_SECURITY_INFORMATION)) { sect |= AccessControlSections.Audit; } var buffer = new byte[rawSecurityDescriptorLength]; try { Marshal.Copy(rawSecurityDescriptor, buffer, 0, (int)rawSecurityDescriptorLength); var sec = rawFileInfo.IsDirectory ? (FileSystemSecurity) new DirectorySecurity() : new FileSecurity(); sec.SetSecurityDescriptorBinaryForm(buffer); return((int)_operations.SetFileSecurity(rawFileName, sec, sect, rawFileInfo)); } catch { #if DEBUGDOKAN Log("SetFileSecurityProxy: {0}\n", rawFileName); //throw; #endif return(ERROR_INVALID_FUNCTION); } }
//// internal NtStatus SetFileSecurityProxy(string rawFileName, ref SECURITY_INFORMATION rawSecurityInformation, IntPtr rawSecurityDescriptor, uint rawSecurityDescriptorLength, DokanFileInfo rawFileInfo) { var sect = AccessControlSections.None; if (rawSecurityInformation.HasFlag(SECURITY_INFORMATION.OWNER_SECURITY_INFORMATION)) { sect |= AccessControlSections.Owner; } if (rawSecurityInformation.HasFlag(SECURITY_INFORMATION.GROUP_SECURITY_INFORMATION)) { sect |= AccessControlSections.Group; } if (rawSecurityInformation.HasFlag(SECURITY_INFORMATION.DACL_SECURITY_INFORMATION) || rawSecurityInformation.HasFlag(SECURITY_INFORMATION.PROTECTED_DACL_SECURITY_INFORMATION) || rawSecurityInformation.HasFlag(SECURITY_INFORMATION.UNPROTECTED_DACL_SECURITY_INFORMATION)) { sect |= AccessControlSections.Access; } if (rawSecurityInformation.HasFlag(SECURITY_INFORMATION.SACL_SECURITY_INFORMATION) || rawSecurityInformation.HasFlag(SECURITY_INFORMATION.PROTECTED_SACL_SECURITY_INFORMATION) || rawSecurityInformation.HasFlag(SECURITY_INFORMATION.UNPROTECTED_SACL_SECURITY_INFORMATION)) { sect |= AccessControlSections.Audit; } var buffer = new byte[rawSecurityDescriptorLength]; try { Marshal.Copy(rawSecurityDescriptor, buffer, 0, (int)rawSecurityDescriptorLength); var sec = rawFileInfo.IsDirectory ? (FileSystemSecurity) new DirectorySecurity() : new FileSecurity(); sec.SetSecurityDescriptorBinaryForm(buffer); NtStatus result = _operations.SetFileSecurity(rawFileName, sec, sect, rawFileInfo); return(result); } catch (Exception ex) { ServiceRegistration.Get <ILogger>().Warn("Dokan exception: ", ex); return(DokanResult.InvalidParameter); } }
public int SetFileSecurityProxy( string rawFileName, ref SECURITY_INFORMATION rawSecurityInformation, IntPtr rawSecurityDescriptor, uint rawSecurityDescriptorLength, DokanFileInfo rawFileInfo) { var sect = AccessControlSections.None; if (rawSecurityInformation.HasFlag(SECURITY_INFORMATION.OWNER_SECURITY_INFORMATION)) { sect |= AccessControlSections.Owner; } if (rawSecurityInformation.HasFlag(SECURITY_INFORMATION.GROUP_SECURITY_INFORMATION)) { sect |= AccessControlSections.Group; } if (rawSecurityInformation.HasFlag(SECURITY_INFORMATION.DACL_SECURITY_INFORMATION) || rawSecurityInformation.HasFlag(SECURITY_INFORMATION.PROTECTED_DACL_SECURITY_INFORMATION) || rawSecurityInformation.HasFlag(SECURITY_INFORMATION.UNPROTECTED_DACL_SECURITY_INFORMATION)) { sect |= AccessControlSections.Access; } if (rawSecurityInformation.HasFlag(SECURITY_INFORMATION.SACL_SECURITY_INFORMATION) || rawSecurityInformation.HasFlag(SECURITY_INFORMATION.PROTECTED_SACL_SECURITY_INFORMATION) || rawSecurityInformation.HasFlag(SECURITY_INFORMATION.UNPROTECTED_SACL_SECURITY_INFORMATION)) { sect |= AccessControlSections.Audit; } var buffer = new byte[rawSecurityDescriptorLength]; try { Marshal.Copy(rawSecurityDescriptor, buffer, 0, (int)rawSecurityDescriptorLength); var sec = rawFileInfo.IsDirectory ? (FileSystemSecurity)new DirectorySecurity() : new FileSecurity(); sec.SetSecurityDescriptorBinaryForm(buffer); return (int)_operations.SetFileSecurity(rawFileName, sec, sect, rawFileInfo); } catch { #if DEBUG throw; #else return ERROR_INVALID_FUNCTION; #endif } }
public int GetFileSecurityProxy(string rawFileName, ref SECURITY_INFORMATION rawRequestedInformation, IntPtr rawSecurityDescriptor, uint rawSecurityDescriptorLength, ref uint rawSecurityDescriptorLengthNeeded, DokanFileInfo rawFileInfo) { FileSystemSecurity sec; var sect = AccessControlSections.None; if (rawRequestedInformation.HasFlag(SECURITY_INFORMATION.OWNER_SECURITY_INFORMATION)) { sect |= AccessControlSections.Owner; } if (rawRequestedInformation.HasFlag(SECURITY_INFORMATION.GROUP_SECURITY_INFORMATION)) { sect |= AccessControlSections.Group; } if (rawRequestedInformation.HasFlag(SECURITY_INFORMATION.DACL_SECURITY_INFORMATION) || rawRequestedInformation.HasFlag(SECURITY_INFORMATION.PROTECTED_DACL_SECURITY_INFORMATION) || rawRequestedInformation.HasFlag(SECURITY_INFORMATION.UNPROTECTED_DACL_SECURITY_INFORMATION)) { sect |= AccessControlSections.Access; } if (rawRequestedInformation.HasFlag(SECURITY_INFORMATION.SACL_SECURITY_INFORMATION) || rawRequestedInformation.HasFlag(SECURITY_INFORMATION.PROTECTED_SACL_SECURITY_INFORMATION) || rawRequestedInformation.HasFlag(SECURITY_INFORMATION.UNPROTECTED_SACL_SECURITY_INFORMATION)) { sect |= AccessControlSections.Audit; } try { int ret = (int)_operations.GetFileSecurity(rawFileName, out sec, sect, rawFileInfo); if (ret == ERROR_SUCCESS /*&& sec != null*/) { Debug.Assert(sec != null); var buffer = sec.GetSecurityDescriptorBinaryForm(); rawSecurityDescriptorLengthNeeded = (uint)buffer.Length; if (buffer.Length > rawSecurityDescriptorLength) { return ERROR_INSUFFICIENT_BUFFER; } Marshal.Copy(buffer, 0, rawSecurityDescriptor, buffer.Length); } return ret; } catch { #if DEBUG throw; #else return ERROR_INVALID_FUNCTION; #endif } }
public NtStatus SetFileSecurityProxy(string rawFileName, ref SECURITY_INFORMATION rawSecurityInformation, IntPtr rawSecurityDescriptor, uint rawSecurityDescriptorLength, DokanFileInfo rawFileInfo) { var sect = AccessControlSections.None; if (rawSecurityInformation.HasFlag(SECURITY_INFORMATION.OWNER_SECURITY_INFORMATION)) { sect |= AccessControlSections.Owner; } if (rawSecurityInformation.HasFlag(SECURITY_INFORMATION.GROUP_SECURITY_INFORMATION)) { sect |= AccessControlSections.Group; } if (rawSecurityInformation.HasFlag(SECURITY_INFORMATION.DACL_SECURITY_INFORMATION) || rawSecurityInformation.HasFlag(SECURITY_INFORMATION.PROTECTED_DACL_SECURITY_INFORMATION) || rawSecurityInformation.HasFlag(SECURITY_INFORMATION.UNPROTECTED_DACL_SECURITY_INFORMATION)) { sect |= AccessControlSections.Access; } if (rawSecurityInformation.HasFlag(SECURITY_INFORMATION.SACL_SECURITY_INFORMATION) || rawSecurityInformation.HasFlag(SECURITY_INFORMATION.PROTECTED_SACL_SECURITY_INFORMATION) || rawSecurityInformation.HasFlag(SECURITY_INFORMATION.UNPROTECTED_SACL_SECURITY_INFORMATION)) { sect |= AccessControlSections.Audit; } var buffer = new byte[rawSecurityDescriptorLength]; try { Marshal.Copy(rawSecurityDescriptor, buffer, 0, (int)rawSecurityDescriptorLength); var sec = rawFileInfo.IsDirectory ? (FileSystemSecurity)new DirectorySecurity() : new FileSecurity(); sec.SetSecurityDescriptorBinaryForm(buffer); Trace("\nSetFileSecurityProxy : " + rawFileName); Trace("\tAccessControlSections\t" + sect); Trace("\tFileSystemSecurity\t" + sec); Trace("\tContext\t" + ToTrace(rawFileInfo)); NtStatus result = operations.SetFileSecurity(rawFileName, sec, sect, rawFileInfo); Trace("SetFileSecurityProxy : " + rawFileName + " Return : " + result); return result; } #pragma warning disable 0168 catch (Exception ex) #pragma warning restore 0168 { Trace("SetFileSecurityProxy : " + rawFileName + " Throw : " + ex.Message); return DokanResult.InvalidParameter; } }
public NtStatus GetFileSecurityProxy(string rawFileName, ref SECURITY_INFORMATION rawRequestedInformation, IntPtr rawSecurityDescriptor, uint rawSecurityDescriptorLength, ref uint rawSecurityDescriptorLengthNeeded, DokanFileInfo rawFileInfo) { FileSystemSecurity sec; var sect = AccessControlSections.None; if (rawRequestedInformation.HasFlag(SECURITY_INFORMATION.OWNER_SECURITY_INFORMATION)) { sect |= AccessControlSections.Owner; } if (rawRequestedInformation.HasFlag(SECURITY_INFORMATION.GROUP_SECURITY_INFORMATION)) { sect |= AccessControlSections.Group; } if (rawRequestedInformation.HasFlag(SECURITY_INFORMATION.DACL_SECURITY_INFORMATION) || rawRequestedInformation.HasFlag(SECURITY_INFORMATION.PROTECTED_DACL_SECURITY_INFORMATION) || rawRequestedInformation.HasFlag(SECURITY_INFORMATION.UNPROTECTED_DACL_SECURITY_INFORMATION)) { sect |= AccessControlSections.Access; } if (rawRequestedInformation.HasFlag(SECURITY_INFORMATION.SACL_SECURITY_INFORMATION) || rawRequestedInformation.HasFlag(SECURITY_INFORMATION.PROTECTED_SACL_SECURITY_INFORMATION) || rawRequestedInformation.HasFlag(SECURITY_INFORMATION.UNPROTECTED_SACL_SECURITY_INFORMATION)) { sect |= AccessControlSections.Audit; } try { Trace("\nGetFileSecurityProxy : " + rawFileName); Trace("\tFileSystemSecurity\t" + sect); Trace("\tContext\t" + ToTrace(rawFileInfo)); NtStatus result = operations.GetFileSecurity(rawFileName, out sec, sect, rawFileInfo); if (result == DokanResult.Success /*&& sec != null*/) { Debug.Assert(sec != null); Trace("\tFileSystemSecurity Result : " + sec); var buffer = sec.GetSecurityDescriptorBinaryForm(); rawSecurityDescriptorLengthNeeded = (uint)buffer.Length; if (buffer.Length > rawSecurityDescriptorLength) return DokanResult.BufferOverflow; Marshal.Copy(buffer, 0, rawSecurityDescriptor, buffer.Length); } Trace("GetFileSecurityProxy : " + rawFileName + " Return : " + result); return result; } #pragma warning disable 0168 catch (Exception ex) #pragma warning restore 0168 { Trace("GetFileSecurityProxy : " + rawFileName + " Throw : " + ex.Message); return DokanResult.InvalidParameter; } }
public NtStatus SetFileSecurityProxy(string rawFileName, ref SECURITY_INFORMATION rawSecurityInformation, IntPtr rawSecurityDescriptor, uint rawSecurityDescriptorLength, DokanFileInfo rawFileInfo) { var sect = AccessControlSections.None; if (rawSecurityInformation.HasFlag(SECURITY_INFORMATION.OWNER_SECURITY_INFORMATION)) { sect |= AccessControlSections.Owner; } if (rawSecurityInformation.HasFlag(SECURITY_INFORMATION.GROUP_SECURITY_INFORMATION)) { sect |= AccessControlSections.Group; } if (rawSecurityInformation.HasFlag(SECURITY_INFORMATION.DACL_SECURITY_INFORMATION) || rawSecurityInformation.HasFlag(SECURITY_INFORMATION.PROTECTED_DACL_SECURITY_INFORMATION) || rawSecurityInformation.HasFlag(SECURITY_INFORMATION.UNPROTECTED_DACL_SECURITY_INFORMATION)) { sect |= AccessControlSections.Access; } if (rawSecurityInformation.HasFlag(SECURITY_INFORMATION.SACL_SECURITY_INFORMATION) || rawSecurityInformation.HasFlag(SECURITY_INFORMATION.PROTECTED_SACL_SECURITY_INFORMATION) || rawSecurityInformation.HasFlag(SECURITY_INFORMATION.UNPROTECTED_SACL_SECURITY_INFORMATION)) { sect |= AccessControlSections.Audit; } var buffer = new byte[rawSecurityDescriptorLength]; try { Marshal.Copy(rawSecurityDescriptor, buffer, 0, (int)rawSecurityDescriptorLength); var sec = rawFileInfo.IsDirectory ? (FileSystemSecurity)new DirectorySecurity() : new FileSecurity(); sec.SetSecurityDescriptorBinaryForm(buffer); logger.Debug("SetFileSecurityProxy : {0}", rawFileName); logger.Debug("\tAccessControlSections\t{0}", sect); logger.Debug("\tFileSystemSecurity\t{0}", sec); logger.Debug("\tContext\t{0}", rawFileInfo); var result = operations.SetFileSecurity(rawFileName, sec, sect, rawFileInfo); logger.Debug("SetFileSecurityProxy : {0} Return : {1}", rawFileName, result); return result; } catch (Exception ex) { logger.Error("SetFileSecurityProxy : {0} Throw : {1}", rawFileName, ex.Message); return DokanResult.InvalidParameter; } }
public NtStatus GetFileSecurityProxy(string rawFileName, ref SECURITY_INFORMATION rawRequestedInformation, IntPtr rawSecurityDescriptor, uint rawSecurityDescriptorLength, ref uint rawSecurityDescriptorLengthNeeded, DokanFileInfo rawFileInfo) { var sect = AccessControlSections.None; if (rawRequestedInformation.HasFlag(SECURITY_INFORMATION.OWNER_SECURITY_INFORMATION)) { sect |= AccessControlSections.Owner; } if (rawRequestedInformation.HasFlag(SECURITY_INFORMATION.GROUP_SECURITY_INFORMATION)) { sect |= AccessControlSections.Group; } if (rawRequestedInformation.HasFlag(SECURITY_INFORMATION.DACL_SECURITY_INFORMATION) || rawRequestedInformation.HasFlag(SECURITY_INFORMATION.PROTECTED_DACL_SECURITY_INFORMATION) || rawRequestedInformation.HasFlag(SECURITY_INFORMATION.UNPROTECTED_DACL_SECURITY_INFORMATION)) { sect |= AccessControlSections.Access; } if (rawRequestedInformation.HasFlag(SECURITY_INFORMATION.SACL_SECURITY_INFORMATION) || rawRequestedInformation.HasFlag(SECURITY_INFORMATION.PROTECTED_SACL_SECURITY_INFORMATION) || rawRequestedInformation.HasFlag(SECURITY_INFORMATION.UNPROTECTED_SACL_SECURITY_INFORMATION)) { sect |= AccessControlSections.Audit; } try { logger.Debug("GetFileSecurityProxy : {0}", rawFileName); logger.Debug("\tFileSystemSecurity\t{0}", sect); logger.Debug("\tContext\t{0}", rawFileInfo); FileSystemSecurity sec; var result = operations.GetFileSecurity(rawFileName, out sec, sect, rawFileInfo); if (result == DokanResult.Success /*&& sec != null*/) { Debug.Assert(sec != null); logger.Debug("\tFileSystemSecurity Result : {0}", sec); var buffer = sec.GetSecurityDescriptorBinaryForm(); rawSecurityDescriptorLengthNeeded = (uint)buffer.Length; if (buffer.Length > rawSecurityDescriptorLength) return DokanResult.BufferOverflow; Marshal.Copy(buffer, 0, rawSecurityDescriptor, buffer.Length); } logger.Debug("GetFileSecurityProxy : {0} Return : {1}", rawFileName, result); return result; } catch (Exception ex) { logger.Error("GetFileSecurityProxy : {0} Throw : {1}", rawFileName, ex.Message); return DokanResult.InvalidParameter; } }