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); } }
//// 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 NtStatus GetFileSecurity(string fileName, out FileSystemSecurity security, AccessControlSections sections, DokanFileInfo info) { return(ope_.GetFileSecurity(fileName, out security, sections, info)); }