Пример #1
0
 public abstract void SetFileAttributes(CbFsFileInfo fileInfo, CbFsHandleInfo userContextInfo, DateTime creationTime,
                                        DateTime lastAccessTime, DateTime lastWriteTime, uint fileAttributes);
Пример #2
0
 public abstract bool CanFileBeDeleted(CbFsFileInfo fileInfo, CbFsHandleInfo HandleInfo);
Пример #3
0
 private void SetFileAttributes(CallbackFileSystem Sender, CbFsFileInfo fileInfo, CbFsHandleInfo userContextInfo, DateTime CreationTime,
                                DateTime LastAccessTime, DateTime LastWriteTime, uint FileAttributes)
 {
     CBFSWinUtil.Invoke("SetFileAttributes", () =>
                        SetFileAttributes(fileInfo, userContextInfo, CreationTime, LastAccessTime, LastWriteTime, FileAttributes));
 }
Пример #4
0
 public abstract void EnumerateDirectory(CbFsFileInfo directoryInfo, CbFsHandleInfo HandleInfo,
                                         CbFsDirectoryEnumerationInfo DirectoryEnumerationInfo, string Mask, bool Restart,
                                         ref bool FileFound, ref string FileName, ref string ShortFileName,
                                         ref DateTime CreationTime, ref DateTime LastAccessTime, ref DateTime LastWriteTime, ref long lengthOfFile,
                                         ref long AllocationSize, ref CBFS_LARGE_INTEGER FileId, ref uint FileAttributes);
Пример #5
0
        private void CanFileBeDeleted(CallbackFileSystem Sender, CbFsFileInfo fileInfo, CbFsHandleInfo HandleInfo, ref bool CanBeDeleted)
        {
            bool canBeDeleted = false;

            CBFSWinUtil.Invoke("CanFileBeDeleted", () => canBeDeleted = CanFileBeDeleted(fileInfo, HandleInfo));
            CanBeDeleted = canBeDeleted;
        }
Пример #6
0
 public abstract void CloseFile(CbFsFileInfo fileInfo, CbFsHandleInfo userContextInfo);
Пример #7
0
 private void EnumerateDirectory(CallbackFileSystem Sender, CbFsFileInfo directoryInfo, CbFsHandleInfo HandleInfo,
                                 CbFsDirectoryEnumerationInfo DirectoryEnumerationInfo, string Mask, int Index,
                                 [MarshalAs(UnmanagedType.U1)] bool Restart, ref bool FileFound, ref string FileName, ref string ShortFileName,
                                 ref DateTime CreationTime, ref DateTime LastAccessTime, ref DateTime LastWriteTime, ref long lengthOfFile,
                                 ref long AllocationSize, ref CBFS_LARGE_INTEGER FileId, ref uint FileAttributes)
 {
     Log.Trace("EnumerateDirectory IN");
     try
     {
         EnumerateDirectory(directoryInfo, HandleInfo, DirectoryEnumerationInfo, Mask, Restart,
                            ref FileFound, ref FileName, ref ShortFileName,
                            ref CreationTime, ref LastAccessTime, ref LastWriteTime,
                            ref lengthOfFile, ref AllocationSize, ref FileId, ref FileAttributes);
     }
     catch (Exception ex)
     {
         CBFSWinUtil.BestAttemptToECBFSError(ex);
     }
     finally
     {
         Log.Trace("EnumerateDirectory OUT");
     }
 }
Пример #8
0
 public abstract void OpenFile(string FileName, uint DesiredAccess, uint fileAttributes, uint ShareMode, CbFsFileInfo fileInfo, CbFsHandleInfo userContextInfo);
Пример #9
0
 private void CloseFile(CallbackFileSystem Sender, CbFsFileInfo fileInfo, CbFsHandleInfo userContextInfo)
 {
     CBFSWinUtil.Invoke("CloseFile", () => CloseFile(fileInfo, userContextInfo));
 }
