Beispiel #1
0
        /// <summary>
        /// Get Child Node from Path and Smb1-Result.
        /// </summary>
        /// <param name="parentNode"></param>
        /// <param name="info"></param>
        /// <returns></returns>
        public static Node GetChild(
            Node parentNode,
            FindFileDirectoryInfo info
            )
        {
            if (parentNode == null)
            {
                throw new ArgumentException("Required parentNode.");
            }
            if (info == null)
            {
                throw new ArgumentException("Required info.");
            }

            var pathSet = PathSet.Parse($@"{parentNode.FullPath}\{info.FileName}");

            if (info.ExtFileAttributes.HasFlag(ExtendedFileAttributes.Directory))
            {
                // Folder
                var result = NodeFactory.InnerGet(
                    NodeType.Folder,
                    pathSet,
                    parentNode.ParamSet
                    );
                result.Created      = info.CreationTime;
                result.Updated      = info.LastWriteTime;
                result.LastAccessed = info.LastAccessTime;

                return(result);
            }
            else
            {
                // File
                var result = NodeFactory.InnerGet(
                    NodeType.File,
                    pathSet,
                    parentNode.ParamSet
                    );
                result.Size         = info.EndOfFile;
                result.Created      = info.CreationTime;
                result.Updated      = info.LastWriteTime;
                result.LastAccessed = info.LastAccessTime;

                return(result);
            }
        }
Beispiel #2
0
        internal static FindInformationEntry FromFileSystemEntry(FileSystemEntry entry, FindInformationLevel informationLevel, bool isUnicode, bool returnResumeKeys)
        {
            switch (informationLevel)
            {
            case FindInformationLevel.SMB_INFO_STANDARD:
            {
                FindInfoStandard result = new FindInfoStandard(returnResumeKeys);
                result.CreationDateTime   = entry.CreationTime;
                result.LastAccessDateTime = entry.LastAccessTime;
                result.LastWriteDateTime  = entry.LastWriteTime;
                result.FileDataSize       = (uint)Math.Min(entry.Size, UInt32.MaxValue);
                result.AllocationSize     = (uint)Math.Min(GetAllocationSize(entry.Size), UInt32.MaxValue);
                result.Attributes         = GetFileAttributes(entry);
                result.FileName           = entry.Name;
                return(result);
            }

            case FindInformationLevel.SMB_INFO_QUERY_EA_SIZE:
            {
                FindInfoQueryEASize result = new FindInfoQueryEASize(returnResumeKeys);
                result.CreationDateTime   = entry.CreationTime;
                result.LastAccessDateTime = entry.LastAccessTime;
                result.LastWriteDateTime  = entry.LastWriteTime;
                result.FileDataSize       = (uint)Math.Min(entry.Size, UInt32.MaxValue);
                result.AllocationSize     = (uint)Math.Min(GetAllocationSize(entry.Size), UInt32.MaxValue);
                result.Attributes         = GetFileAttributes(entry);
                result.EASize             = 0;
                result.FileName           = entry.Name;
                return(result);
            }

            case FindInformationLevel.SMB_INFO_QUERY_EAS_FROM_LIST:
            {
                FindInfoQueryExtendedAttributesFromList result = new FindInfoQueryExtendedAttributesFromList(returnResumeKeys);
                result.CreationDateTime      = entry.CreationTime;
                result.LastAccessDateTime    = entry.LastAccessTime;
                result.LastWriteDateTime     = entry.LastWriteTime;
                result.FileDataSize          = (uint)Math.Min(entry.Size, UInt32.MaxValue);
                result.AllocationSize        = (uint)Math.Min(GetAllocationSize(entry.Size), UInt32.MaxValue);
                result.Attributes            = GetFileAttributes(entry);
                result.ExtendedAttributeList = new FullExtendedAttributeList();
                return(result);
            }

            case FindInformationLevel.SMB_FIND_FILE_DIRECTORY_INFO:
            {
                FindFileDirectoryInfo result = new FindFileDirectoryInfo();
                result.CreationTime       = entry.CreationTime;
                result.LastAccessTime     = entry.LastAccessTime;
                result.LastWriteTime      = entry.LastWriteTime;
                result.LastAttrChangeTime = entry.LastWriteTime;
                result.EndOfFile          = entry.Size;
                result.AllocationSize     = GetAllocationSize(entry.Size);
                result.ExtFileAttributes  = GetExtendedFileAttributes(entry);
                result.FileName           = entry.Name;
                return(result);
            }

            case FindInformationLevel.SMB_FIND_FILE_FULL_DIRECTORY_INFO:
            {
                FindFileFullDirectoryInfo result = new FindFileFullDirectoryInfo();
                result.CreationTime       = entry.CreationTime;
                result.LastAccessTime     = entry.LastAccessTime;
                result.LastWriteTime      = entry.LastWriteTime;
                result.LastAttrChangeTime = entry.LastWriteTime;
                result.EndOfFile          = entry.Size;
                result.AllocationSize     = GetAllocationSize(entry.Size);
                result.ExtFileAttributes  = GetExtendedFileAttributes(entry);
                result.FileName           = entry.Name;
                return(result);
            }

            case FindInformationLevel.SMB_FIND_FILE_NAMES_INFO:
            {
                FindFileNamesInfo result = new FindFileNamesInfo();
                result.FileName = entry.Name;
                return(result);
            }

            case FindInformationLevel.SMB_FIND_FILE_BOTH_DIRECTORY_INFO:
            {
                FindFileBothDirectoryInfo result = new FindFileBothDirectoryInfo();
                result.CreationTime      = entry.CreationTime;
                result.LastAccessTime    = entry.LastAccessTime;
                result.LastWriteTime     = entry.LastWriteTime;
                result.LastChangeTime    = entry.LastWriteTime;
                result.EndOfFile         = entry.Size;
                result.AllocationSize    = GetAllocationSize(entry.Size);
                result.ExtFileAttributes = GetExtendedFileAttributes(entry);
                result.ShortName         = GetShortName(entry.Name);
                result.FileName          = entry.Name;
                return(result);
            }

            default:
            {
                throw new UnsupportedInformationLevelException();
            }
            }
        }
