DokanError IDokanOperations.GetFileSecurity(string filename, out FileSystemSecurity security, AccessControlSections sections, DokanFileInfo info) { //Log("GetSecurrityInfo:{0}:{1}", filename, sections); LogFSActionInit("GetFileSecurity", filename, (SftpContext)info.Context, "Sections:{0}",sections); var sftpattributes = (info.Context as SftpContext).Attributes; var rights = FileSystemRights.ReadPermissions | FileSystemRights.ReadExtendedAttributes | FileSystemRights.ReadAttributes | FileSystemRights.Synchronize; if (UserCanRead(sftpattributes)) { rights |= FileSystemRights.ReadData; } if (UserCanWrite(sftpattributes)) { rights |= FileSystemRights.Write; } if (UserCanExecute(sftpattributes) && info.IsDirectory) { rights |= FileSystemRights.Traverse; } security = info.IsDirectory ? new DirectorySecurity() as FileSystemSecurity : new FileSecurity(); // if(sections.HasFlag(AccessControlSections.Access)) security.AddAccessRule(new FileSystemAccessRule("Everyone", rights, AccessControlType.Allow)); security.AddAccessRule(new FileSystemAccessRule("Everyone", FileSystemRights.FullControl ^ rights, AccessControlType.Deny)); //not sure this works at all, needs testing // if (sections.HasFlag(AccessControlSections.Owner)) security.SetOwner(new NTAccount("None")); // if (sections.HasFlag(AccessControlSections.Group)) security.SetGroup(new NTAccount("None")); LogFSActionSuccess("GetFileSecurity", filename, (SftpContext)info.Context, "Sections:{0} Rights:{1}", sections, rights); return DokanError.ErrorSuccess; }