Пример #10
0
        private void CbFsOpenFile(object sender,
            string FileName,
            uint DesiredAccess,
            uint FileAttributes,
            uint ShareMode,
			CbFsFileInfo FileInfo,
			CbFsHandleInfo HandleInfo
            )
        {
            //Console.WriteLine("{0}::{1}", "CbFsOpenFile", "Event Call.....");
            //Console.WriteLine("{0}::{1}", "\t FileName", FileName);
            //Console.WriteLine("{0}::{1}", "\t FileAttributes", FileAttributes);

            if(FileInfo.UserContext.Equals(IntPtr.Zero))
            {
                //Console.WriteLine("{0}::{1}", "\t UserContext", "Zero");
                VirtualFile vfile = null;
                if (FindVirtualFile(FileName, ref vfile))
                {
                    //Console.WriteLine("{0}::{1}", "\t FindVirtualFile", "true");
                    GCHandle gch = GCHandle.Alloc(vfile);
                    FileInfo.UserContext = GCHandle.ToIntPtr(gch);
                }
            }
        }
Пример #11
0
 private void OpenFile(CallbackFileSystem Sender, string FileName, uint DesiredAccess, uint fileAttributes, uint ShareMode,
                       CbFsFileInfo fileInfo, CbFsHandleInfo userContextInfo)
 {
     CBFSWinUtil.Invoke("OpenFile", () => OpenFile(FileName, DesiredAccess, fileAttributes, ShareMode, fileInfo, userContextInfo));
 }