Beispiel #3
0
        /// <exception cref="SMBLibrary.UnsupportedInformationLevelException"></exception>
        public static FindInformation GetFindInformation(QueryDirectoryFileInformation entry, FindInformationLevel informationLevel, bool isUnicode, bool returnResumeKeys)
        {
            switch (informationLevel)
            {
            case FindInformationLevel.SMB_FIND_FILE_DIRECTORY_INFO:
            {
                FileDirectoryInformation fileDirectoryInfo = (FileDirectoryInformation)entry;

                FindFileDirectoryInfo result = new FindFileDirectoryInfo();
                result.FileIndex          = fileDirectoryInfo.FileIndex;
                result.CreationTime       = fileDirectoryInfo.CreationTime;
                result.LastAccessTime     = fileDirectoryInfo.LastAccessTime;
                result.LastWriteTime      = fileDirectoryInfo.LastWriteTime;
                result.LastAttrChangeTime = fileDirectoryInfo.LastWriteTime;
                result.EndOfFile          = fileDirectoryInfo.EndOfFile;
                result.AllocationSize     = fileDirectoryInfo.AllocationSize;
                result.ExtFileAttributes  = (ExtendedFileAttributes)fileDirectoryInfo.FileAttributes;
                result.FileName           = fileDirectoryInfo.FileName;
                return(result);
            }

            case FindInformationLevel.SMB_FIND_FILE_FULL_DIRECTORY_INFO:
            {
                FileFullDirectoryInformation fileFullDirectoryInfo = (FileFullDirectoryInformation)entry;

                FindFileFullDirectoryInfo result = new FindFileFullDirectoryInfo();
                result.FileIndex          = fileFullDirectoryInfo.FileIndex;
                result.CreationTime       = fileFullDirectoryInfo.CreationTime;
                result.LastAccessTime     = fileFullDirectoryInfo.LastAccessTime;
                result.LastWriteTime      = fileFullDirectoryInfo.LastWriteTime;
                result.LastAttrChangeTime = fileFullDirectoryInfo.LastWriteTime;
                result.EndOfFile          = fileFullDirectoryInfo.EndOfFile;
                result.AllocationSize     = fileFullDirectoryInfo.AllocationSize;
                result.ExtFileAttributes  = (ExtendedFileAttributes)fileFullDirectoryInfo.FileAttributes;
                result.EASize             = fileFullDirectoryInfo.EaSize;
                result.FileName           = fileFullDirectoryInfo.FileName;
                return(result);
            }

            case FindInformationLevel.SMB_FIND_FILE_NAMES_INFO:
            {
                FileNamesInformation fileNamesInfo = (FileNamesInformation)entry;

                FindFileNamesInfo result = new FindFileNamesInfo();
                result.FileIndex = fileNamesInfo.FileIndex;
                result.FileName  = fileNamesInfo.FileName;
                return(result);
            }

            case FindInformationLevel.SMB_FIND_FILE_BOTH_DIRECTORY_INFO:
            {
                FileBothDirectoryInformation fileBothDirectoryInfo = (FileBothDirectoryInformation)entry;

                FindFileBothDirectoryInfo result = new FindFileBothDirectoryInfo();
                result.FileIndex         = fileBothDirectoryInfo.FileIndex;
                result.CreationTime      = fileBothDirectoryInfo.CreationTime;
                result.LastAccessTime    = fileBothDirectoryInfo.LastAccessTime;
                result.LastWriteTime     = fileBothDirectoryInfo.LastWriteTime;
                result.LastChangeTime    = fileBothDirectoryInfo.LastWriteTime;
                result.EndOfFile         = fileBothDirectoryInfo.EndOfFile;
                result.AllocationSize    = fileBothDirectoryInfo.AllocationSize;
                result.ExtFileAttributes = (ExtendedFileAttributes)fileBothDirectoryInfo.FileAttributes;
                result.EASize            = fileBothDirectoryInfo.EaSize;
                result.Reserved          = fileBothDirectoryInfo.Reserved;
                result.ShortName         = fileBothDirectoryInfo.ShortName;
                result.FileName          = fileBothDirectoryInfo.FileName;
                return(result);
            }

            default:
            {
                throw new UnsupportedInformationLevelException();
            }
            }
        }