Пример #12
0
        private void CbFsEnumerateDirectory(
            object sender,
            CbFsFileInfo DirectoryInfo,
			CbFsHandleInfo HandleInfo,
			CbFsDirectoryEnumerationInfo EnumerationInfo,
            string Mask,
            int Index,
            bool Restart,
            ref bool FileFound,
            ref string FileName,
            ref string ShortFileName,
            ref DateTime CreationTime,
            ref DateTime LastAccessTime,
            ref DateTime LastWriteTime,
            ref long EndOfFile,
            ref long AllocationSize,
            ref CBFS_LARGE_INTEGER FileId,
            ref uint FileAttributes
            )
        {
            //Console.WriteLine("{0}::{1}", "CbFsEnumerateDirectory", "Event Call.....");
            //Console.WriteLine("{0}::{1}::{2}", "CbFsEnumerateDirectory \t DirectoryInfo.FileName", DirectoryInfo.FileName, Mask);

            bool ResetEnumeration = false;
            bool ExactMatch = false;
            FileFound = false;
            ENUM_INFO pInfo = null;
            VirtualFile vfile = null, vdir = null;

            ExactMatch = !Mask.Equals("*");

            if ((Restart || EnumerationInfo.UserContext == IntPtr.Zero) && !ExactMatch) {
                ResetEnumeration = true;
                //Console.WriteLine("{0}", " \t Restart.");
            }

            if (Restart && (EnumerationInfo.UserContext != IntPtr.Zero)) {
                if (GCHandle.FromIntPtr(EnumerationInfo.UserContext).IsAllocated) {
                    GCHandle.FromIntPtr(EnumerationInfo.UserContext).Free();
                }
                EnumerationInfo.UserContext = IntPtr.Zero;
                //Console.WriteLine("{0}", " \t EnumerationInfo.UserContext = IntPtr.Zero");
            }

            if (EnumerationInfo.UserContext.Equals(IntPtr.Zero)) {

                //Console.WriteLine("{0}::{1}", "\t Restart", Restart);

                pInfo = new ENUM_INFO();

                GCHandle gch = GCHandle.Alloc(pInfo);

                EnumerationInfo.UserContext = GCHandle.ToIntPtr(gch);

                FindVirtualFile(DirectoryInfo.FileName, ref vdir);

                //Mask가 * 이 아니면 파일 실행시이다.
                //

                // 전체(*)를 가져와야 할 경우 Web에서 리스트를 가져온다, 파일 실행 시 제외.

                if (!ExactMatch && vdir.CanLoadList()) {
                    // occam 에서 리스트 가져오기
                    ListDirectory occamList = g_OccamFile.getList(DirectoryInfo.FileName);
                    int count = occamList.Total;

                    vdir.SetLoadListTime();

                    for (int i = 0; i < count; i++) {
                        string fileName = occamList.Data[i].Name.Replace("/", "\\");

                        VirtualFile replaceVfile = null;
                        if (vdir.Context.GetFile(fileName, ref replaceVfile) == false) {
                            // 새로 만들기
                            replaceVfile = new VirtualFile(GetFileName(fileName));//, contentSize);
                            replaceVfile.Attributes = (FileAttributes)(occamList.Data[i].ItemType.Equals("Folder") ? FILE_ATTRIBUTE_DIRECTORY : FILE_ATTRIBUTE_NORMAL);
                            replaceVfile.EndOfFile = occamList.Data[i].ContentSize;
                            replaceVfile.CreationTime = Convert.ToDateTime(occamList.Data[i].CreatedDate);
                            replaceVfile.LastAccessTime = Convert.ToDateTime(occamList.Data[i].LastModifiedDate);
                            replaceVfile.LastWriteTime = Convert.ToDateTime(occamList.Data[i].LastModifiedDate); // TODO : writetime 값 가져오기

                            replaceVfile.Waiting();
                            vdir.AddFile(replaceVfile);
                        } else if (replaceVfile.EndOfFile != occamList.Data[i].ContentSize) {
                            // reset
                            replaceVfile.Attributes = (FileAttributes)(occamList.Data[i].ItemType.Equals("Folder") ? FILE_ATTRIBUTE_DIRECTORY : FILE_ATTRIBUTE_NORMAL);
                            replaceVfile.EndOfFile = occamList.Data[i].ContentSize;
                            replaceVfile.CreationTime = Convert.ToDateTime(occamList.Data[i].CreatedDate);
                            replaceVfile.LastAccessTime = Convert.ToDateTime(occamList.Data[i].LastModifiedDate);
                            replaceVfile.LastWriteTime = Convert.ToDateTime(occamList.Data[i].LastModifiedDate); // TODO : writetime 값 가져오기

                            replaceVfile.Waiting();
                            vdir.AddFile(replaceVfile);
                        }
                    }

                    // vdir file count loop
                    int vCount = vdir.Context.GetCount();

                    for (int i = 0; i < vCount; i++) {
                        VirtualFile replaceVfile = null;
                        vdir.Context.GetFile(i, ref replaceVfile);

                        Item OccamData = null;
                        if (occamList.GetItem(replaceVfile.Name, ref OccamData) == false) {
                            //remove
                            if(replaceVfile.GetVFStatus.Equals(VirtualFileStatus.Waiting)) {
                                vdir.Context.Remove(replaceVfile);
                            }
                        }
                    }
                }

                pInfo.vfile = vdir;

                //Console.WriteLine("{0}", " \t create a vfile.");

            } else {
                pInfo = (ENUM_INFO)GCHandle.FromIntPtr(EnumerationInfo.UserContext).Target;

                vdir = pInfo.vfile;

                //Console.WriteLine("{0}", " \t EnumerationInfo.UserContext use.");
            }

            if (ResetEnumeration) {
                pInfo.Index = 0;
                //Console.WriteLine("{0}", " \t pInfo.Index = 0");
            } else {
                //Console.WriteLine("{0}::{1}", "pInfo.Index", pInfo.Index);
            }

            if (pInfo.ExactMatch == true) {
                FileFound = false;
                //Console.WriteLine("{0}", " \t File found.");
            } else {
                FileFound = ExactMatch ?
                    vdir.Context.GetFile(Mask, ref vfile) : vdir.Context.GetFile(pInfo.Index, ref vfile);
                //Console.WriteLine("{0}", " \t file not found.");
            }

            if (FileFound) {
                //Console.WriteLine("{0}::{1}", " \t create file", vfile.Name);
                FileName = vfile.Name;

                CreationTime = vfile.CreationTime;

                LastAccessTime = vfile.LastAccessTime;

                LastWriteTime = vfile.LastWriteTime;

                EndOfFile = vfile.EndOfFile;

                AllocationSize = vfile.AllocationSize;

                FileId.QuadPart = 0;

                FileAttributes = Convert.ToUInt32(vfile.Attributes);

            }
            pInfo.ExactMatch = ExactMatch;
            ++pInfo.Index;
        }
Пример #13
0
        private void CbFsCreateFile(object sender,
            string FileName,
            uint DesiredAccess,
            uint FileAttributes,
            uint ShareMode,
			CbFsFileInfo FileInfo,
			CbFsHandleInfo HandleInfo
            )
        {
            Console.WriteLine("{0}::{1}", "CbFsCreateFile", "Event Call.....");

            // TODO : HTTP Get Query.
            // url is create-file
            // parameter is deviceId, driveLetter, filePath
            // response body is null.

            VirtualFile vfile = null, vdir = null;

            try {

                FindVirtualDirectory(FileName, ref vdir);
                vfile = new VirtualFile(GetFileName(FileName));

                vfile.Attributes = (FileAttributes)FileAttributes;

                vfile.CreationTime = vfile.LastAccessTime = vfile.LastWriteTime = DateTime.UtcNow;

                vdir.AddFile(vfile);

                GCHandle gch = GCHandle.Alloc(vfile);

                FileInfo.UserContext = GCHandle.ToIntPtr(gch);

                if (FileAttributes == 16) {
                    Console.WriteLine("\t \t is Directory");
                    g_OccamFile.WriteFile(vfile, FileInfo.FileName, "Folder");
                    vfile.Waiting();
                }

            }
            catch (Exception err) {
                Console.WriteLine("{0}::{1}", "\t CbFsCreateFile.Exception", err.Message);
            }
        }
Пример #14
0
        private void CbFsCloseFile(object sender, CbFsFileInfo FileInfo, CbFsHandleInfo HandleInfo)
        {
            //Console.WriteLine("{0}::{1}", "CbFsCloseFile", "Event Call.....");
            if(FileInfo.UserContext != IntPtr.Zero)
            {
                GCHandle gch = GCHandle.FromIntPtr(FileInfo.UserContext);
                /*
                VirtualFile vfile = (VirtualFile)gch.Target;
                if (vfile.GetVFStatus.Equals(VirtualFileStatus.Writing)) {
                    g_OccamFile.WriteFile(vfile, FileInfo.FileName, "Content");
                    vfile.Waiting();
                }
                vfile.CloseAndNewStream();
                */
                gch.Free();

                FileInfo.UserContext = IntPtr.Zero;
            }
        }
Пример #15
0
 private void CbFsCanFileBeDeleted(object sender, CbFsFileInfo FileInfo, CbFsHandleInfo HandleInfo, ref Boolean CanBeDeleted)
 {
     Console.WriteLine("{0}::{1}", "CbFsCanFileBeDeleted", "Event Call.....");
     CanBeDeleted = true;
 }
Пример #16
0
        private void CbFsSetFileAttributes(
            object sender,
            CbFsFileInfo FileInfo,
			CbFsHandleInfo HandleInfo,
            DateTime CreationTime,
            DateTime LastAccessTime,
            DateTime LastWriteTime,
            uint Attributes
            )
        {
            Console.WriteLine("{0}::{1}", "CbFsSetFileAttributes", "Event Call.....");
            GCHandle gch = GCHandle.FromIntPtr(FileInfo.UserContext);

            VirtualFile vfile = (VirtualFile)gch.Target;

            // the case when FileAttributes == 0 indicates that file attributes
            // not changed during this callback

            if (Attributes != 0)
                vfile.Attributes = (FileAttributes)Attributes;

            if(CreationTime != DateTime.MinValue)
            {
                vfile.CreationTime = CreationTime;
            }
            if(LastAccessTime != DateTime.MinValue)
            {
                vfile.LastAccessTime = LastAccessTime;
            }
            if(LastWriteTime != DateTime.MinValue)
            {
                vfile.LastWriteTime = LastWriteTime;
            }
        }